From 506c9e2b5bbc50730b0083598b346b0fcc41ec78 Mon Sep 17 00:00:00 2001 From: Thiago Santos Date: Fri, 18 Mar 2016 20:00:52 -0300 Subject: [PATCH] vaapidecode: add stop function Clear any status on the current stream: stored frames, caps and decoder configuration https://bugzilla.gnome.org/show_bug.cgi?id=763460 --- gst/vaapi/gstvaapidecode.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/gst/vaapi/gstvaapidecode.c b/gst/vaapi/gstvaapidecode.c index eb25ec8a04..c3ac9b1ea1 100644 --- a/gst/vaapi/gstvaapidecode.c +++ b/gst/vaapi/gstvaapidecode.c @@ -937,8 +937,6 @@ gst_vaapidecode_finalize (GObject * object) { GstVaapiDecode *const decode = GST_VAAPIDECODE (object); - gst_caps_replace (&decode->sinkpad_caps, NULL); - gst_caps_replace (&decode->srcpad_caps, NULL); gst_caps_replace (&decode->allowed_caps, NULL); g_cond_clear (&decode->surface_ready); @@ -976,12 +974,25 @@ gst_vaapidecode_close (GstVideoDecoder * vdec) { GstVaapiDecode *const decode = GST_VAAPIDECODE (vdec); - gst_vaapi_decode_input_state_replace (decode, NULL); gst_vaapidecode_destroy (decode); gst_vaapi_plugin_base_close (GST_VAAPI_PLUGIN_BASE (decode)); return TRUE; } +static gboolean +gst_vaapidecode_stop (GstVideoDecoder * vdec) +{ + GstVaapiDecode *const decode = GST_VAAPIDECODE (vdec); + + gst_vaapidecode_purge (decode); + gst_vaapi_decode_input_state_replace (decode, NULL); + gst_vaapi_decoder_replace (&decode->decoder, NULL); + gst_caps_replace (&decode->decoder_caps, NULL); + gst_caps_replace (&decode->sinkpad_caps, NULL); + gst_caps_replace (&decode->srcpad_caps, NULL); + return TRUE; +} + static gboolean gst_vaapidecode_flush (GstVideoDecoder * vdec) { @@ -1235,6 +1246,7 @@ gst_vaapidecode_class_init (GstVaapiDecodeClass * klass) vdec_class->open = GST_DEBUG_FUNCPTR (gst_vaapidecode_open); vdec_class->close = GST_DEBUG_FUNCPTR (gst_vaapidecode_close); + vdec_class->stop = GST_DEBUG_FUNCPTR (gst_vaapidecode_stop); vdec_class->set_format = GST_DEBUG_FUNCPTR (gst_vaapidecode_set_format); vdec_class->flush = GST_DEBUG_FUNCPTR (gst_vaapidecode_flush); vdec_class->parse = GST_DEBUG_FUNCPTR (gst_vaapidecode_parse);