1 From b3dd3e7d8e6437cad01df6168003f366d3eb131a Mon Sep 17 00:00:00 2001
2 From: =?UTF-8?q?Olivier=20Cr=C3=AAte?= <olivier.crete@collabora.co.uk>
3 Date: Mon, 3 May 2010 15:00:11 -0400
4 Subject: [PATCH] xvimagesink: Add property for the XV_STACKING port attribute
8 sys/xvimage/xvimagesink.c | 31 +++++++++++++++++++++++++++++--
9 sys/xvimage/xvimagesink.h | 3 ++-
10 2 files changed, 31 insertions(+), 3 deletions(-)
12 diff --git a/sys/xvimage/xvimagesink.c b/sys/xvimage/xvimagesink.c
13 index 63f7e77..1a61fe1 100644
14 --- a/sys/xvimage/xvimagesink.c
15 +++ b/sys/xvimage/xvimagesink.c
16 @@ -189,7 +189,8 @@ enum
20 - PROP_DISABLE_COLORKEY
21 + PROP_DISABLE_COLORKEY,
25 static GstVideoSinkClass *parent_class = NULL;
26 @@ -1443,13 +1444,14 @@ gst_xvimagesink_get_xv_support (GstXvImageSink * xvimagesink,
28 /* Set XV_AUTOPAINT_COLORKEY and XV_DOUBLE_BUFFER and XV_COLORKEY */
30 - int count, todo = 4;
31 + int count, todo = 6;
32 XvAttribute *const attr = XvQueryPortAttributes (xcontext->disp,
33 xcontext->xv_port_id, &count);
34 static const char autopaint[] = "XV_AUTOPAINT_COLORKEY";
35 static const char dbl_buffer[] = "XV_DOUBLE_BUFFER";
36 static const char colorkey[] = "XV_COLORKEY";
37 static const char disable_colorkey[] = "XV_DISABLE_COLORKEY";
38 + static const char stacking[] = "XV_STACKING";
40 GST_DEBUG_OBJECT (xvimagesink, "Checking %d Xv port attributes", count);
42 @@ -1538,6 +1540,18 @@ gst_xvimagesink_get_xv_support (GstXvImageSink * xvimagesink,
43 xvimagesink->have_disable_colorkey = TRUE;
45 xvimagesink->disable_colorkey_atom = atom;
46 + } else if (!strcmp (attr[i].name, stacking)) {
47 + const Atom atom = XInternAtom (xcontext->disp, stacking, False);
50 + GST_LOG_OBJECT (xvimagesink, "Setting Xv stacking order to %d",
51 + xvimagesink->stacking);
53 + stacking_num = g_atomic_int_get (&xvimagesink->stacking);
54 + XvSetPortAttribute (xcontext->disp, xcontext->xv_port_id, atom,
61 @@ -3325,6 +3339,10 @@ gst_xvimagesink_set_property (GObject * object, guint prop_id,
62 g_atomic_int_set (&xvimagesink->disable_colorkey,
63 g_value_get_boolean (value));
66 + g_atomic_int_set (&xvimagesink->stacking,
67 + g_value_get_uint (value));
70 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
72 @@ -3416,6 +3434,9 @@ gst_xvimagesink_get_property (GObject * object, guint prop_id,
73 case PROP_DISABLE_COLORKEY:
74 g_value_set_boolean (value, xvimagesink->disable_colorkey);
77 + g_value_set_uint (value, xvimagesink->stacking);
80 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
82 @@ -3543,6 +3564,7 @@ gst_xvimagesink_init (GstXvImageSink * xvimagesink)
83 xvimagesink->disable_colorkey = FALSE;
84 xvimagesink->disable_colorkey_set = FALSE;
85 xvimagesink->disable_colorkey_atom = None;
86 + xvimagesink->stacking = 0;
88 /* on 16bit displays this becomes r,g,b = 1,2,3
89 * on 24bit displays this becomes r,g,b = 8,8,16
90 @@ -3723,6 +3745,11 @@ gst_xvimagesink_class_init (GstXvImageSinkClass * klass)
91 "Whether to disable colorkey", FALSE,
92 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
94 + g_object_class_install_property (gobject_class, PROP_STACKING,
95 + g_param_spec_uint ("stacking", "Stacking order",
96 + "The port stacking order (0=auto, 1=bottom, 2=top", 0, 2, 0,
97 + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
99 gobject_class->finalize = gst_xvimagesink_finalize;
101 gstelement_class->change_state =
102 diff --git a/sys/xvimage/xvimagesink.h b/sys/xvimage/xvimagesink.h
103 index ddc0e06..12ac3e9 100644
104 --- a/sys/xvimage/xvimagesink.h
105 +++ b/sys/xvimage/xvimagesink.h
106 @@ -279,7 +279,8 @@ struct _GstXvImageSink {
107 gboolean disable_colorkey;
108 gboolean disable_colorkey_set;
109 Atom disable_colorkey_atom;
113 gboolean draw_borders;