Changeset 212889 in webkit


Ignore:
Timestamp:
Feb 23, 2017 8:28:47 AM (7 years ago)
Author:
Carlos Garcia Campos
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:
Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r212881 r212889  
     12017-02-23  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GStreamer] Several layout tests trigger GStreamer-CRITICAL **: gst_bin_get_by_name: assertion 'GST_IS_BIN (bin)' failed
     4        https://bugs.webkit.org/show_bug.cgi?id=167016
     5
     6        Reviewed by Xabier Rodriguez-Calvar.
     7
     8        This is because we create AudioSourceProviderGStreamer objects that are never loaded. In the destructor the
     9        AudioSourceProviderGStreamer calls gst_bin_get_by_name() on its m_audioSinkBin that is nullptr. We could simply
     10        check m_audioSinkBin in the destructor, but I think it's better to simply not create
     11        AudioSourceProviderGStreamer for nothing. MediaPlayerPrivateGStreamer should create the AudioSourceProvider on demand.
     12
     13        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
     14        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer): Do not create the AudioSourceProvider.
     15        (WebCore::MediaPlayerPrivateGStreamer::createAudioSink): Call ensureAudioSourceProvider() before using m_audioSourceProvider.
     16        (WebCore::MediaPlayerPrivateGStreamer::ensureAudioSourceProvider): Create the AudioSourceProvider if needed.
     17        (WebCore::MediaPlayerPrivateGStreamer::audioSourceProvider): Ensure and return the m_audioSourceProvider.
     18        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
     19
    1202017-02-23  Tomas Popela  <tpopela@redhat.com>
    221
  • trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp

    r212521 r212889  
    172172    , m_totalBytes(0)
    173173    , m_preservesPitch(false)
    174 #if ENABLE(WEB_AUDIO)
    175     , m_audioSourceProvider(std::make_unique<AudioSourceProviderGStreamer>())
    176 #endif
    177174{
    178175#if USE(GLIB)
     
    19921989#if ENABLE(WEB_AUDIO)
    19931990        audioSinkBin = gst_bin_new("audio-sink");
     1991        ensureAudioSourceProvider();
    19941992        m_audioSourceProvider->configureAudioBin(audioSinkBin, nullptr);
    19951993        return audioSinkBin;
     
    20142012
    20152013#if ENABLE(WEB_AUDIO)
     2014        ensureAudioSourceProvider();
    20162015        m_audioSourceProvider->configureAudioBin(audioSinkBin, scale);
    20172016#else
     
    20322031#if ENABLE(WEB_AUDIO)
    20332032    audioSinkBin = gst_bin_new("audio-sink");
     2033    ensureAudioSourceProvider();
    20342034    m_audioSourceProvider->configureAudioBin(audioSinkBin, nullptr);
    20352035    return audioSinkBin;
     
    20452045    return sink;
    20462046}
     2047
     2048#if ENABLE(WEB_AUDIO)
     2049void MediaPlayerPrivateGStreamer::ensureAudioSourceProvider()
     2050{
     2051    if (!m_audioSourceProvider)
     2052        m_audioSourceProvider = std::make_unique<AudioSourceProviderGStreamer>();
     2053}
     2054
     2055AudioSourceProvider* MediaPlayerPrivateGStreamer::audioSourceProvider()
     2056{
     2057    ensureAudioSourceProvider();
     2058    return m_audioSourceProvider.get();
     2059}
     2060#endif
    20472061
    20482062void MediaPlayerPrivateGStreamer::createGSTPlayBin()
  • trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h

    r212349 r212889  
    128128
    129129#if ENABLE(WEB_AUDIO)
    130     AudioSourceProvider* audioSourceProvider() override { return reinterpret_cast<AudioSourceProvider*>(m_audioSourceProvider.get()); }
     130    AudioSourceProvider* audioSourceProvider() override;
    131131#endif
    132132
     
    209209#endif
    210210
     211    void ensureAudioSourceProvider();
    211212    void setAudioStreamProperties(GObject*);
    212213
Note: See TracChangeset for help on using the changeset viewer.