diff --git a/gst/audioconvert/gstaudioconvert.c b/gst/audioconvert/gstaudioconvert.c index b3250a7609..26506d226c 100644 --- a/gst/audioconvert/gstaudioconvert.c +++ b/gst/audioconvert/gstaudioconvert.c @@ -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;