1*4882a593SmuzhiyunFrom b5eed6c97c71e1be0defd8827422dedfa06a1edc Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Jeffy Chen <jeffy.chen@rock-chips.com> 3*4882a593SmuzhiyunDate: Fri, 28 Apr 2023 17:09:54 +0800 4*4882a593SmuzhiyunSubject: [PATCH 15/16] xvimagesink: Allow disabling decorations 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunTested on RK3588 EVB with: 7*4882a593Smuzhiyungst-launch-1.0 videotestsrc ! xvimagesink decorations=0 8*4882a593Smuzhiyun 9*4882a593SmuzhiyunSigned-off-by: Jeffy Chen <jeffy.chen@rock-chips.com> 10*4882a593Smuzhiyun--- 11*4882a593Smuzhiyun sys/xvimage/xvcontext.c | 5 +++-- 12*4882a593Smuzhiyun sys/xvimage/xvcontext.h | 3 ++- 13*4882a593Smuzhiyun sys/xvimage/xvimagesink.c | 17 ++++++++++++++++- 14*4882a593Smuzhiyun sys/xvimage/xvimagesink.h | 2 ++ 15*4882a593Smuzhiyun 4 files changed, 23 insertions(+), 4 deletions(-) 16*4882a593Smuzhiyun 17*4882a593Smuzhiyundiff --git a/sys/xvimage/xvcontext.c b/sys/xvimage/xvcontext.c 18*4882a593Smuzhiyunindex 975c3a9..97962d9 100644 19*4882a593Smuzhiyun--- a/sys/xvimage/xvcontext.c 20*4882a593Smuzhiyun+++ b/sys/xvimage/xvcontext.c 21*4882a593Smuzhiyun@@ -1048,7 +1048,8 @@ gst_xv_touchdevice_free (GstXvTouchDevice * device) 22*4882a593Smuzhiyun #endif 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun GstXWindow * 25*4882a593Smuzhiyun-gst_xvcontext_create_xwindow (GstXvContext * context, gint width, gint height) 26*4882a593Smuzhiyun+gst_xvcontext_create_xwindow (GstXvContext * context, gint width, gint height, 27*4882a593Smuzhiyun+ gboolean decorations) 28*4882a593Smuzhiyun { 29*4882a593Smuzhiyun GstXWindow *window; 30*4882a593Smuzhiyun Atom wm_delete; 31*4882a593Smuzhiyun@@ -1098,7 +1099,7 @@ gst_xvcontext_create_xwindow (GstXvContext * context, gint width, gint height) 32*4882a593Smuzhiyun hints = g_malloc0 (sizeof (MotifWmHints)); 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun hints->flags |= MWM_HINTS_DECORATIONS; 35*4882a593Smuzhiyun- hints->decorations = 1 << 0; 36*4882a593Smuzhiyun+ hints->decorations = decorations ? 1 << 0 : 0; 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun XChangeProperty (context->disp, window->win, 39*4882a593Smuzhiyun hints_atom, hints_atom, 32, PropModeReplace, 40*4882a593Smuzhiyundiff --git a/sys/xvimage/xvcontext.h b/sys/xvimage/xvcontext.h 41*4882a593Smuzhiyunindex e515fcc..1fb7614 100644 42*4882a593Smuzhiyun--- a/sys/xvimage/xvcontext.h 43*4882a593Smuzhiyun+++ b/sys/xvimage/xvcontext.h 44*4882a593Smuzhiyun@@ -287,7 +287,8 @@ struct _GstXvTouchDevice { 45*4882a593Smuzhiyun G_END_DECLS 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun GstXWindow * gst_xvcontext_create_xwindow (GstXvContext * context, 48*4882a593Smuzhiyun- gint width, gint height); 49*4882a593Smuzhiyun+ gint width, gint height, 50*4882a593Smuzhiyun+ gboolean decorations); 51*4882a593Smuzhiyun GstXWindow * gst_xvcontext_create_xwindow_from_xid (GstXvContext * context, XID xid); 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun void gst_xwindow_destroy (GstXWindow * window); 54*4882a593Smuzhiyundiff --git a/sys/xvimage/xvimagesink.c b/sys/xvimage/xvimagesink.c 55*4882a593Smuzhiyunindex fea70a5..a0fa468 100644 56*4882a593Smuzhiyun--- a/sys/xvimage/xvimagesink.c 57*4882a593Smuzhiyun+++ b/sys/xvimage/xvimagesink.c 58*4882a593Smuzhiyun@@ -200,6 +200,7 @@ enum 59*4882a593Smuzhiyun PROP_DRAW_BORDERS, 60*4882a593Smuzhiyun PROP_WINDOW_WIDTH, 61*4882a593Smuzhiyun PROP_WINDOW_HEIGHT, 62*4882a593Smuzhiyun+ PROP_DECORATIONS, 63*4882a593Smuzhiyun PROP_LAST 64*4882a593Smuzhiyun }; 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun@@ -557,7 +558,8 @@ gst_xv_image_sink_xwindow_new (GstXvImageSink * xvimagesink, 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun context = xvimagesink->context; 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun- xwindow = gst_xvcontext_create_xwindow (context, width, height); 71*4882a593Smuzhiyun+ xwindow = gst_xvcontext_create_xwindow (context, width, height, 72*4882a593Smuzhiyun+ xvimagesink->decorations); 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun /* set application name as a title */ 75*4882a593Smuzhiyun gst_xv_image_sink_xwindow_set_title (xvimagesink, xwindow, NULL); 76*4882a593Smuzhiyun@@ -2057,6 +2059,9 @@ gst_xv_image_sink_set_property (GObject * object, guint prop_id, 77*4882a593Smuzhiyun case PROP_DRAW_BORDERS: 78*4882a593Smuzhiyun xvimagesink->draw_borders = g_value_get_boolean (value); 79*4882a593Smuzhiyun break; 80*4882a593Smuzhiyun+ case PROP_DECORATIONS: 81*4882a593Smuzhiyun+ xvimagesink->decorations = g_value_get_boolean (value); 82*4882a593Smuzhiyun+ break; 83*4882a593Smuzhiyun default: 84*4882a593Smuzhiyun if (!gst_video_overlay_set_property (object, PROP_LAST, prop_id, value)) 85*4882a593Smuzhiyun G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); 86*4882a593Smuzhiyun@@ -2147,6 +2152,9 @@ gst_xv_image_sink_get_property (GObject * object, guint prop_id, 87*4882a593Smuzhiyun else 88*4882a593Smuzhiyun g_value_set_uint64 (value, 0); 89*4882a593Smuzhiyun break; 90*4882a593Smuzhiyun+ case PROP_DECORATIONS: 91*4882a593Smuzhiyun+ g_value_set_boolean (value, xvimagesink->decorations); 92*4882a593Smuzhiyun+ break; 93*4882a593Smuzhiyun default: 94*4882a593Smuzhiyun G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); 95*4882a593Smuzhiyun break; 96*4882a593Smuzhiyun@@ -2310,6 +2318,8 @@ gst_xv_image_sink_init (GstXvImageSink * xvimagesink) 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun /* HACK: Use a non-zero initial ID to detect overlay mode */ 99*4882a593Smuzhiyun xvimagesink->xwindow_id = -1; 100*4882a593Smuzhiyun+ 101*4882a593Smuzhiyun+ xvimagesink->decorations = TRUE; 102*4882a593Smuzhiyun } 103*4882a593Smuzhiyun 104*4882a593Smuzhiyun static void 105*4882a593Smuzhiyun@@ -2446,6 +2456,11 @@ gst_xv_image_sink_class_init (GstXvImageSinkClass * klass) 106*4882a593Smuzhiyun "Height of the window", 0, G_MAXUINT64, 0, 107*4882a593Smuzhiyun G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun+ g_object_class_install_property (gobject_class, PROP_DECORATIONS, 110*4882a593Smuzhiyun+ g_param_spec_boolean ("decorations", "decorations", 111*4882a593Smuzhiyun+ "Allow window decorations", TRUE, 112*4882a593Smuzhiyun+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 113*4882a593Smuzhiyun+ 114*4882a593Smuzhiyun gobject_class->finalize = gst_xv_image_sink_finalize; 115*4882a593Smuzhiyun 116*4882a593Smuzhiyun gst_element_class_set_static_metadata (gstelement_class, 117*4882a593Smuzhiyundiff --git a/sys/xvimage/xvimagesink.h b/sys/xvimage/xvimagesink.h 118*4882a593Smuzhiyunindex c84eeea..2e7182c 100644 119*4882a593Smuzhiyun--- a/sys/xvimage/xvimagesink.h 120*4882a593Smuzhiyun+++ b/sys/xvimage/xvimagesink.h 121*4882a593Smuzhiyun@@ -136,6 +136,8 @@ struct _GstXvImageSink 122*4882a593Smuzhiyun GstVideoRectangle render_rect; 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun guintptr xwindow_id; 125*4882a593Smuzhiyun+ 126*4882a593Smuzhiyun+ gboolean decorations; 127*4882a593Smuzhiyun }; 128*4882a593Smuzhiyun 129*4882a593Smuzhiyun struct _GstXvImageSinkClass 130*4882a593Smuzhiyun-- 131*4882a593Smuzhiyun2.20.1 132*4882a593Smuzhiyun 133