If the second and next caps structures are a subset of the already existing
transformed caps we can safely skip them because we would transform them to
the same caps again.
This makes gst_pad_get_caps() on an audiotestsrc ! audioconvert !
audioconvert ! audioconvert ! fakesink pipeline about 1.7 times faster.
for (j = 0; j < n; j++) {
structure = gst_caps_get_structure (caps, j);
+
+ if (j > 0) {
+ GstCaps *tmp = gst_caps_new_full (gst_structure_copy (structure), NULL);
+
+ /* If the new structure is a subset of the already existing transformed
+ * caps we can safely skip it because we would transform it to the
+ * same caps again.
+ */
+ if (gst_caps_is_subset (tmp, ret)) {
+ gst_caps_unref (tmp);
+ continue;
+ }
+ gst_caps_unref (tmp);
+ }
+
structure_name = gst_structure_get_name (structure);
isfloat = strcmp (structure_name, "audio/x-raw-float") == 0;