Modified: trunk/Source/WebCore/ChangeLog (269098 => 269099)
--- trunk/Source/WebCore/ChangeLog 2020-10-28 11:41:41 UTC (rev 269098)
+++ trunk/Source/WebCore/ChangeLog 2020-10-28 12:47:36 UTC (rev 269099)
@@ -1,3 +1,17 @@
+2020-10-28 Philippe Normand <[email protected]>
+
+ [GStreamer] Using audio files for the <img> tag triggers warnings
+ https://bugs.webkit.org/show_bug.cgi?id=218245
+
+ Reviewed by Xabier Rodriguez-Calvar.
+
+ Plug non-video pads to a fake sink in order to maintain a valid pipeline. Later we should
+ switch to decodebin3 and rely on the stream selection facilities.
+
+ * platform/graphics/gstreamer/ImageDecoderGStreamer.cpp:
+ (WebCore::ImageDecoderGStreamer::InnerDecoder::connectDecoderPad):
+ (WebCore::ImageDecoderGStreamer::InnerDecoder::preparePipeline):
+
2020-10-28 Xabier Rodriguez Calvar <[email protected]>
Unreviewed, reverting r269033.
Modified: trunk/Source/WebCore/platform/graphics/gstreamer/ImageDecoderGStreamer.cpp (269098 => 269099)
--- trunk/Source/WebCore/platform/graphics/gstreamer/ImageDecoderGStreamer.cpp 2020-10-28 11:41:41 UTC (rev 269098)
+++ trunk/Source/WebCore/platform/graphics/gstreamer/ImageDecoderGStreamer.cpp 2020-10-28 12:47:36 UTC (rev 269099)
@@ -232,8 +232,17 @@
{
auto padCaps = adoptGRef(gst_pad_get_current_caps(pad));
GST_DEBUG_OBJECT(m_pipeline.get(), "New decodebin pad %" GST_PTR_FORMAT " caps: %" GST_PTR_FORMAT, pad, padCaps.get());
- RELEASE_ASSERT(doCapsHaveType(padCaps.get(), "video"));
+ if (!doCapsHaveType(padCaps.get(), "video")) {
+ GST_DEBUG_OBJECT(m_pipeline.get(), "Non-video pad, plugging to a fakesink");
+ auto* sink = gst_element_factory_make("fakesink", nullptr);
+ gst_bin_add(GST_BIN_CAST(m_pipeline.get()), sink);
+ auto sinkPad = adoptGRef(gst_element_get_static_pad(sink, "sink"));
+ gst_pad_link(pad, sinkPad.get());
+ gst_element_sync_state_with_parent(sink);
+ return;
+ }
+
GstElement* sink = gst_element_factory_make("appsink", nullptr);
static GstAppSinkCallbacks callbacks = {
nullptr,
@@ -344,8 +353,6 @@
g_object_set(source, "stream", m_memoryStream.get(), nullptr);
GstElement* decoder = gst_element_factory_make("decodebin", nullptr);
- auto allowedCaps = adoptGRef(gst_caps_new_empty_simple("video/x-raw"));
- g_object_set(decoder, "caps", allowedCaps.get(), "expose-all-streams", false, nullptr);
g_signal_connect_swapped(decoder, "pad-added", G_CALLBACK(decodebinPadAddedCallback), this);
gst_bin_add_many(GST_BIN_CAST(m_pipeline.get()), source, decoder, nullptr);