audioconvert: Optimize transform_caps()

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.
This commit is contained in:
Sebastian Dröge 2011-05-27 13:13:42 +02:00
parent 992e01eb63
commit d590bce5f7

View file

@ -577,6 +577,21 @@ gst_audio_convert_transform_caps (GstBaseTransform * base,
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;