x(v)imagesink: use gst_caps_can_intersect() more
authorStefan Kost <ensonic@users.sf.net>
Thu, 6 May 2010 05:15:16 +0000 (08:15 +0300)
committerStefan Kost <ensonic@users.sf.net>
Thu, 6 May 2010 05:22:36 +0000 (08:22 +0300)
In place where we just need to know whether caps intersect, we can use this
quicker function.

sys/ximage/ximagesink.c
sys/xvimage/xvimagesink.c

index e7f4892..58b0d5f 100644 (file)
@@ -1460,7 +1460,6 @@ gst_ximagesink_setcaps (GstBaseSink * bsink, GstCaps * caps)
   GstXImageSink *ximagesink;
   gboolean ret = TRUE;
   GstStructure *structure;
-  GstCaps *intersection;
   const GValue *par;
   gint new_width, new_height;
   const GValue *fps;
@@ -1475,15 +1474,8 @@ gst_ximagesink_setcaps (GstBaseSink * bsink, GstCaps * caps)
       GST_PTR_FORMAT, ximagesink->xcontext->caps, caps);
 
   /* We intersect those caps with our template to make sure they are correct */
-  intersection = gst_caps_intersect (ximagesink->xcontext->caps, caps);
-  GST_DEBUG_OBJECT (ximagesink, "intersection returned %" GST_PTR_FORMAT,
-      intersection);
-  if (gst_caps_is_empty (intersection)) {
-    gst_caps_unref (intersection);
-    return FALSE;
-  }
-
-  gst_caps_unref (intersection);
+  if (!gst_caps_can_intersect (ximagesink->xcontext->caps, caps))
+    goto incompatible_caps;
 
   structure = gst_caps_get_structure (caps, 0);
 
@@ -1554,6 +1546,11 @@ gst_ximagesink_setcaps (GstBaseSink * bsink, GstCaps * caps)
   return TRUE;
 
   /* ERRORS */
+incompatible_caps:
+  {
+    GST_ERROR_OBJECT (ximagesink, "caps incompatible");
+    return FALSE;
+  }
 wrong_aspect:
   {
     GST_INFO_OBJECT (ximagesink, "pixel aspect ratio does not match");
index f2af495..b26dd3e 100644 (file)
@@ -2039,14 +2039,9 @@ gst_xvimagesink_get_format_from_caps (GstXvImageSink * xvimagesink,
     GstXvImageFormat *format = list->data;
 
     if (format) {
-      GstCaps *icaps = NULL;
-
-      icaps = gst_caps_intersect (caps, format->caps);
-      if (!gst_caps_is_empty (icaps)) {
-        gst_caps_unref (icaps);
+      if (gst_caps_can_intersect (caps, format->caps)) {
         return format->format;
       }
-      gst_caps_unref (icaps);
     }
     list = g_list_next (list);
   }
@@ -2074,7 +2069,6 @@ gst_xvimagesink_setcaps (GstBaseSink * bsink, GstCaps * caps)
 {
   GstXvImageSink *xvimagesink;
   GstStructure *structure;
-  GstCaps *intersection;
   guint32 im_format = 0;
   gboolean ret;
   gint video_width, video_height;
@@ -2093,14 +2087,9 @@ gst_xvimagesink_setcaps (GstBaseSink * bsink, GstCaps * caps)
       "In setcaps. Possible caps %" GST_PTR_FORMAT ", setting caps %"
       GST_PTR_FORMAT, xvimagesink->xcontext->caps, caps);
 
-  intersection = gst_caps_intersect (xvimagesink->xcontext->caps, caps);
-  GST_DEBUG_OBJECT (xvimagesink, "intersection returned %" GST_PTR_FORMAT,
-      intersection);
-  if (gst_caps_is_empty (intersection))
+  if (!gst_caps_intersect (xvimagesink->xcontext->caps, caps))
     goto incompatible_caps;
 
-  gst_caps_unref (intersection);
-
   structure = gst_caps_get_structure (caps, 0);
   ret = gst_structure_get_int (structure, "width", &video_width);
   ret &= gst_structure_get_int (structure, "height", &video_height);
@@ -2242,7 +2231,6 @@ gst_xvimagesink_setcaps (GstBaseSink * bsink, GstCaps * caps)
 incompatible_caps:
   {
     GST_ERROR_OBJECT (xvimagesink, "caps incompatible");
-    gst_caps_unref (intersection);
     return FALSE;
   }
 incomplete_caps: