diff options
Diffstat (limited to 'meta-agl-core/recipes-multimedia/gstreamer1.0-plugins-bad')
-rw-r--r-- | meta-agl-core/recipes-multimedia/gstreamer1.0-plugins-bad/files/0001-Added-appid-and-title-support.patch | 197 |
1 files changed, 100 insertions, 97 deletions
diff --git a/meta-agl-core/recipes-multimedia/gstreamer1.0-plugins-bad/files/0001-Added-appid-and-title-support.patch b/meta-agl-core/recipes-multimedia/gstreamer1.0-plugins-bad/files/0001-Added-appid-and-title-support.patch index f4139ff2c..685f80c7b 100644 --- a/meta-agl-core/recipes-multimedia/gstreamer1.0-plugins-bad/files/0001-Added-appid-and-title-support.patch +++ b/meta-agl-core/recipes-multimedia/gstreamer1.0-plugins-bad/files/0001-Added-appid-and-title-support.patch @@ -1,34 +1,34 @@ -From 2de455486403a710cb6896b0052b4cd7e46d83a2 Mon Sep 17 00:00:00 2001 +From b8bbab864a1367ac47bcc0998b4c07d20020965a Mon Sep 17 00:00:00 2001 From: Marius Vlad <marius.vlad@collabora.com> -Date: Thu, 10 Aug 2023 14:20:48 +0300 +Date: Thu, 5 Oct 2023 18:23:52 +0300 Subject: [PATCH] ext/wayland: Add title/appid support +Upstream-Status: Pending + Bug-AGL: SPEC-4870 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> --- - ext/wayland/gstwaylandsink.c | 43 ++++++++++++++++++++++++++++++++++-- - ext/wayland/gstwaylandsink.h | 2 ++ - ext/wayland/wlwindow.c | 10 ++++++++- - ext/wayland/wlwindow.h | 2 +- - 4 files changed, 53 insertions(+), 4 deletions(-) + ext/wayland/gstwaylandsink.c | 41 +++++++++++++++++++++++++++++- + ext/wayland/gstwaylandsink.h | 2 ++ + gst-libs/gst/wayland/gstwlwindow.c | 12 ++++++++- + gst-libs/gst/wayland/gstwlwindow.h | 3 ++- + 4 files changed, 55 insertions(+), 3 deletions(-) diff --git a/ext/wayland/gstwaylandsink.c b/ext/wayland/gstwaylandsink.c -index 0761304..8913ee2 100644 +index 2f116bf..69f4a00 100644 --- a/ext/wayland/gstwaylandsink.c +++ b/ext/wayland/gstwaylandsink.c -@@ -63,7 +63,9 @@ enum - { - PROP_0, +@@ -61,6 +61,8 @@ enum PROP_DISPLAY, -- PROP_FULLSCREEN -+ PROP_FULLSCREEN, + PROP_FULLSCREEN, + PROP_ROTATE_METHOD, + PROP_APP_ID, -+ PROP_TITLE ++ PROP_TITLE, + PROP_LAST }; - GST_DEBUG_CATEGORY (gstwayland_debug); -@@ -212,6 +214,16 @@ gst_wayland_sink_class_init (GstWaylandSinkClass * klass) - "Whether the surface should be made fullscreen ", FALSE, +@@ -177,6 +179,16 @@ gst_wayland_sink_class_init (GstWaylandSinkClass * klass) + GST_TYPE_VIDEO_ORIENTATION_METHOD, GST_VIDEO_ORIENTATION_IDENTITY, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_APP_ID, @@ -41,77 +41,77 @@ index 0761304..8913ee2 100644 + "title, xdg_shell::set_title", + NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + - gst_type_mark_as_plugin_api (GST_TYPE_WAYLAND_VIDEO, 0); - } - -@@ -246,6 +258,16 @@ gst_wayland_sink_get_property (GObject * object, - g_value_set_string (value, sink->display_name); - GST_OBJECT_UNLOCK (sink); + /** + * waylandsink:render-rectangle: + * +@@ -266,6 +278,16 @@ gst_wayland_sink_get_property (GObject * object, + g_value_set_enum (value, self->current_rotate_method); + GST_OBJECT_UNLOCK (self); break; + case PROP_APP_ID: -+ GST_OBJECT_LOCK (sink); -+ g_value_set_string (value, sink->app_id); -+ GST_OBJECT_UNLOCK (sink); ++ GST_OBJECT_LOCK (self); ++ g_value_set_string (value, self->app_id); ++ GST_OBJECT_UNLOCK (self); + break; + case PROP_TITLE: -+ GST_OBJECT_LOCK (sink); -+ g_value_set_string (value, sink->title); -+ GST_OBJECT_UNLOCK (sink); ++ GST_OBJECT_LOCK (self); ++ g_value_set_string (value, self->title); ++ GST_OBJECT_UNLOCK (self); + break; - case PROP_FULLSCREEN: - GST_OBJECT_LOCK (sink); - g_value_set_boolean (value, sink->fullscreen); -@@ -269,6 +291,16 @@ gst_wayland_sink_set_property (GObject * object, - sink->display_name = g_value_dup_string (value); - GST_OBJECT_UNLOCK (sink); + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; +@@ -289,6 +311,16 @@ gst_wayland_sink_set_property (GObject * object, + gst_wayland_sink_set_fullscreen (self, g_value_get_boolean (value)); + GST_OBJECT_UNLOCK (self); break; + case PROP_APP_ID: -+ GST_OBJECT_LOCK (sink); -+ sink->app_id = g_value_dup_string (value); -+ GST_OBJECT_UNLOCK (sink); ++ GST_OBJECT_LOCK (self); ++ self->app_id = g_value_dup_string (value); ++ GST_OBJECT_UNLOCK (self); + break; + case PROP_TITLE: -+ GST_OBJECT_LOCK (sink); -+ sink->title = g_value_dup_string (value); -+ GST_OBJECT_UNLOCK (sink); ++ GST_OBJECT_LOCK (self); ++ self->title = g_value_dup_string (value); ++ GST_OBJECT_UNLOCK (self); + break; - case PROP_FULLSCREEN: - GST_OBJECT_LOCK (sink); - gst_wayland_sink_set_fullscreen (sink, g_value_get_boolean (value)); -@@ -291,12 +323,18 @@ gst_wayland_sink_finalize (GObject * object) - gst_buffer_unref (sink->last_buffer); - if (sink->display) - g_object_unref (sink->display); -+ if (sink->title) -+ g_object_unref (sink->title); -+ if (sink->app_id) -+ g_object_unref (sink->app_id); - if (sink->window) - g_object_unref (sink->window); - if (sink->pool) - gst_object_unref (sink->pool); + case PROP_ROTATE_METHOD: + gst_wayland_sink_set_rotate_method (self, g_value_get_enum (value), + FALSE); +@@ -310,12 +342,18 @@ gst_wayland_sink_finalize (GObject * object) + gst_buffer_unref (self->last_buffer); + if (self->display) + g_object_unref (self->display); ++ if (self->title) ++ g_object_unref (self->title); ++ if (self->app_id) ++ g_object_unref (self->app_id); + if (self->window) + g_object_unref (self->window); + if (self->pool) + gst_object_unref (self->pool); - g_free (sink->display_name); -+ g_free (sink->title); -+ g_free (sink->app_id); + g_free (self->display_name); ++ g_free (self->title); ++ g_free (self->app_id); - g_mutex_clear (&sink->display_lock); - g_mutex_clear (&sink->render_lock); -@@ -718,7 +756,8 @@ gst_wayland_sink_show_frame (GstVideoSink * vsink, GstBuffer * buffer) - if (!sink->window) { + g_mutex_clear (&self->display_lock); + g_mutex_clear (&self->render_lock); +@@ -761,7 +799,8 @@ gst_wayland_sink_show_frame (GstVideoSink * vsink, GstBuffer * buffer) + if (!self->window) { /* if we were not provided a window, create one ourselves */ - sink->window = gst_wl_window_new_toplevel (sink->display, -- &sink->video_info, sink->fullscreen, &sink->render_lock); -+ &sink->video_info, sink->fullscreen, sink->app_id, sink->title, -+ &sink->render_lock); - g_signal_connect_object (sink->window, "closed", - G_CALLBACK (on_window_closed), sink, 0); - } + self->window = gst_wl_window_new_toplevel (self->display, +- &self->video_info, self->fullscreen, &self->render_lock); ++ &self->video_info, self->fullscreen, &self->app_id, &self->title, ++ &self->render_lock); + g_signal_connect_object (self->window, "closed", + G_CALLBACK (on_window_closed), self, 0); + gst_wl_window_set_rotate_method (self->window, diff --git a/ext/wayland/gstwaylandsink.h b/ext/wayland/gstwaylandsink.h -index 7aabb6f..4db00e5 100644 +index 3243d8c..6aee19d 100644 --- a/ext/wayland/gstwaylandsink.h +++ b/ext/wayland/gstwaylandsink.h -@@ -63,6 +63,8 @@ struct _GstWaylandSink +@@ -58,6 +58,8 @@ struct _GstWaylandSink gboolean fullscreen; gchar *display_name; @@ -120,47 +120,50 @@ index 7aabb6f..4db00e5 100644 gboolean redraw_pending; GMutex render_lock; -diff --git a/ext/wayland/wlwindow.c b/ext/wayland/wlwindow.c -index 66df0fc..ad2d3f3 100644 ---- a/ext/wayland/wlwindow.c -+++ b/ext/wayland/wlwindow.c -@@ -254,7 +254,7 @@ gst_wl_window_ensure_fullscreen (GstWlWindow * window, gboolean fullscreen) +diff --git a/gst-libs/gst/wayland/gstwlwindow.c b/gst-libs/gst/wayland/gstwlwindow.c +index 6004993..de0a81e 100644 +--- a/gst-libs/gst/wayland/gstwlwindow.c ++++ b/gst-libs/gst/wayland/gstwlwindow.c +@@ -270,7 +270,7 @@ gst_wl_window_ensure_fullscreen (GstWlWindow * self, gboolean fullscreen) GstWlWindow * gst_wl_window_new_toplevel (GstWlDisplay * display, const GstVideoInfo * info, - gboolean fullscreen, GMutex * render_lock) + gboolean fullscreen, gchar *app_id, gchar *title, GMutex * render_lock) { - GstWlWindow *window; + GstWlWindow *self; + GstWlWindowPrivate *priv; +@@ -307,6 +307,16 @@ gst_wl_window_new_toplevel (GstWlDisplay * display, const GstVideoInfo * info, -@@ -287,6 +287,14 @@ gst_wl_window_new_toplevel (GstWlDisplay * display, const GstVideoInfo * info, + gst_wl_window_ensure_fullscreen (self, fullscreen); - /* Finally, commit the xdg_surface state as toplevel */ - window->configured = FALSE; + if (app_id) -+ xdg_toplevel_set_app_id (window->xdg_toplevel, app_id); ++ xdg_toplevel_set_app_id (priv->xdg_toplevel, app_id); + else -+ xdg_toplevel_set_app_id (window->xdg_toplevel, "ext.wayland.waylandsink"); ++ xdg_toplevel_set_app_id (priv->xdg_toplevel, "ext.wayland.waylandsink"); + if (title) -+ xdg_toplevel_set_title (window->xdg_toplevel, title); ++ xdg_toplevel_set_title (priv->xdg_toplevel, title); + else -+ xdg_toplevel_set_title (window->xdg_toplevel, "ext.wayland.waylandsink"); - wl_surface_commit (window->area_surface); - wl_display_flush (display->display); ++ xdg_toplevel_set_title (priv->xdg_toplevel, "ext.wayland.waylandsink"); ++ ++ + /* Finally, commit the xdg_surface state as toplevel */ + priv->configured = FALSE; + wl_surface_commit (priv->area_surface); +diff --git a/gst-libs/gst/wayland/gstwlwindow.h b/gst-libs/gst/wayland/gstwlwindow.h +index 06c4001..e102052 100644 +--- a/gst-libs/gst/wayland/gstwlwindow.h ++++ b/gst-libs/gst/wayland/gstwlwindow.h +@@ -39,7 +39,8 @@ void gst_wl_window_ensure_fullscreen (GstWlWindow * self, -diff --git a/ext/wayland/wlwindow.h b/ext/wayland/wlwindow.h -index 303c336..64399b3 100644 ---- a/ext/wayland/wlwindow.h -+++ b/ext/wayland/wlwindow.h -@@ -83,7 +83,7 @@ GType gst_wl_window_get_type (void); - void gst_wl_window_ensure_fullscreen (GstWlWindow * window, - gboolean fullscreen); + GST_WL_API GstWlWindow *gst_wl_window_new_toplevel (GstWlDisplay * display, - const GstVideoInfo * info, gboolean fullscreen, GMutex * render_lock); -+ const GstVideoInfo * info, gboolean fullscreen, gchar * app_id, gchar *title, GMutex * render_lock); - GstWlWindow *gst_wl_window_new_in_surface (GstWlDisplay * display, - struct wl_surface * parent, GMutex * render_lock); ++ const GstVideoInfo * info, gboolean fullscreen, gchar * app_id, ++ gchar *title, GMutex * render_lock); + GST_WL_API + GstWlWindow *gst_wl_window_new_in_surface (GstWlDisplay * display, -- 2.35.1 |