Title: [212889] trunk/Source/WebCore
Revision
212889
Author
carlo...@webkit.org
Date
2017-02-23 08:28:47 -0800 (Thu, 23 Feb 2017)

Log Message

[GStreamer] Several layout tests trigger GStreamer-CRITICAL **: gst_bin_get_by_name: assertion 'GST_IS_BIN (bin)' failed
https://bugs.webkit.org/show_bug.cgi?id=167016

Reviewed by Xabier Rodriguez-Calvar.

This is because we create AudioSourceProviderGStreamer objects that are never loaded. In the destructor the
AudioSourceProviderGStreamer calls gst_bin_get_by_name() on its m_audioSinkBin that is nullptr. We could simply
check m_audioSinkBin in the destructor, but I think it's better to simply not create
AudioSourceProviderGStreamer for nothing. MediaPlayerPrivateGStreamer should create the AudioSourceProvider on demand.

* platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
(WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer): Do not create the AudioSourceProvider.
(WebCore::MediaPlayerPrivateGStreamer::createAudioSink): Call ensureAudioSourceProvider() before using m_audioSourceProvider.
(WebCore::MediaPlayerPrivateGStreamer::ensureAudioSourceProvider): Create the AudioSourceProvider if needed.
(WebCore::MediaPlayerPrivateGStreamer::audioSourceProvider): Ensure and return the m_audioSourceProvider.
* platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (212888 => 212889)


--- trunk/Source/WebCore/ChangeLog	2017-02-23 16:15:28 UTC (rev 212888)
+++ trunk/Source/WebCore/ChangeLog	2017-02-23 16:28:47 UTC (rev 212889)
@@ -1,3 +1,22 @@
+2017-02-23  Carlos Garcia Campos  <cgar...@igalia.com>
+
+        [GStreamer] Several layout tests trigger GStreamer-CRITICAL **: gst_bin_get_by_name: assertion 'GST_IS_BIN (bin)' failed
+        https://bugs.webkit.org/show_bug.cgi?id=167016
+
+        Reviewed by Xabier Rodriguez-Calvar.
+
+        This is because we create AudioSourceProviderGStreamer objects that are never loaded. In the destructor the
+        AudioSourceProviderGStreamer calls gst_bin_get_by_name() on its m_audioSinkBin that is nullptr. We could simply
+        check m_audioSinkBin in the destructor, but I think it's better to simply not create
+        AudioSourceProviderGStreamer for nothing. MediaPlayerPrivateGStreamer should create the AudioSourceProvider on demand.
+
+        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
+        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer): Do not create the AudioSourceProvider.
+        (WebCore::MediaPlayerPrivateGStreamer::createAudioSink): Call ensureAudioSourceProvider() before using m_audioSourceProvider.
+        (WebCore::MediaPlayerPrivateGStreamer::ensureAudioSourceProvider): Create the AudioSourceProvider if needed.
+        (WebCore::MediaPlayerPrivateGStreamer::audioSourceProvider): Ensure and return the m_audioSourceProvider.
+        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
+
 2017-02-23  Tomas Popela  <tpop...@redhat.com>
 
         [GTK] Drag and drop is always moving the content even if copy is requested

Modified: trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp (212888 => 212889)


--- trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp	2017-02-23 16:15:28 UTC (rev 212888)
+++ trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp	2017-02-23 16:28:47 UTC (rev 212889)
@@ -171,9 +171,6 @@
     , m_readyTimerHandler(RunLoop::main(), this, &MediaPlayerPrivateGStreamer::readyTimerFired)
     , m_totalBytes(0)
     , m_preservesPitch(false)
-#if ENABLE(WEB_AUDIO)
-    , m_audioSourceProvider(std::make_unique<AudioSourceProviderGStreamer>())
-#endif
 {
 #if USE(GLIB)
     m_readyTimerHandler.setPriority(G_PRIORITY_DEFAULT_IDLE);
@@ -1991,6 +1988,7 @@
     if (webkitGstCheckVersion(1, 4, 2)) {
 #if ENABLE(WEB_AUDIO)
         audioSinkBin = gst_bin_new("audio-sink");
+        ensureAudioSourceProvider();
         m_audioSourceProvider->configureAudioBin(audioSinkBin, nullptr);
         return audioSinkBin;
 #else
@@ -2013,6 +2011,7 @@
         gst_element_add_pad(audioSinkBin, gst_ghost_pad_new("sink", pad.get()));
 
 #if ENABLE(WEB_AUDIO)
+        ensureAudioSourceProvider();
         m_audioSourceProvider->configureAudioBin(audioSinkBin, scale);
 #else
         GstElement* convert = gst_element_factory_make("audioconvert", nullptr);
@@ -2031,6 +2030,7 @@
 
 #if ENABLE(WEB_AUDIO)
     audioSinkBin = gst_bin_new("audio-sink");
+    ensureAudioSourceProvider();
     m_audioSourceProvider->configureAudioBin(audioSinkBin, nullptr);
     return audioSinkBin;
 #endif
@@ -2045,6 +2045,20 @@
     return sink;
 }
 
+#if ENABLE(WEB_AUDIO)
+void MediaPlayerPrivateGStreamer::ensureAudioSourceProvider()
+{
+    if (!m_audioSourceProvider)
+        m_audioSourceProvider = std::make_unique<AudioSourceProviderGStreamer>();
+}
+
+AudioSourceProvider* MediaPlayerPrivateGStreamer::audioSourceProvider()
+{
+    ensureAudioSourceProvider();
+    return m_audioSourceProvider.get();
+}
+#endif
+
 void MediaPlayerPrivateGStreamer::createGSTPlayBin()
 {
     ASSERT(!m_pipeline);

Modified: trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h (212888 => 212889)


--- trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h	2017-02-23 16:15:28 UTC (rev 212888)
+++ trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h	2017-02-23 16:28:47 UTC (rev 212889)
@@ -127,7 +127,7 @@
     virtual bool changePipelineState(GstState);
 
 #if ENABLE(WEB_AUDIO)
-    AudioSourceProvider* audioSourceProvider() override { return reinterpret_cast<AudioSourceProvider*>(m_audioSourceProvider.get()); }
+    AudioSourceProvider* audioSourceProvider() override;
 #endif
 
     bool isLiveStream() const override { return m_isStreaming; }
@@ -208,6 +208,7 @@
     void newTextSample();
 #endif
 
+    void ensureAudioSourceProvider();
     void setAudioStreamProperties(GObject*);
 
     static void setAudioStreamPropertiesCallback(MediaPlayerPrivateGStreamer*, GObject*);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to