wpewebkit: add patch to fix video playback on the ccimx8x

The i.MX8X video decoder requires a specific NXP video converter, otherwise
videos will appear with several glitches. This patch adds said plugin in the
WPE webkit's internal gstreamer pipeline.

https://jira.digi.com/browse/DEL-7311
https://jira.digi.com/browse/DEL-7339

Signed-off-by: Gabriel Valcazar <gabriel.valcazar@digi.com>
This commit is contained in:
Gabriel Valcazar 2020-12-09 16:47:03 +01:00
parent b13339839e
commit 3a3ca20ec2
2 changed files with 47 additions and 0 deletions

View File

@ -0,0 +1,42 @@
From: Gabriel Valcazar <gabriel.valcazar@digi.com>
Date: Wed, 21 Oct 2020 17:14:43 +0200
Subject: [PATCH] Use imxvideoconvert_g2d plugin in gstreamer pipeline
This element is necessary to view videos correctly on the i.MX8X
Signed-off-by: Gabriel Valcazar <gabriel.valcazar@digi.com>
---
.../platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp b/Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp
index 8d8f3822..3e047ebb 100644
--- a/Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp
+++ b/Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp
@@ -93,11 +93,13 @@ static void webKitGLVideoSinkConstructed(GObject* object)
ASSERT(sink->priv->appSink);
g_object_set(sink->priv->appSink.get(), "enable-last-sample", FALSE, "emit-signals", TRUE, "max-buffers", 1, nullptr);
+ GstElement* imxconvert = gst_element_factory_make("imxvideoconvert_g2d", nullptr);
+ GstElement* queue = gst_element_factory_make("queue", nullptr);
GstElement* upload = gst_element_factory_make("glupload", nullptr);
GstElement* colorconvert = gst_element_factory_make("glcolorconvert", nullptr);
ASSERT(upload);
ASSERT(colorconvert);
- gst_bin_add_many(GST_BIN_CAST(sink), upload, colorconvert, sink->priv->appSink.get(), nullptr);
+ gst_bin_add_many(GST_BIN_CAST(sink), imxconvert, queue, upload, colorconvert, sink->priv->appSink.get(), nullptr);
// Workaround until we can depend on GStreamer 1.16.2.
// https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/commit/8d32de090554cf29fe359f83aa46000ba658a693
@@ -121,9 +123,9 @@ static void webKitGLVideoSinkConstructed(GObject* object)
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);
- gst_element_link_many(upload, colorconvert, sink->priv->appSink.get(), nullptr);
+ gst_element_link_many(imxconvert, queue, upload, colorconvert, sink->priv->appSink.get(), nullptr);
- GRefPtr<GstPad> pad = adoptGRef(gst_element_get_static_pad(upload, "sink"));
+ GRefPtr<GstPad> pad = adoptGRef(gst_element_get_static_pad(imxconvert, "sink"));
gst_element_add_pad(GST_ELEMENT_CAST(sink), gst_ghost_pad_new("sink", pad.get()));
}

View File

@ -0,0 +1,5 @@
# Copyright 2020, Digi International Inc.
FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:"
SRC_URI_append_ccimx8x = " file://0001-Use-imxvideoconvert_g2d-plugin-in-gstreamer-pipeline.patch"