From: Sebastian Dröge Date: Wed, 1 Feb 2012 15:32:53 +0000 (+0100) Subject: audio{enc,dec}oder: Check if srcpad caps are a subset of the template caps X-Git-Tag: RELEASE-0.11.2~77 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5aa6748151b76160c6ee68a3888f89f2d83be54d;p=platform%2Fupstream%2Fgst-plugins-base.git audio{enc,dec}oder: Check if srcpad caps are a subset of the template caps --- diff --git a/gst-libs/gst/audio/gstaudiodecoder.c b/gst-libs/gst/audio/gstaudiodecoder.c index c28af8b..1056e50 100644 --- a/gst-libs/gst/audio/gstaudiodecoder.c +++ b/gst-libs/gst/audio/gstaudiodecoder.c @@ -503,6 +503,7 @@ gst_audio_decoder_set_output_format (GstAudioDecoder * dec, gboolean res = TRUE; guint old_rate; GstCaps *caps; + GstCaps *templ_caps; GST_DEBUG_OBJECT (dec, "Setting output format"); @@ -514,6 +515,15 @@ gst_audio_decoder_set_output_format (GstAudioDecoder * dec, if (!caps) goto refuse_caps; + /* Only allow caps that are a subset of the template caps */ + templ_caps = gst_pad_get_pad_template_caps (dec->srcpad); + if (!gst_caps_is_subset (caps, templ_caps)) { + gst_caps_unref (caps); + gst_caps_unref (templ_caps); + goto refuse_caps; + } + gst_caps_unref (templ_caps); + /* adjust ts tracking to new sample rate */ old_rate = GST_AUDIO_INFO_RATE (&dec->priv->ctx.info); if (GST_CLOCK_TIME_IS_VALID (dec->priv->base_ts) && old_rate) { diff --git a/gst-libs/gst/audio/gstaudioencoder.c b/gst-libs/gst/audio/gstaudioencoder.c index dc5d79e..689df06 100644 --- a/gst-libs/gst/audio/gstaudioencoder.c +++ b/gst-libs/gst/audio/gstaudioencoder.c @@ -2183,12 +2183,21 @@ gboolean gst_audio_encoder_set_output_format (GstAudioEncoder * enc, GstCaps * caps) { gboolean res = FALSE; + GstCaps *templ_caps; GST_DEBUG_OBJECT (enc, "Setting srcpad caps %" GST_PTR_FORMAT, caps); if (!gst_caps_is_fixed (caps)) goto refuse_caps; + /* Only allow caps that are a subset of the template caps */ + templ_caps = gst_pad_get_pad_template_caps (enc->srcpad); + if (!gst_caps_is_subset (caps, templ_caps)) { + gst_caps_unref (templ_caps); + goto refuse_caps; + } + gst_caps_unref (templ_caps); + res = gst_pad_set_caps (enc->srcpad, caps); done: