xvimagesink: only try to set XV_ITURBT_709 port attribute if it exists
authorTim-Philipp Müller <tim@centricular.com>
Thu, 11 Sep 2014 21:19:05 +0000 (22:19 +0100)
committerTim-Philipp Müller <tim@centricular.com>
Thu, 11 Sep 2014 21:58:16 +0000 (22:58 +0100)
Don't try to set port attribute that's not advertised by the
adaptor. Fixes videotestsrc ! xvimagesink aborting with

X Error of failed request:  BadMatch (invalid parameter attributes)
  Major opcode of failed request:  151 (XVideo)
  Minor opcode of failed request:  13 ()

on intel HD4600 graphics with kernel 3.16, xserver 1.15,
intel driver 2.21.15.

sys/xvimage/xvcontext.c
sys/xvimage/xvcontext.h

index 146e4a5..6d84e37 100644 (file)
@@ -153,18 +153,20 @@ gst_xvcontext_get_xv_support (GstXvContext * context,
 
   /* Set XV_AUTOPAINT_COLORKEY and XV_DOUBLE_BUFFER and XV_COLORKEY */
   {
-    int count, todo = 3;
+    int count, todo = 4;
     XvAttribute *const attr = XvQueryPortAttributes (context->disp,
         context->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 iturbt709[] = "XV_ITURBT_709";
 
     GST_DEBUG ("Checking %d Xv port attributes", count);
 
     context->have_autopaint_colorkey = FALSE;
     context->have_double_buffer = FALSE;
     context->have_colorkey = FALSE;
+    context->have_iturbt709 = FALSE;
 
     for (i = 0; ((i < count) && todo); i++) {
       GST_DEBUG ("Got attribute %s", attr[i].name);
@@ -230,6 +232,9 @@ gst_xvcontext_get_xv_support (GstXvContext * context,
         }
         todo--;
         context->have_colorkey = TRUE;
+      } else if (!strcmp (attr[i].name, iturbt709)) {
+        todo--;
+        context->have_iturbt709 = TRUE;
       }
     }
 
@@ -891,6 +896,9 @@ gst_xvcontext_set_colorimetry (GstXvContext * context,
   Atom prop_atom;
   int xv_value;
 
+  if (!context->have_iturbt709)
+    return;
+
   switch (colorimetry->matrix) {
     case GST_VIDEO_COLOR_MATRIX_SMPTE240M:
     case GST_VIDEO_COLOR_MATRIX_BT709:
index 1bd0d97..af67877 100644 (file)
@@ -156,6 +156,7 @@ struct _GstXvContext
   gboolean have_autopaint_colorkey;
   gboolean have_colorkey;
   gboolean have_double_buffer;
+  gboolean have_iturbt709;
 
   GList *formats_list;