- 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 <[email protected]> --- ...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 <[email protected]> +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 <[email protected]> +--- + .../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 -- _______________________________________________ Openembedded-core mailing list [email protected] http://lists.openembedded.org/mailman/listinfo/openembedded-core
