From 775aa4100bca27a3757b7b320a36bff370f8f665 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Thu, 25 Jul 2013 13:29:22 +0200 Subject: [PATCH] theoradec: Clean up handling of reset/flushing/start/stop --- ext/theora/gsttheoradec.c | 60 ++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 36 deletions(-) diff --git a/ext/theora/gsttheoradec.c b/ext/theora/gsttheoradec.c index 30f1db4c80..a68bef7ec3 100644 --- a/ext/theora/gsttheoradec.c +++ b/ext/theora/gsttheoradec.c @@ -99,7 +99,6 @@ static void theora_dec_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); static gboolean theora_dec_start (GstVideoDecoder * decoder); -static gboolean theora_dec_stop (GstVideoDecoder * decoder); static gboolean theora_dec_set_format (GstVideoDecoder * decoder, GstVideoCodecState * state); static gboolean theora_dec_reset (GstVideoDecoder * decoder, gboolean hard); @@ -184,7 +183,6 @@ gst_theora_dec_class_init (GstTheoraDecClass * klass) "Benjamin Otte , Wim Taymans "); video_decoder_class->start = GST_DEBUG_FUNCPTR (theora_dec_start); - video_decoder_class->stop = GST_DEBUG_FUNCPTR (theora_dec_stop); video_decoder_class->reset = GST_DEBUG_FUNCPTR (theora_dec_reset); video_decoder_class->set_format = GST_DEBUG_FUNCPTR (theora_dec_set_format); video_decoder_class->parse = GST_DEBUG_FUNCPTR (theora_dec_parse); @@ -209,61 +207,51 @@ gst_theora_dec_init (GstTheoraDec * dec) gst_video_decoder_set_packetized (GST_VIDEO_DECODER (dec), FALSE); } -static void -gst_theora_dec_reset (GstTheoraDec * dec) -{ - dec->need_keyframe = TRUE; - dec->can_crop = FALSE; -} - static gboolean theora_dec_start (GstVideoDecoder * decoder) { GstTheoraDec *dec = GST_THEORA_DEC (decoder); GST_DEBUG_OBJECT (dec, "start"); - th_info_clear (&dec->info); - th_comment_clear (&dec->comment); GST_DEBUG_OBJECT (dec, "Setting have_header to FALSE"); dec->have_header = FALSE; - gst_theora_dec_reset (dec); return TRUE; } static gboolean -theora_dec_stop (GstVideoDecoder * decoder) +theora_dec_reset (GstVideoDecoder * decoder, gboolean hard) { GstTheoraDec *dec = GST_THEORA_DEC (decoder); - GST_DEBUG_OBJECT (dec, "stop"); - th_info_clear (&dec->info); - th_comment_clear (&dec->comment); - th_setup_free (dec->setup); - dec->setup = NULL; - th_decode_free (dec->decoder); - dec->decoder = NULL; - gst_theora_dec_reset (dec); - if (dec->input_state) { - gst_video_codec_state_unref (dec->input_state); - dec->input_state = NULL; - } - if (dec->output_state) { - gst_video_codec_state_unref (dec->output_state); - dec->output_state = NULL; + dec->need_keyframe = TRUE; + + if (hard) { + th_info_clear (&dec->info); + th_comment_clear (&dec->comment); + if (dec->setup) { + th_setup_free (dec->setup); + dec->setup = NULL; + } + if (dec->decoder) { + th_decode_free (dec->decoder); + dec->decoder = NULL; + } + + if (dec->input_state) { + gst_video_codec_state_unref (dec->input_state); + dec->input_state = NULL; + } + if (dec->output_state) { + gst_video_codec_state_unref (dec->output_state); + dec->output_state = NULL; + } + dec->can_crop = FALSE; } return TRUE; } -/* FIXME : Do we want to handle hard resets differently ? */ -static gboolean -theora_dec_reset (GstVideoDecoder * bdec, gboolean hard) -{ - gst_theora_dec_reset (GST_THEORA_DEC (bdec)); - return TRUE; -} - static GstFlowReturn theora_dec_parse (GstVideoDecoder * decoder, GstVideoCodecFrame * frame, GstAdapter * adapter, gboolean at_eos)