summaryrefslogtreecommitdiff
path: root/gst/vaapi
diff options
context:
space:
mode:
authorGwenole Beauchesne <gwenole.beauchesne@intel.com>2012-09-11 17:03:33 +0200
committerGwenole Beauchesne <gwenole.beauchesne@intel.com>2012-09-11 17:08:47 +0200
commit5549dbc3c058e7072a480db6d4efb17c595c8580 (patch)
treef50b0ec85add5125a50ca5e33a113cc7ffdbc86b /gst/vaapi
parent2b71db30598634dc17c3d45689a0f63528b3767c (diff)
vaapidecode: don't reset decoder if codec type is the same.
Reset, i.e. destroy then create, the decoder in _setcaps() handler only if the underlying codec type actually changed. This makes it possible to be more tolerant with certain MPEG-2 streams that get parsed to form caps that are compatible with the previous state but minor changes to "codec-data".
Diffstat (limited to 'gst/vaapi')
-rw-r--r--gst/vaapi/gstvaapidecode.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/gst/vaapi/gstvaapidecode.c b/gst/vaapi/gstvaapidecode.c
index d79eaa1c..1cc94c77 100644
--- a/gst/vaapi/gstvaapidecode.c
+++ b/gst/vaapi/gstvaapidecode.c
@@ -393,10 +393,16 @@ gst_vaapidecode_destroy(GstVaapiDecode *decode)
static gboolean
gst_vaapidecode_reset(GstVaapiDecode *decode, GstCaps *caps)
{
- if (decode->decoder &&
- decode->decoder_caps &&
- gst_caps_is_always_compatible(caps, decode->decoder_caps))
- return TRUE;
+ GstVaapiCodec codec;
+
+ /* Only reset decoder if codec type changed */
+ if (decode->decoder && decode->decoder_caps) {
+ if (gst_caps_is_always_compatible(caps, decode->decoder_caps))
+ return TRUE;
+ codec = gst_vaapi_codec_from_caps(caps);
+ if (codec == gst_vaapi_decoder_get_codec(decode->decoder))
+ return TRUE;
+ }
gst_vaapidecode_destroy(decode);
return gst_vaapidecode_create(decode, caps);