--- /dev/null
+From b3dd3e7d8e6437cad01df6168003f366d3eb131a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Olivier=20Cr=C3=AAte?= <olivier.crete@collabora.co.uk>
+Date: Mon, 3 May 2010 15:00:11 -0400
+Subject: [PATCH] xvimagesink: Add property for the XV_STACKING port attribute
+ (Maemo specific)
+
+---
+ sys/xvimage/xvimagesink.c | 31 +++++++++++++++++++++++++++++--
+ sys/xvimage/xvimagesink.h | 3 ++-
+ 2 files changed, 31 insertions(+), 3 deletions(-)
+
+diff --git a/sys/xvimage/xvimagesink.c b/sys/xvimage/xvimagesink.c
+index 63f7e77..1a61fe1 100644
+--- a/sys/xvimage/xvimagesink.c
++++ b/sys/xvimage/xvimagesink.c
+@@ -189,7 +189,8 @@ enum
+ PROP_DRAW_BORDERS,
+ PROP_WINDOW_WIDTH,
+ PROP_WINDOW_HEIGHT,
+- PROP_DISABLE_COLORKEY
++ PROP_DISABLE_COLORKEY,
++ PROP_STACKING
+ };
+
+ static GstVideoSinkClass *parent_class = NULL;
+@@ -1443,13 +1444,14 @@ gst_xvimagesink_get_xv_support (GstXvImageSink * xvimagesink,
+
+ /* Set XV_AUTOPAINT_COLORKEY and XV_DOUBLE_BUFFER and XV_COLORKEY */
+ {
+- int count, todo = 4;
++ int count, todo = 6;
+ XvAttribute *const attr = XvQueryPortAttributes (xcontext->disp,
+ xcontext->xv_port_id, &count);
+ static const char autopaint[] = "XV_AUTOPAINT_COLORKEY";
+ static const char dbl_buffer[] = "XV_DOUBLE_BUFFER";
+ static const char colorkey[] = "XV_COLORKEY";
+ static const char disable_colorkey[] = "XV_DISABLE_COLORKEY";
++ static const char stacking[] = "XV_STACKING";
+
+ GST_DEBUG_OBJECT (xvimagesink, "Checking %d Xv port attributes", count);
+
+@@ -1538,6 +1540,18 @@ gst_xvimagesink_get_xv_support (GstXvImageSink * xvimagesink,
+ xvimagesink->have_disable_colorkey = TRUE;
+
+ xvimagesink->disable_colorkey_atom = atom;
++ } else if (!strcmp (attr[i].name, stacking)) {
++ const Atom atom = XInternAtom (xcontext->disp, stacking, False);
++ gint stacking_num;
++
++ GST_LOG_OBJECT (xvimagesink, "Setting Xv stacking order to %d",
++ xvimagesink->stacking);
++
++ stacking_num = g_atomic_int_get (&xvimagesink->stacking);
++ XvSetPortAttribute (xcontext->disp, xcontext->xv_port_id, atom,
++ stacking_num);
++
++ todo--;
+ }
+
+ XFree (attr);
+@@ -3325,6 +3339,10 @@ gst_xvimagesink_set_property (GObject * object, guint prop_id,
+ g_atomic_int_set (&xvimagesink->disable_colorkey,
+ g_value_get_boolean (value));
+ break;
++ case PROP_STACKING:
++ g_atomic_int_set (&xvimagesink->stacking,
++ g_value_get_uint (value));
++ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+@@ -3416,6 +3434,9 @@ gst_xvimagesink_get_property (GObject * object, guint prop_id,
+ case PROP_DISABLE_COLORKEY:
+ g_value_set_boolean (value, xvimagesink->disable_colorkey);
+ break;
++ case PROP_STACKING:
++ g_value_set_uint (value, xvimagesink->stacking);
++ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+@@ -3543,6 +3564,7 @@ gst_xvimagesink_init (GstXvImageSink * xvimagesink)
+ xvimagesink->disable_colorkey = FALSE;
+ xvimagesink->disable_colorkey_set = FALSE;
+ xvimagesink->disable_colorkey_atom = None;
++ xvimagesink->stacking = 0;
+
+ /* on 16bit displays this becomes r,g,b = 1,2,3
+ * on 24bit displays this becomes r,g,b = 8,8,16
+@@ -3723,6 +3745,11 @@ gst_xvimagesink_class_init (GstXvImageSinkClass * klass)
+ "Whether to disable colorkey", FALSE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
++ g_object_class_install_property (gobject_class, PROP_STACKING,
++ g_param_spec_uint ("stacking", "Stacking order",
++ "The port stacking order (0=auto, 1=bottom, 2=top", 0, 2, 0,
++ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
++
+ gobject_class->finalize = gst_xvimagesink_finalize;
+
+ gstelement_class->change_state =
+diff --git a/sys/xvimage/xvimagesink.h b/sys/xvimage/xvimagesink.h
+index ddc0e06..12ac3e9 100644
+--- a/sys/xvimage/xvimagesink.h
++++ b/sys/xvimage/xvimagesink.h
+@@ -279,7 +279,8 @@ struct _GstXvImageSink {
+ gboolean disable_colorkey;
+ gboolean disable_colorkey_set;
+ Atom disable_colorkey_atom;
+-
++ gint stacking;
++
+ gboolean draw_borders;
+
+ /* port features */