Changeset 252134 in webkit


Ignore:
Timestamp:
Nov 6, 2019 1:39:01 AM (5 years ago)
Author:
Carlos Garcia Campos
Message:

REGRESSION(r249428): [GStreamer] VP9 video rendered green
https://bugs.webkit.org/show_bug.cgi?id=201422
<rdar://problem/55945741>

Patch by Philippe Normand <philn@igalia.com> on 2019-11-06
Reviewed by Carlos Garcia Campos.

Enable the texture upload GStreamer meta code path. Until
GStreamer 1.16.2 this workaround is needed to fix VP9 (vp9dec)
rendering. For downstream users cherry-picking the corresponding
GStreamer patch[0], an environment variable can be set to bypass
the reintroduced slow color conversion: $WEBKIT_GST_NO_RGBA_CONVERSION.

[0] https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/commit/8d32de090554cf29fe359f83aa46000ba658a693

  • platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:

(WebCore::MediaPlayerPrivateGStreamerBase::createVideoSinkGL):

Location:
trunk/Source/WebCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r252127 r252134  
     12019-11-06  Philippe Normand  <philn@igalia.com>
     2
     3        REGRESSION(r249428): [GStreamer] VP9 video rendered green
     4        https://bugs.webkit.org/show_bug.cgi?id=201422
     5        <rdar://problem/55945741>
     6
     7        Reviewed by Carlos Garcia Campos.
     8
     9        Enable the texture upload GStreamer meta code path. Until
     10        GStreamer 1.16.2 this workaround is needed to fix VP9 (vp9dec)
     11        rendering. For downstream users cherry-picking the corresponding
     12        GStreamer patch[0], an environment variable can be set to bypass
     13        the reintroduced slow color conversion: $WEBKIT_GST_NO_RGBA_CONVERSION.
     14
     15        [0] https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/commit/8d32de090554cf29fe359f83aa46000ba658a693
     16
     17        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
     18        (WebCore::MediaPlayerPrivateGStreamerBase::createVideoSinkGL):
     19
    1202019-11-06  youenn fablet  <youenn@apple.com>
    221
  • trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp

    r251838 r252134  
    12071207    result &= gst_element_link_many(upload, colorconvert, appsink, nullptr);
    12081208
    1209     GRefPtr<GstPad> pad = adoptGRef(gst_element_get_static_pad(upload, "sink"));
    1210     gst_element_add_pad(videoSink, gst_ghost_pad_new("sink", pad.get()));
     1209    // Workaround until we can depend on GStreamer 1.16.2.
     1210    // https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/commit/8d32de090554cf29fe359f83aa46000ba658a693
     1211    // Forcing a color conversion to RGBA here allows glupload to internally use
     1212    // an uploader that adds a VideoMeta, through the TextureUploadMeta caps
     1213    // feature, without needing the patch above. However this specific caps
     1214    // feature is going to be removed from GStreamer so it is considered a
     1215    // short-term workaround. This code path most likely will have a negative
     1216    // performance impact on embedded platforms as well. Downstream embedders
     1217    // are highly encouraged to cherry-pick the patch linked above in their BSP
     1218    // and set the WEBKIT_GST_NO_RGBA_CONVERSION environment variable until
     1219    // GStreamer 1.16.2 is released.
     1220    // See also https://bugs.webkit.org/show_bug.cgi?id=201422
     1221    if (webkitGstCheckVersion(1, 16, 2) || getenv("WEBKIT_GST_NO_RGBA_CONVERSION")) {
     1222        GRefPtr<GstPad> pad = adoptGRef(gst_element_get_static_pad(upload, "sink"));
     1223        gst_element_add_pad(videoSink, gst_ghost_pad_new("sink", pad.get()));
     1224    } else {
     1225        GstElement* capsFilter = gst_element_factory_make("capsfilter", nullptr);
     1226        GRefPtr<GstCaps> caps = adoptGRef(gst_caps_from_string("video/x-raw, format=RGBA"));
     1227        g_object_set(capsFilter, "caps", caps.get(), nullptr);
     1228
     1229        GstElement* videoconvert = gst_element_factory_make("videoconvert", nullptr);
     1230        gst_bin_add_many(GST_BIN_CAST(videoSink), capsFilter, videoconvert, nullptr);
     1231        result &= gst_element_link_many(capsFilter, videoconvert, upload, nullptr);
     1232
     1233        GRefPtr<GstPad> pad = adoptGRef(gst_element_get_static_pad(capsFilter, "sink"));
     1234        gst_element_add_pad(videoSink, gst_ghost_pad_new("sink", pad.get()));
     1235    }
    12111236
    12121237    if (!result) {
Note: See TracChangeset for help on using the changeset viewer.