static gboolean gst_vaapidecode_reset(GstVaapiDecode *decode, GstCaps *caps) { 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); }
static gboolean gst_vaapidecode_reset_full (GstVaapiDecode * decode, GstCaps * caps, gboolean hard) { GstVaapiCodec codec; /* Reset tracked frame size */ decode->current_frame_size = 0; if (!hard && 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); }