pad: make _fixate_caps() also truncate when needed
authorRob Clark <rob@ti.com>
Wed, 9 Sep 2009 20:37:11 +0000 (15:37 -0500)
committerWim Taymans <wim@metal.(none)>
Wed, 28 Oct 2009 15:36:13 +0000 (16:36 +0100)
The default gst_pad_fixate_caps() previously would only fixate each individual
struct. In case there are multiple structs, the resulting caps would still not
be fixed. In the spirit of how individual structs are fixated, this patch
changes gst_pad_fixate_caps() to remove all but the first struct.

Fixes #595886

gst/gstpad.c

index 4dc3dc92599779e019b5a18271d0c2e0db232199..cf4be1cfa0b6c2ebe3eba94a9fb36c6ab428ea1c 100644 (file)
@@ -2404,7 +2404,7 @@ void
 gst_pad_fixate_caps (GstPad * pad, GstCaps * caps)
 {
   GstPadFixateCapsFunction fixatefunc;
-  guint n, len;
+  guint len;
 
   g_return_if_fail (GST_IS_PAD (pad));
   g_return_if_fail (caps != NULL);
@@ -2419,11 +2419,15 @@ gst_pad_fixate_caps (GstPad * pad, GstCaps * caps)
 
   /* default fixation */
   len = gst_caps_get_size (caps);
-  for (n = 0; n < len; n++) {
-    GstStructure *s = gst_caps_get_structure (caps, n);
+  if (len > 0) {
+    GstStructure *s = gst_caps_get_structure (caps, 0);
 
     gst_structure_foreach (s, gst_pad_default_fixate, s);
   }
+
+  if (len > 1) {
+    gst_caps_truncate (caps);
+  }
 }
 
 /* Default accept caps implementation just checks against