meta-agl-bsp: fixes for meta-rcar-gen3 changes 05/30205/2
authorScott Murray <scott.murray@konsulko.com>
Tue, 27 Aug 2024 18:32:43 +0000 (14:32 -0400)
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>
Thu, 29 Aug 2024 11:06:39 +0000 (11:06 +0000)
The scarthgap-dev branch in meta-renesas now contains a complete set
of gstreamer 1.20.3 components that are set as the preferred versions
by default when the "multimedia" machine feature is set, which AGL
does for the rcar-gen3 machines.  To accommodate this, remove our
BBMASKing of meta-rcar-gen3 gstreamer recipes, and add back the
rcar-gen3 version of the patch to gstreamer1.0-plugins-bad.

Bug-AGL: SPEC-5239

Change-Id: I55aecbf6d9a32519ec5f6f2e1b895fb6f5087b71
Signed-off-by: Scott Murray <scott.murray@konsulko.com>
Reviewed-on: https://gerrit.automotivelinux.org/gerrit/c/AGL/meta-agl/+/30205
Reviewed-by: Jan-Simon Moeller <jsmoeller@linuxfoundation.org>
Tested-by: Jan-Simon Moeller <jsmoeller@linuxfoundation.org>
meta-agl-bsp/conf/include/agl_rcar-nogfx.inc
meta-agl-core/recipes-multimedia/gstreamer1.0-plugins-bad/files/rcar-gen3/0001-Added-appid-and-title-support.patch [new file with mode: 0644]

index 64e1364..fb67fd9 100644 (file)
@@ -58,13 +58,3 @@ BBMASK += "meta-renesas/meta-rcar-gen3/recipes-graphics/cogl/cogl-1.0_1.%.bbappe
 # packagegroup bbclass is inherited.  This can be removed when upstream
 # is fixed to add the required PACKAGE_ARCH = "${MACHINE_ARCH}".
 PACKAGE_ARCH:pn-packagegroup-multimedia-libs = "${MACHINE_ARCH}"
-
-# Mask out BSP layer gstreamer* 1.22.x bbappends for now, as the BSP
-# effectively is building 1.20.x plugins and packaging them as 1.22,
-# which breaks building various things.  The whole directory is not
-# commented out because we still want the vspfilter plugin.
-# The BBMASKs need to be here instead of agl_rcar.ing since without
-# them there are issues with the gstreamer1.0-plugins-bad patches in
-# meta-agl-core not applying.
-BBMASK += "meta-renesas/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0-omx"
-BBMASK += "meta-renesas/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-"
diff --git a/meta-agl-core/recipes-multimedia/gstreamer1.0-plugins-bad/files/rcar-gen3/0001-Added-appid-and-title-support.patch b/meta-agl-core/recipes-multimedia/gstreamer1.0-plugins-bad/files/rcar-gen3/0001-Added-appid-and-title-support.patch
new file mode 100644 (file)
index 0000000..72b9243
--- /dev/null
@@ -0,0 +1,166 @@
+From df64f7e34d01a03957d78317ef9a1cf6d6b95055 Mon Sep 17 00:00:00 2001
+From: Marius Vlad <marius.vlad@collabora.com>
+Date: Wed, 9 Aug 2023 14:34:19 +0300
+Subject: [PATCH] Added appid and title support
+
+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(-)
+
+diff --git a/ext/wayland/gstwaylandsink.c b/ext/wayland/gstwaylandsink.c
+index 4918154..f743cf2 100644
+--- a/ext/wayland/gstwaylandsink.c
++++ b/ext/wayland/gstwaylandsink.c
+@@ -66,7 +66,9 @@ enum
+   PROP_DISPLAY,
+   PROP_FULLSCREEN,
+   PROP_USE_SUBSURFACE,
+-  PROP_SUPPRESS_INTERLACE
++  PROP_SUPPRESS_INTERLACE,
++  PROP_APP_ID,
++  PROP_TITLE
+ };
+ #define DEFAULT_USE_SUBSURFACE          TRUE
+@@ -229,6 +231,16 @@ gst_wayland_sink_class_init (GstWaylandSinkClass * klass)
+           DEFAULT_SUPPRESS_INTERLACE,
+           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
++  g_object_class_install_property (gobject_class, PROP_APP_ID,
++      g_param_spec_string ("appid", "Top-level application id", "Wayland "
++          "appid, as xdg_shell::set_app_id",
++          NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
++
++  g_object_class_install_property (gobject_class, PROP_TITLE,
++      g_param_spec_string ("title", "Top-level title", "Wayland "
++          "title, xdg_shell::set_title",
++          NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
++
+   gst_type_mark_as_plugin_api (GST_TYPE_WAYLAND_VIDEO, 0);
+ }
+@@ -266,6 +278,16 @@ gst_wayland_sink_get_property (GObject * object,
+       g_value_set_string (value, sink->display_name);
+       GST_OBJECT_UNLOCK (sink);
+       break;
++    case PROP_APP_ID:
++      GST_OBJECT_LOCK (sink);
++      g_value_set_string (value, sink->app_id);
++      GST_OBJECT_UNLOCK (sink);
++      break;
++    case PROP_TITLE:
++      GST_OBJECT_LOCK (sink);
++      g_value_set_string (value, sink->title);
++      GST_OBJECT_UNLOCK (sink);
++      break;
+     case PROP_FULLSCREEN:
+       GST_OBJECT_LOCK (sink);
+       g_value_set_boolean (value, sink->fullscreen);
+@@ -298,6 +320,16 @@ gst_wayland_sink_set_property (GObject * object,
+       sink->display_name = g_value_dup_string (value);
+       GST_OBJECT_UNLOCK (sink);
+       break;
++    case PROP_APP_ID:
++      GST_OBJECT_LOCK (sink);
++      sink->app_id = g_value_dup_string (value);
++      GST_OBJECT_UNLOCK (sink);
++      break;
++    case PROP_TITLE:
++      GST_OBJECT_LOCK (sink);
++      sink->title = g_value_dup_string (value);
++      GST_OBJECT_UNLOCK (sink);
++      break;
+     case PROP_FULLSCREEN:
+       GST_OBJECT_LOCK (sink);
+       gst_wayland_sink_set_fullscreen (sink, g_value_get_boolean (value));
+@@ -331,12 +363,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);
+   g_free (sink->display_name);
++  g_free (sink->title);
++  g_free (sink->app_id);
+   g_mutex_clear (&sink->display_lock);
+   g_mutex_clear (&sink->render_lock);
+@@ -768,7 +806,8 @@ gst_wayland_sink_show_frame (GstVideoSink * vsink, GstBuffer * buffer)
+     if (!sink->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);
+     }
+diff --git a/ext/wayland/gstwaylandsink.h b/ext/wayland/gstwaylandsink.h
+index 46ea538..e6c94ae 100644
+--- a/ext/wayland/gstwaylandsink.h
++++ b/ext/wayland/gstwaylandsink.h
+@@ -64,6 +64,8 @@ struct _GstWaylandSink
+   gboolean fullscreen;
+   gchar *display_name;
++  gchar *app_id;
++  gchar *title;
+   gboolean redraw_pending;
+   GMutex render_lock;
+diff --git a/ext/wayland/wlwindow.c b/ext/wayland/wlwindow.c
+index 3aace87..16faec8 100644
+--- a/ext/wayland/wlwindow.c
++++ b/ext/wayland/wlwindow.c
+@@ -255,7 +255,7 @@ gst_wl_window_ensure_fullscreen (GstWlWindow * window, 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;
+@@ -288,6 +288,14 @@ gst_wl_window_new_toplevel (GstWlDisplay * display, const GstVideoInfo * info,
+     /* Finally, commit the xdg_surface state as toplevel */
+     window->configured = FALSE;
++    if (app_id)
++          xdg_toplevel_set_app_id (window->xdg_toplevel, app_id);
++    else
++          xdg_toplevel_set_app_id (window->xdg_toplevel, "ext.wayland.waylandsink");
++    if (title)
++          xdg_toplevel_set_title (window->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);
+diff --git a/ext/wayland/wlwindow.h b/ext/wayland/wlwindow.h
+index 034a5a5..6b525c8 100644
+--- a/ext/wayland/wlwindow.h
++++ b/ext/wayland/wlwindow.h
+@@ -84,7 +84,7 @@ GType gst_wl_window_get_type (void);
+ void gst_wl_window_ensure_fullscreen (GstWlWindow * window,
+         gboolean fullscreen);
+ 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);
+-- 
+2.35.1
+