[OE-core] [poky][PATCH 4/6] gstreamer1.0-plugins-bad: Add overlayvideorenderer video sink
Yuqing Zhu
carol.zhu at nxp.com
Mon May 15 08:52:36 UTC 2017
- Add overlay video renderer "video-sink" property, so that can be set
- In create_video_sink, it returns video sink instead of always NULL
- Add new renderer_new_with_sink() API to set video sink
Signed-off-by: Yuqing Zhu <carol.zhu at nxp.com>
---
...layer-Add-overlayvideorenderer-video-sink.patch | 138 +++++++++++++++++++++
.../gstreamer/gstreamer1.0-plugins-bad_1.10.4.bb | 1 +
2 files changed, 139 insertions(+)
create mode 100755 meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0005-player-Add-overlayvideorenderer-video-sink.patch
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0005-player-Add-overlayvideorenderer-video-sink.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0005-player-Add-overlayvideorenderer-video-sink.patch
new file mode 100755
index 0000000..ba5dd27
--- /dev/null
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0005-player-Add-overlayvideorenderer-video-sink.patch
@@ -0,0 +1,138 @@
+From 2437386711abdd866ec46d10a8bf48072ffbaaad Mon Sep 17 00:00:00 2001
+From: Lyon Wang <lyon.wang at nxp.com>
+Date: Tue, 27 Dec 2016 17:13:58 +0800
+Subject: [PATCH 4/5] player: Add overlayvideorenderer video sink
+
+- Add overlay video renderer "video-sink" property, so that can be set
+- In create_video_sink,it return video sink instead of always NULL
+- Add new renderer_new_with_sink() API to set video sink
+
+Upstream-Status: Backport [1.11.2]
+https://bugzilla.gnome.org/show_bug.cgi?id=776490
+
+Signed-off-by: Lyon Wang <lyon.wang at nxp.com>
+---
+ .../gstplayer-video-overlay-video-renderer.c | 38 +++++++++++++++++++++-
+ .../gstplayer-video-overlay-video-renderer.h | 1 +
+ 2 files changed, 38 insertions(+), 1 deletion(-)
+
+diff --git a/gst-libs/gst/player/gstplayer-video-overlay-video-renderer.c b/gst-libs/gst/player/gstplayer-video-overlay-video-renderer.c
+index 7764d43..411dd3a 100644
+--- a/gst-libs/gst/player/gstplayer-video-overlay-video-renderer.c
++++ b/gst-libs/gst/player/gstplayer-video-overlay-video-renderer.c
+@@ -40,6 +40,8 @@ struct _GstPlayerVideoOverlayVideoRenderer
+ GstVideoOverlay *video_overlay;
+ gpointer window_handle;
+ gint x, y, width, height;
++
++ GstElement *video_sink; /* configured video sink, or NULL */
+ };
+
+ struct _GstPlayerVideoOverlayVideoRendererClass
+@@ -55,6 +57,7 @@ enum
+ {
+ VIDEO_OVERLAY_VIDEO_RENDERER_PROP_0,
+ VIDEO_OVERLAY_VIDEO_RENDERER_PROP_WINDOW_HANDLE,
++ VIDEO_OVERLAY_VIDEO_RENDERER_PROP_VIDEO_SINK,
+ VIDEO_OVERLAY_VIDEO_RENDERER_PROP_LAST
+ };
+
+@@ -81,6 +84,9 @@ gst_player_video_overlay_video_renderer_set_property (GObject * object,
+ gst_video_overlay_set_window_handle (self->video_overlay,
+ (guintptr) self->window_handle);
+ break;
++ case VIDEO_OVERLAY_VIDEO_RENDERER_PROP_VIDEO_SINK:
++ self->video_sink = gst_object_ref_sink (g_value_get_object (value));
++ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+@@ -98,6 +104,9 @@ gst_player_video_overlay_video_renderer_get_property (GObject * object,
+ case VIDEO_OVERLAY_VIDEO_RENDERER_PROP_WINDOW_HANDLE:
+ g_value_set_pointer (value, self->window_handle);
+ break;
++ case VIDEO_OVERLAY_VIDEO_RENDERER_PROP_VIDEO_SINK:
++ g_value_take_object (value, gst_object_ref (self->video_sink));
++ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+@@ -113,6 +122,9 @@ gst_player_video_overlay_video_renderer_finalize (GObject * object)
+ if (self->video_overlay)
+ gst_object_unref (self->video_overlay);
+
++ if (self->video_sink)
++ gst_object_unref (self->video_sink);
++
+ G_OBJECT_CLASS
+ (gst_player_video_overlay_video_renderer_parent_class)->finalize (object);
+ }
+@@ -135,6 +147,12 @@ static void
+ "Window handle to embed the video into",
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
+
++ video_overlay_video_renderer_param_specs
++ [VIDEO_OVERLAY_VIDEO_RENDERER_PROP_VIDEO_SINK] =
++ g_param_spec_object ("video-sink", "Video Sink",
++ "the video output element to use (NULL = default sink)",
++ GST_TYPE_ELEMENT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
++
+ g_object_class_install_properties (gobject_class,
+ VIDEO_OVERLAY_VIDEO_RENDERER_PROP_LAST,
+ video_overlay_video_renderer_param_specs);
+@@ -145,6 +163,7 @@ static void
+ (GstPlayerVideoOverlayVideoRenderer * self)
+ {
+ self->x = self->y = self->width = self->height = -1;
++ self->video_sink = NULL;
+ }
+
+ static GstElement *gst_player_video_overlay_video_renderer_create_video_sink
+@@ -168,7 +187,7 @@ static GstElement *gst_player_video_overlay_video_renderer_create_video_sink
+ gst_video_overlay_set_render_rectangle (self->video_overlay, self->x,
+ self->y, self->width, self->height);
+
+- return NULL;
++ return self->video_sink;
+ }
+
+ static void
+@@ -193,6 +212,23 @@ gst_player_video_overlay_video_renderer_new (gpointer window_handle)
+ }
+
+ /**
++ * gst_player_video_overlay_video_renderer_new_with_sink:
++ * @window_handle: (allow-none): Window handle to use or %NULL
++ * @video_sink: the custom video_sink to be set for the video renderer
++ *
++ * Returns: (transfer full):
++ *
++ * Since 1.12
++ */
++GstPlayerVideoRenderer *
++gst_player_video_overlay_video_renderer_new_with_sink (gpointer window_handle,
++ GstElement * video_sink)
++{
++ return g_object_new (GST_TYPE_PLAYER_VIDEO_OVERLAY_VIDEO_RENDERER,
++ "window-handle", window_handle, "video-sink", video_sink, NULL);
++}
++
++/**
+ * gst_player_video_overlay_video_renderer_set_window_handle:
+ * @self: #GstPlayerVideoRenderer instance
+ * @window_handle: handle referencing to the platform specific window
+diff --git a/gst-libs/gst/player/gstplayer-video-overlay-video-renderer.h b/gst-libs/gst/player/gstplayer-video-overlay-video-renderer.h
+index be09113..8a96e84 100644
+--- a/gst-libs/gst/player/gstplayer-video-overlay-video-renderer.h
++++ b/gst-libs/gst/player/gstplayer-video-overlay-video-renderer.h
+@@ -41,6 +41,7 @@ typedef struct _GstPlayerVideoOverlayVideoRendererClass
+
+ GType gst_player_video_overlay_video_renderer_get_type (void);
+ GstPlayerVideoRenderer * gst_player_video_overlay_video_renderer_new (gpointer window_handle);
++GstPlayerVideoRenderer * gst_player_video_overlay_video_renderer_new_with_sink (gpointer window_handle, GstElement * video_sink);
+ void gst_player_video_overlay_video_renderer_set_window_handle (GstPlayerVideoOverlayVideoRenderer * self, gpointer window_handle);
+ gpointer gst_player_video_overlay_video_renderer_get_window_handle (GstPlayerVideoOverlayVideoRenderer * self);
+
+--
+1.9.1
+
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.10.4.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.10.4.bb
index 732fc2d..82cd91c 100644
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.10.4.bb
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.10.4.bb
@@ -21,6 +21,7 @@ SRC_URI = " \
file://0002-qmlglsrc-some-enhancements-for-qmlglsrc.patch \
file://0003-player-Add-configuration-for-enabling-accurate-seeks.patch \
file://0004-player-Add-get-track-number-media-info-API.patch \
+ file://0005-player-Add-overlayvideorenderer-video-sink.patch \
"
SRC_URI[md5sum] = "2757103e57a096a1a05b3ab85b8381af"
SRC_URI[sha256sum] = "23ddae506b3a223b94869a0d3eea3e9a12e847f94d2d0e0b97102ce13ecd6966"
--
1.9.1
More information about the Openembedded-core
mailing list