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