58 lines
3.6 KiB
Diff
58 lines
3.6 KiB
Diff
diff --git a/Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp b/Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp
|
|
index a861b913ccfc..df21a1f67e98 100644
|
|
--- a/Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp
|
|
+++ b/Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp
|
|
@@ -88,7 +88,25 @@ static void webKitGLVideoSinkConstructed(GObject* object)
|
|
ASSERT(colorconvert);
|
|
gst_bin_add_many(GST_BIN_CAST(sink), upload, colorconvert, sink->priv->appSink.get(), nullptr);
|
|
|
|
- GRefPtr<GstCaps> caps = adoptGRef(gst_caps_from_string("video/x-raw, format = (string) " GST_GL_CAPS_FORMAT));
|
|
+ // Workaround until we can depend on GStreamer 1.16.2.
|
|
+ // https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/commit/8d32de090554cf29fe359f83aa46000ba658a693
|
|
+ // Forcing a color conversion to RGBA here allows glupload to internally use
|
|
+ // an uploader that adds a VideoMeta, through the TextureUploadMeta caps
|
|
+ // feature, without needing the patch above. However this specific caps
|
|
+ // feature is going to be removed from GStreamer so it is considered a
|
|
+ // short-term workaround. This code path most likely will have a negative
|
|
+ // performance impact on embedded platforms as well. Downstream embedders
|
|
+ // are highly encouraged to cherry-pick the patch linked above in their BSP
|
|
+ // and set the WEBKIT_GST_NO_RGBA_CONVERSION environment variable until
|
|
+ // GStreamer 1.16.2 is released.
|
|
+ // See also https://bugs.webkit.org/show_bug.cgi?id=201422
|
|
+ GRefPtr<GstCaps> caps;
|
|
+ if (webkitGstCheckVersion(1, 16, 2) || getenv("WEBKIT_GST_NO_RGBA_CONVERSION"))
|
|
+ caps = adoptGRef(gst_caps_from_string("video/x-raw, format = (string) " GST_GL_CAPS_FORMAT));
|
|
+ else {
|
|
+ GST_INFO_OBJECT(sink, "Forcing RGBA as GStreamer is not new enough.");
|
|
+ caps = adoptGRef(gst_caps_from_string("video/x-raw, format = (string) RGBA"));
|
|
+ }
|
|
gst_caps_set_features(caps.get(), 0, gst_caps_features_new(GST_CAPS_FEATURE_MEMORY_GL_MEMORY, nullptr));
|
|
g_object_set(sink->priv->appSink.get(), "caps", caps.get(), nullptr);
|
|
|
|
diff --git a/Source/cmake/GStreamerChecks.cmake b/Source/cmake/GStreamerChecks.cmake
|
|
index ba8423e2795c..df9d3204910d 100644
|
|
--- a/Source/cmake/GStreamerChecks.cmake
|
|
+++ b/Source/cmake/GStreamerChecks.cmake
|
|
@@ -36,7 +36,7 @@ if (ENABLE_VIDEO OR ENABLE_WEB_AUDIO)
|
|
list(APPEND GSTREAMER_COMPONENTS webrtc)
|
|
endif ()
|
|
|
|
- find_package(GStreamer 1.16.2 REQUIRED COMPONENTS ${GSTREAMER_COMPONENTS})
|
|
+ find_package(GStreamer 1.16.0 REQUIRED COMPONENTS ${GSTREAMER_COMPONENTS})
|
|
|
|
if (ENABLE_WEB_AUDIO)
|
|
if (NOT PC_GSTREAMER_AUDIO_FOUND OR NOT PC_GSTREAMER_FFT_FOUND)
|
|
|
|
diff --git a/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp b/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
|
|
index 0b81e04559f0..4c6ae470e49f 100644
|
|
--- a/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
|
|
+++ b/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
|
|
@@ -479,7 +479,6 @@ bool MediaPlayerPrivateGStreamer::doSeek(const MediaTime& position, float rate)
|
|
|
|
auto seekStart = toGstClockTime(startTime);
|
|
auto seekStop = toGstClockTime(endTime);
|
|
- GST_DEBUG_OBJECT(pipeline(), "[Seek] Performing actual seek to %" GST_TIMEP_FORMAT " (endTime: %" GST_TIMEP_FORMAT ") at rate %f", &seekStart, &seekStop, rate);
|
|
return gst_element_seek(m_pipeline.get(), rate, GST_FORMAT_TIME, m_seekFlags, GST_SEEK_TYPE_SET, seekStart, GST_SEEK_TYPE_SET, seekStop);
|
|
}
|
|
|