[GTK][WPE] Do not force video sample's buffer release when the platformLayerProxy...
authormagomez@igalia.com <magomez@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 5 Jun 2017 12:33:31 +0000 (12:33 +0000)
committermagomez@igalia.com <magomez@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 5 Jun 2017 12:33:31 +0000 (12:33 +0000)
https://bugs.webkit.org/show_bug.cgi?id=172916

Reviewed by Carlos Garcia Campos.

When MediaPlayerPrivateGStreamerBase's plarformLayerProxy was inactive, a copy of the video sample
was being done (without the buffer) and set, causing the sample's buffer to get freed. This was done
to avoid stalling the gstreamer pipeline in situations where the video was set to display:none, as the
platformLayerProxy would keep all the available buffers. But this can't happen nowadays as setting
the video to display:none invalidates the proxy, causing it to release the references to the
gstreamer buffers it's using. Also, the current code is causing a crash when using gstreamer-gl and
the video is hidden but its contents are being painted through webgl or an accelerated canvas. So,
remove this sample copy as it's not necessary anymore.

Covered by existent tests.

* platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
(WebCore::MediaPlayerPrivateGStreamerBase::pushTextureToCompositor):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@217780 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp

index bec2413..e3ddd02 100644 (file)
@@ -1,5 +1,26 @@
 2017-06-05  Miguel Gomez  <magomez@igalia.com>
 
+        [GTK][WPE] Do not force video sample's buffer release when the platformLayerProxy is inactive
+        https://bugs.webkit.org/show_bug.cgi?id=172916
+
+        Reviewed by Carlos Garcia Campos.
+
+        When MediaPlayerPrivateGStreamerBase's plarformLayerProxy was inactive, a copy of the video sample
+        was being done (without the buffer) and set, causing the sample's buffer to get freed. This was done
+        to avoid stalling the gstreamer pipeline in situations where the video was set to display:none, as the
+        platformLayerProxy would keep all the available buffers. But this can't happen nowadays as setting
+        the video to display:none invalidates the proxy, causing it to release the references to the
+        gstreamer buffers it's using. Also, the current code is causing a crash when using gstreamer-gl and
+        the video is hidden but its contents are being painted through webgl or an accelerated canvas. So,
+        remove this sample copy as it's not necessary anymore.
+
+        Covered by existent tests.
+
+        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
+        (WebCore::MediaPlayerPrivateGStreamerBase::pushTextureToCompositor):
+
+2017-06-05  Miguel Gomez  <magomez@igalia.com>
+
         [GTK][WPE] Fix the condition to decide whether the MediaPlayer can be rendered accelerated
         https://bugs.webkit.org/show_bug.cgi?id=172852
 
index df06e05..8efe678 100644 (file)
@@ -709,16 +709,8 @@ void MediaPlayerPrivateGStreamerBase::pushTextureToCompositor()
 
     LockHolder holder(m_platformLayerProxy->lock());
 
-    if (!m_platformLayerProxy->isActive()) {
-        // Consume the buffer (so it gets eventually unreffed) but keep the rest of the info.
-        const GstStructure* info = gst_sample_get_info(m_sample.get());
-        GstStructure* infoCopy = nullptr;
-        if (info)
-            infoCopy = gst_structure_copy(info);
-        m_sample = adoptGRef(gst_sample_new(nullptr, gst_sample_get_caps(m_sample.get()),
-            gst_sample_get_segment(m_sample.get()), infoCopy));
+    if (!m_platformLayerProxy->isActive())
         return;
-    }
 
 #if USE(GSTREAMER_GL)
     std::unique_ptr<GstVideoFrameHolder> frameHolder = std::make_unique<GstVideoFrameHolder>(m_sample.get(), texMapFlagFromOrientation(m_videoSourceOrientation));