Skip to content

Commit b71cbf6

Browse files
committed
[GStreamer] Switch makeGStreamerElement to have proper string management
https://bugs.webkit.org/show_bug.cgi?id=289949 Reviewed by Philippe Normand. For the same price I removed the makeGStreamerBin function, that is supposed to be dead code. * Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp: (WebCore::GStreamerMediaEndpoint::maybeInsertNetSimForElement): (WebCore::GStreamerMediaEndpoint::initializePipeline): * Source/WebCore/platform/audio/gstreamer/AudioDecoderGStreamer.cpp: (WebCore::GStreamerInternalAudioDecoder::GStreamerInternalAudioDecoder): * Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp: (WebCore::AudioDestinationGStreamer::AudioDestinationGStreamer): * Source/WebCore/platform/audio/gstreamer/AudioFileReaderGStreamer.cpp: (WebCore::AudioFileReader::handleNewDeinterleavePad): (WebCore::AudioFileReader::plugDeinterleave): (WebCore::AudioFileReader::decodeAudioForBusCreation): * Source/WebCore/platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp: (WebCore::AudioSourceProviderGStreamer::AudioSourceProviderGStreamer): (WebCore::AudioSourceProviderGStreamer::configureAudioBin): (WebCore::AudioSourceProviderGStreamer::setClient): (WebCore::AudioSourceProviderGStreamer::handleNewDeinterleavePad): * Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp: (webKitWebAudioSrcConstructed): * Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp: (webKitGLVideoSinkConstructed): * Source/WebCore/platform/graphics/gstreamer/GStreamerAudioMixer.cpp: (WebCore::GStreamerAudioMixer::GStreamerAudioMixer): (WebCore::GStreamerAudioMixer::registerProducer): * Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp: (WebCore::createAutoAudioSink): (WebCore::makeGStreamerElement): (WebCore::makeGStreamerBin): Deleted. * Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h: * Source/WebCore/platform/graphics/gstreamer/GStreamerVideoFrameConverter.cpp: (WebCore::GStreamerVideoFrameConverter::Pipeline::Pipeline): * Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin): (WebCore::MediaPlayerPrivateGStreamer::createVideoSinkGL): (WebCore::MediaPlayerPrivateGStreamer::createVideoSink): * Source/WebCore/platform/graphics/gstreamer/TextCombinerGStreamer.cpp: (webKitTextCombinerHandleCaps): * Source/WebCore/platform/graphics/gstreamer/TextSinkGStreamer.cpp: (webkitTextSinkConstructed): * Source/WebCore/platform/graphics/gstreamer/VideoDecoderGStreamer.cpp: (WebCore::GStreamerInternalVideoDecoder::GStreamerInternalVideoDecoder): * Source/WebCore/platform/graphics/gstreamer/WebKitAudioSinkGStreamer.cpp: (webKitAudioSinkConfigure): * Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp: (WebCore::AppendPipeline::AppendPipeline): (WebCore::createOptionalParserForFormat): (WebCore::createOptionalEncoderForFormat): (WebCore::AppendPipeline::Track::initializeElements): * Source/WebCore/platform/gstreamer/GStreamerHolePunchQuirkFake.h: * Source/WebCore/platform/gstreamer/GStreamerHolePunchQuirkRialto.cpp: (WebCore::GStreamerHolePunchQuirkRialto::createHolePunchVideoSink): * Source/WebCore/platform/gstreamer/GStreamerHolePunchQuirkWesteros.cpp: (WebCore::GStreamerHolePunchQuirkWesteros::createHolePunchVideoSink): * Source/WebCore/platform/gstreamer/GStreamerQuirkAmLogic.cpp: (WebCore::GStreamerQuirkAmLogic::createWebAudioSink): * Source/WebCore/platform/gstreamer/GStreamerQuirkRealtek.cpp: (WebCore::GStreamerQuirkRealtek::createWebAudioSink): * Source/WebCore/platform/gstreamer/GStreamerQuirkRialto.cpp: (WebCore::GStreamerQuirkRialto::createAudioSink): (WebCore::GStreamerQuirkRialto::createWebAudioSink): * Source/WebCore/platform/gstreamer/PlatformSpeechSynthesizerGStreamer.cpp: (WebCore::GstSpeechSynthesisWrapper::GstSpeechSynthesisWrapper): * Source/WebCore/platform/gstreamer/VideoEncoderPrivateGStreamer.cpp: (videoEncoderSetEncoder): * Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioCapturer.cpp: (WebCore::GStreamerAudioCapturer::createConverter): * Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioRTPPacketizer.cpp: (WebCore::GStreamerAudioRTPPacketizer::create): (WebCore::GStreamerAudioRTPPacketizer::GStreamerAudioRTPPacketizer): * Source/WebCore/platform/mediastream/gstreamer/GStreamerCapturer.cpp: (WebCore::GStreamerCapturer::GStreamerCapturer): (WebCore::GStreamerCapturer::setupPipeline): (WebCore::GStreamerCapturer::makeElement): * Source/WebCore/platform/mediastream/gstreamer/GStreamerCapturer.h: * Source/WebCore/platform/mediastream/gstreamer/GStreamerIncomingTrackProcessor.cpp: (WebCore::GStreamerIncomingTrackProcessor::incomingTrackProcessor): (WebCore::GStreamerIncomingTrackProcessor::createParser): * Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp: * Source/WebCore/platform/mediastream/gstreamer/GStreamerMockDevice.cpp: (webkitMockDeviceCreateElement): * Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp: (WebCore::GStreamerVideoCaptureSource::GStreamerVideoCaptureSource): * Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.h: * Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCapturer.cpp: (WebCore::GStreamerVideoCapturer::GStreamerVideoCapturer): (WebCore::GStreamerVideoCapturer::createConverter): * Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCapturer.h: * Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoRTPPacketizer.cpp: (WebCore::GStreamerVideoRTPPacketizer::GStreamerVideoRTPPacketizer): * Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingVideoSourceGStreamer.cpp: (WebCore::RealtimeOutgoingVideoSourceGStreamer::initializePreProcessor): * Source/WebCore/platform/mediastream/libwebrtc/gstreamer/GStreamerVideoDecoderFactory.cpp: (WebCore::GStreamerWebRTCVideoDecoder::makeElement): (WebCore::GStreamerWebRTCVideoDecoder::CreateFilter): * Source/WebCore/platform/mediastream/libwebrtc/gstreamer/GStreamerVideoEncoderFactory.cpp: (WebCore::LibWebRTCGStreamerVideoEncoder::makeElement): Canonical link: https://commits.webkit.org/292349@main Signed-off-by: Xabier Rodriguez Calvar <calvaris@igalia.com>
1 parent 3b4cffd commit b71cbf6

41 files changed

Lines changed: 165 additions & 179 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ void GStreamerMediaEndpoint::maybeInsertNetSimForElement(GstBin* bin, GstElement
124124

125125
gst_pad_unlink(pad.get(), peer.get());
126126

127-
auto netsim = makeGStreamerElement("netsim", nullptr);
127+
auto netsim = makeGStreamerElement("netsim"_s);
128128
gst_bin_add(GST_BIN_CAST(bin), netsim);
129129

130130
GST_DEBUG_OBJECT(m_pipeline.get(), "Configuring %" GST_PTR_FORMAT " for transport element %" GST_PTR_FORMAT, netsim, element);
@@ -160,7 +160,7 @@ bool GStreamerMediaEndpoint::initializePipeline()
160160
});
161161

162162
auto binName = makeString("webkit-webrtcbin-"_s, nPipeline++);
163-
m_webrtcBin = makeGStreamerElement("webrtcbin", binName.ascii().data());
163+
m_webrtcBin = makeGStreamerElement("webrtcbin"_s, binName);
164164
if (!m_webrtcBin)
165165
return false;
166166

Source/WebCore/platform/audio/gstreamer/AudioDecoderGStreamer.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ GStreamerInternalAudioDecoder::GStreamerInternalAudioDecoder(const String& codec
166166
{
167167
GST_DEBUG_OBJECT(element.get(), "Configuring decoder for codec %s", codecName.ascii().data());
168168

169-
const char* parser = nullptr;
169+
ASCIILiteral parser;
170170
if (codecName.startsWith("mp4a"_s)) {
171171
m_inputCaps = adoptGRef(gst_caps_new_simple("audio/mpeg", "mpegversion", G_TYPE_INT, 4, "channels", G_TYPE_INT, config.numberOfChannels, nullptr));
172172
auto codecData = wrapSpanData(config.description);
@@ -181,7 +181,7 @@ GStreamerInternalAudioDecoder::GStreamerInternalAudioDecoder(const String& codec
181181
m_inputCaps = adoptGRef(gst_caps_new_simple("audio/x-opus", "channel-mapping-family", G_TYPE_INT, channelMappingFamily, nullptr));
182182
m_header = wrapSpanData(config.description);
183183
if (m_header)
184-
parser = "opusparse";
184+
parser = "opusparse"_s;
185185
} else if (codecName == "alaw"_s)
186186
m_inputCaps = adoptGRef(gst_caps_new_simple("audio/x-alaw", "rate", G_TYPE_INT, config.sampleRate, "channels", G_TYPE_INT, config.numberOfChannels, nullptr));
187187
else if (codecName == "ulaw"_s)
@@ -192,15 +192,15 @@ GStreamerInternalAudioDecoder::GStreamerInternalAudioDecoder(const String& codec
192192
GST_WARNING("Decoder config description for flac codec is mandatory");
193193
return;
194194
}
195-
parser = "flacparse";
195+
parser = "flacparse"_s;
196196
m_inputCaps = adoptGRef(gst_caps_new_empty_simple("audio/x-flac"));
197197
} else if (codecName == "vorbis"_s) {
198198
m_header = wrapSpanData(config.description);
199199
if (!m_header) {
200200
GST_WARNING("Decoder config description for vorbis codec is mandatory");
201201
return;
202202
}
203-
parser = "oggparse";
203+
parser = "oggparse"_s;
204204
m_inputCaps = adoptGRef(gst_caps_new_empty_simple("application/ogg"));
205205
} else if (codecName.startsWith("pcm-"_s)) {
206206
auto components = codecName.split('-');
@@ -223,7 +223,7 @@ GStreamerInternalAudioDecoder::GStreamerInternalAudioDecoder(const String& codec
223223
m_inputCaps = adoptGRef(gst_caps_new_simple("audio/x-raw", "format", G_TYPE_STRING, gst_audio_format_to_string(gstPcmFormat),
224224
"rate", G_TYPE_INT, config.sampleRate, "channels", G_TYPE_INT, config.numberOfChannels,
225225
"layout", G_TYPE_STRING, "interleaved", nullptr));
226-
parser = "rawaudioparse";
226+
parser = "rawaudioparse"_s;
227227
} else
228228
return;
229229

@@ -235,18 +235,18 @@ GStreamerInternalAudioDecoder::GStreamerInternalAudioDecoder(const String& codec
235235
auto* factory = gst_element_get_factory(element.get());
236236
isParserRequired = !gst_element_factory_can_sink_all_caps(factory, m_inputCaps.get());
237237
}
238-
if (!g_strcmp0(parser, "rawaudioparse")) {
239-
harnessedElement = makeGStreamerElement(parser, nullptr);
238+
if (parser == "rawaudioparse"_s) {
239+
harnessedElement = makeGStreamerElement(parser);
240240
if (!harnessedElement) {
241-
GST_WARNING_OBJECT(element.get(), "Required parser %s not found", parser);
241+
GST_WARNING_OBJECT(element.get(), "Required parser %s not found", parser.characters());
242242
m_inputCaps.clear();
243243
return;
244244
}
245245
} else if (parser && isParserRequired) {
246246
// The decoder won't accept the input caps, so put a parser in front.
247-
auto* parserElement = makeGStreamerElement(parser, nullptr);
247+
auto* parserElement = makeGStreamerElement(parser);
248248
if (!parserElement) {
249-
GST_WARNING_OBJECT(element.get(), "Required parser %s not found, decoding will fail", parser);
249+
GST_WARNING_OBJECT(element.get(), "Required parser %s not found, decoding will fail", parser.characters());
250250
m_inputCaps.clear();
251251
return;
252252
}

Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,8 @@ AudioDestinationGStreamer::AudioDestinationGStreamer(AudioIOCallback& callback,
149149
}
150150
}
151151

152-
GstElement* audioConvert = makeGStreamerElement("audioconvert", nullptr);
153-
GstElement* audioResample = makeGStreamerElement("audioresample", nullptr);
152+
GstElement* audioConvert = makeGStreamerElement("audioconvert"_s);
153+
GstElement* audioResample = makeGStreamerElement("audioresample"_s);
154154

155155
auto queue = gst_element_factory_make("queue", nullptr);
156156
g_object_set(queue, "max-size-buffers", 2, "max-size-bytes", 0, "max-size-time", static_cast<guint64>(0), nullptr);
@@ -166,7 +166,7 @@ AudioDestinationGStreamer::AudioDestinationGStreamer(AudioIOCallback& callback,
166166
// 1) Some platform sinks don't support non-interleaved audio without special caps (rialtowebaudiosink).
167167
// 2) Interaudio sink/src doesn't fully support non-interleaved audio (webkit audio sink)
168168
// 3) audiomixer doesn't support non-interleaved audio in output pipeline (webkit audio sink)
169-
GstElement* capsFilter = makeGStreamerElement("capsfilter", nullptr);
169+
GstElement* capsFilter = makeGStreamerElement("capsfilter"_s);
170170
GRefPtr<GstCaps> caps = adoptGRef(gst_caps_new_simple("audio/x-raw", "layout", G_TYPE_STRING, "interleaved", nullptr));
171171
g_object_set(capsFilter, "caps", caps.get(), nullptr);
172172
gst_bin_add(GST_BIN_CAST(m_pipeline.get()), capsFilter);

Source/WebCore/platform/audio/gstreamer/AudioFileReaderGStreamer.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ void AudioFileReader::handleNewDeinterleavePad(GstPad* pad)
293293
// in an appsink so we can pull the data from each
294294
// channel. Pipeline looks like:
295295
// ... deinterleave ! appsink.
296-
GstElement* sink = makeGStreamerElement("appsink", nullptr);
296+
GstElement* sink = makeGStreamerElement("appsink"_s);
297297

298298
if (!m_firstChannelType) {
299299
auto caps = adoptGRef(gst_pad_query_caps(pad, nullptr));
@@ -352,10 +352,10 @@ void AudioFileReader::plugDeinterleave(GstPad* pad)
352352
// A decodebin pad was added, plug in a deinterleave element to
353353
// separate each planar channel. Sub pipeline looks like
354354
// ... decodebin2 ! audioconvert ! audioresample ! capsfilter ! deinterleave.
355-
GstElement* audioConvert = makeGStreamerElement("audioconvert", nullptr);
356-
GstElement* audioResample = makeGStreamerElement("audioresample", nullptr);
355+
GstElement* audioConvert = makeGStreamerElement("audioconvert"_s);
356+
GstElement* audioResample = makeGStreamerElement("audioresample"_s);
357357
GstElement* capsFilter = gst_element_factory_make("capsfilter", nullptr);
358-
m_deInterleave = makeGStreamerElement("deinterleave", "deinterleave");
358+
m_deInterleave = makeGStreamerElement("deinterleave"_s, "deinterleave"_s);
359359

360360
g_object_set(m_deInterleave.get(), "keep-positions", TRUE, nullptr);
361361
g_signal_connect_swapped(m_deInterleave.get(), "pad-added", G_CALLBACK(deinterleavePadAddedCallback), this);
@@ -409,11 +409,11 @@ void AudioFileReader::decodeAudioForBusCreation()
409409
}, this, nullptr);
410410

411411
ASSERT(!m_data.empty());
412-
auto* source = makeGStreamerElement("giostreamsrc", nullptr);
412+
auto* source = makeGStreamerElement("giostreamsrc"_s);
413413
auto memoryStream = adoptGRef(g_memory_input_stream_new_from_data(m_data.data(), m_data.size(), nullptr));
414414
g_object_set(source, "stream", memoryStream.get(), nullptr);
415415

416-
m_decodebin = makeGStreamerElement("decodebin", "decodebin");
416+
m_decodebin = makeGStreamerElement("decodebin"_s, "decodebin"_s);
417417
g_signal_connect(m_decodebin.get(), "autoplug-select", G_CALLBACK(decodebinAutoplugSelectCallback), nullptr);
418418
g_signal_connect_swapped(m_decodebin.get(), "pad-added", G_CALLBACK(decodebinPadAddedCallback), this);
419419

Source/WebCore/platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ AudioSourceProviderGStreamer::AudioSourceProviderGStreamer(MediaStreamTrackPriva
111111

112112
m_audioSinkBin = gst_parse_bin_from_description("tee name=audioTee", true, nullptr);
113113

114-
auto* decodebin = makeGStreamerElement("uridecodebin3", nullptr);
114+
auto* decodebin = makeGStreamerElement("uridecodebin3"_s);
115115

116116
g_signal_connect_swapped(decodebin, "source-setup", G_CALLBACK(+[](AudioSourceProviderGStreamer* provider, GstElement* sourceElement) {
117117
if (!WEBKIT_IS_MEDIA_STREAM_SRC(sourceElement)) {
@@ -205,11 +205,11 @@ void AudioSourceProviderGStreamer::configureAudioBin(GstElement* audioBin, GstEl
205205

206206
GstElement* audioTee = gst_element_factory_make("tee", "audioTee");
207207
GstElement* audioQueue = gst_element_factory_make("queue", nullptr);
208-
GstElement* audioConvert = makeGStreamerElement("audioconvert", nullptr);
209-
GstElement* audioConvert2 = makeGStreamerElement("audioconvert", nullptr);
210-
GstElement* audioResample = makeGStreamerElement("audioresample", nullptr);
211-
GstElement* audioResample2 = makeGStreamerElement("audioresample", nullptr);
212-
GstElement* volumeElement = makeGStreamerElement("volume", "volume");
208+
GstElement* audioConvert = makeGStreamerElement("audioconvert"_s);
209+
GstElement* audioConvert2 = makeGStreamerElement("audioconvert"_s);
210+
GstElement* audioResample = makeGStreamerElement("audioresample"_s);
211+
GstElement* audioResample2 = makeGStreamerElement("audioresample"_s);
212+
GstElement* volumeElement = makeGStreamerElement("volume"_s, "volume"_s);
213213

214214
gst_bin_add_many(GST_BIN_CAST(m_audioSinkBin.get()), audioTee, audioQueue, audioConvert, audioResample, volumeElement, audioConvert2, audioResample2, audioSink, nullptr);
215215

@@ -324,10 +324,10 @@ void AudioSourceProviderGStreamer::setClient(WeakPtr<AudioSourceProviderClient>&
324324
// ensure deinterleave and the sinks downstream receive buffers in
325325
// the format specified by the capsfilter.
326326
auto* audioQueue = gst_element_factory_make("queue", "queue");
327-
auto* audioConvert = makeGStreamerElement("audioconvert", "audioconvert");
328-
auto* audioResample = makeGStreamerElement("audioresample", "audioresample");
327+
auto* audioConvert = makeGStreamerElement("audioconvert"_s, "audioconvert"_s);
328+
auto* audioResample = makeGStreamerElement("audioresample"_s, "audioresample"_s);
329329
auto* capsFilter = gst_element_factory_make("capsfilter", "capsfilter");
330-
auto* deInterleave = makeGStreamerElement("deinterleave", "deinterleave");
330+
auto* deInterleave = makeGStreamerElement("deinterleave"_s, "deinterleave"_s);
331331

332332
GST_DEBUG("Setting up audio deinterleave chain");
333333
g_object_set(deInterleave, "keep-positions", TRUE, nullptr);
@@ -377,7 +377,7 @@ void AudioSourceProviderGStreamer::handleNewDeinterleavePad(GstPad* pad)
377377
// channel. Pipeline looks like:
378378
// ... deinterleave ! queue ! appsink.
379379
auto* queue = gst_element_factory_make("queue", nullptr);
380-
auto* sink = makeGStreamerElement("appsink", nullptr);
380+
auto* sink = makeGStreamerElement("appsink"_s);
381381

382382
static GstAppSinkCallbacks callbacks = {
383383
nullptr,

Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ static void webKitWebAudioSrcConstructed(GObject* object)
214214
priv->task = adoptGRef(gst_task_new(reinterpret_cast<GstTaskFunction>(webKitWebAudioSrcRenderIteration), src, nullptr));
215215
gst_task_set_lock(priv->task.get(), &priv->mutex);
216216

217-
priv->source = makeGStreamerElement("appsrc", "webaudioSrc");
217+
priv->source = makeGStreamerElement("appsrc"_s, "webaudioSrc"_s);
218218

219219
// Configure the appsrc for minimal latency.
220220
g_object_set(priv->source.get(), "block", TRUE, "blocksize", priv->bufferSize, "format", GST_FORMAT_TIME, "is-live", TRUE, nullptr);

Source/WebCore/platform/graphics/gstreamer/DMABufVideoSinkGStreamer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ static void webKitDMABufVideoSinkConstructed(GObject* object)
9090

9191
WebKitDMABufVideoSink* sink = WEBKIT_DMABUF_VIDEO_SINK(object);
9292

93-
sink->priv->appSink = makeGStreamerElement("appsink", "webkit-dmabuf-video-appsink");
93+
sink->priv->appSink = makeGStreamerElement("appsink"_s, "webkit-dmabuf-video-appsink"_s);
9494
ASSERT(sink->priv->appSink);
9595
g_object_set(sink->priv->appSink.get(), "enable-last-sample", FALSE, "emit-signals", TRUE, "max-buffers", 1, nullptr);
9696

Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ static void webKitGLVideoSinkConstructed(GObject* object)
6666
GST_OBJECT_FLAG_SET(GST_OBJECT_CAST(sink), GST_ELEMENT_FLAG_SINK);
6767
gst_bin_set_suppressed_flags(GST_BIN_CAST(sink), static_cast<GstElementFlags>(GST_ELEMENT_FLAG_SOURCE | GST_ELEMENT_FLAG_SINK));
6868

69-
sink->priv->appSink = makeGStreamerElement("appsink", "webkit-gl-video-appsink");
69+
sink->priv->appSink = makeGStreamerElement("appsink"_s, "webkit-gl-video-appsink"_s);
7070
ASSERT(sink->priv->appSink);
7171
g_object_set(sink->priv->appSink.get(), "enable-last-sample", FALSE, "emit-signals", TRUE, "max-buffers", 1, nullptr);
7272

@@ -81,8 +81,8 @@ static void webKitGLVideoSinkConstructed(GObject* object)
8181
if (imxVideoConvertG2D)
8282
gst_bin_add(GST_BIN_CAST(sink), imxVideoConvertG2D);
8383

84-
GstElement* upload = makeGStreamerElement("glupload", nullptr);
85-
GstElement* colorconvert = makeGStreamerElement("glcolorconvert", nullptr);
84+
GstElement* upload = makeGStreamerElement("glupload"_s);
85+
GstElement* colorconvert = makeGStreamerElement("glcolorconvert"_s);
8686

8787
ASSERT(upload);
8888
ASSERT(colorconvert);

Source/WebCore/platform/graphics/gstreamer/GStreamerAudioMixer.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ GStreamerAudioMixer::GStreamerAudioMixer()
4848
registerActivePipeline(m_pipeline);
4949
connectSimpleBusMessageCallback(m_pipeline.get());
5050

51-
m_mixer = makeGStreamerElement("audiomixer", nullptr);
51+
m_mixer = makeGStreamerElement("audiomixer"_s);
5252
auto* audioSink = createAutoAudioSink({ });
5353

5454
gst_bin_add_many(GST_BIN_CAST(m_pipeline.get()), m_mixer.get(), audioSink, nullptr);
@@ -88,13 +88,13 @@ void GStreamerAudioMixer::ensureState(GstStateChange stateChange)
8888

8989
GRefPtr<GstPad> GStreamerAudioMixer::registerProducer(GstElement* interaudioSink)
9090
{
91-
GstElement* src = makeGStreamerElement("interaudiosrc", nullptr);
91+
GstElement* src = makeGStreamerElement("interaudiosrc"_s);
9292
g_object_set(src, "channel", GST_ELEMENT_NAME(interaudioSink), nullptr);
9393
g_object_set(interaudioSink, "channel", GST_ELEMENT_NAME(interaudioSink), nullptr);
9494

9595
auto bin = gst_bin_new(nullptr);
96-
auto audioResample = makeGStreamerElement("audioresample", nullptr);
97-
auto audioConvert = makeGStreamerElement("audioconvert", nullptr);
96+
auto audioResample = makeGStreamerElement("audioresample"_s);
97+
auto audioConvert = makeGStreamerElement("audioconvert"_s);
9898
gst_bin_add_many(GST_BIN_CAST(bin), audioResample, audioConvert, nullptr);
9999
gst_element_link(audioConvert, audioResample);
100100

Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -950,7 +950,7 @@ bool gstElementFactoryEquals(GstElement* element, ASCIILiteral name)
950950

951951
GstElement* createAutoAudioSink(const String& role)
952952
{
953-
auto* audioSink = makeGStreamerElement("autoaudiosink", nullptr);
953+
auto* audioSink = makeGStreamerElement("autoaudiosink"_s);
954954
g_signal_connect_data(audioSink, "child-added", G_CALLBACK(+[](GstChildProxy*, GObject* object, gchar*, gpointer userData) {
955955
auto* role = reinterpret_cast<StringImpl*>(userData);
956956
auto* objectClass = G_OBJECT_GET_CLASS(object);
@@ -1036,33 +1036,20 @@ GstBuffer* gstBufferNewWrappedFast(void* data, size_t length)
10361036
return gst_buffer_new_wrapped_full(static_cast<GstMemoryFlags>(0), data, length, 0, length, data, fastFree);
10371037
}
10381038

1039-
GstElement* makeGStreamerElement(const char* factoryName, const char* name)
1039+
GstElement* makeGStreamerElement(ASCIILiteral factoryName, const String& name)
10401040
{
10411041
static Lock lock;
1042-
static Vector<const char*> cache WTF_GUARDED_BY_LOCK(lock);
1043-
auto* element = gst_element_factory_make(factoryName, name);
1042+
static Vector<String> cache WTF_GUARDED_BY_LOCK(lock);
1043+
auto* element = gst_element_factory_make(factoryName.characters(), name.isEmpty() ? nullptr : name.ascii().data());
10441044
Locker locker { lock };
10451045
if (!element && !cache.contains(factoryName)) {
10461046
cache.append(factoryName);
1047-
WTFLogAlways("GStreamer element %s not found. Please install it", factoryName);
1047+
WTFLogAlways("GStreamer element %s not found. Please install it", factoryName.characters());
1048+
ASSERT_NOT_REACHED_WITH_MESSAGE("GStreamer element %s not found. Please install it", factoryName.characters());
10481049
}
10491050
return element;
10501051
}
10511052

1052-
GstElement* makeGStreamerBin(const char* description, bool ghostUnlinkedPads)
1053-
{
1054-
static Lock lock;
1055-
static Vector<const char*> cache WTF_GUARDED_BY_LOCK(lock);
1056-
GUniqueOutPtr<GError> error;
1057-
auto* bin = gst_parse_bin_from_description(description, ghostUnlinkedPads, &error.outPtr());
1058-
Locker locker { lock };
1059-
if (!bin && !cache.contains(description)) {
1060-
cache.append(description);
1061-
WTFLogAlways("Unable to create bin for description: \"%s\". Error: %s", description, error->message);
1062-
}
1063-
return bin;
1064-
}
1065-
10661053
#if USE(GSTREAMER_WEBRTC)
10671054
static ASCIILiteral webrtcStatsTypeName(int value)
10681055
{

0 commit comments

Comments
 (0)