From f37fca4e002683df7393354a0d51a96abe4c3d38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Mon, 12 Nov 2012 10:10:15 +0100 Subject: [PATCH] pngdec: Keep the input state in reset() It's still valid after a flush and we might not get a new one. --- ext/libpng/gstpngdec.c | 55 ++++++++++++++++++++++++------------------ 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/ext/libpng/gstpngdec.c b/ext/libpng/gstpngdec.c index d6e53ed80e..b03ad83633 100644 --- a/ext/libpng/gstpngdec.c +++ b/ext/libpng/gstpngdec.c @@ -417,17 +417,6 @@ gst_pngdec_decide_allocation (GstVideoDecoder * bdec, GstQuery * query) return TRUE; } - -/* Clean up the libpng structures */ -static gboolean -gst_pngdec_reset (GstVideoDecoder * decoder, gboolean hard) -{ - gst_pngdec_stop (decoder); - gst_pngdec_start (decoder); - - return TRUE; -} - static gboolean gst_pngdec_libpng_init (GstPngDec * pngdec) { @@ -476,20 +465,10 @@ endinfo_failed: } } -static gboolean -gst_pngdec_start (GstVideoDecoder * decoder) + +static void +gst_pngdec_libpng_clear (GstPngDec * pngdec) { - GstPngDec *pngdec = (GstPngDec *) decoder; - - gst_pngdec_libpng_init (pngdec); - - return TRUE; -} - -static gboolean -gst_pngdec_stop (GstVideoDecoder * decoder) -{ - GstPngDec *pngdec = (GstPngDec *) decoder; png_infopp info = NULL, endinfo = NULL; GST_LOG ("cleaning up libpng structures"); @@ -510,6 +489,24 @@ gst_pngdec_stop (GstVideoDecoder * decoder) } pngdec->color_type = -1; +} + +static gboolean +gst_pngdec_start (GstVideoDecoder * decoder) +{ + GstPngDec *pngdec = (GstPngDec *) decoder; + + gst_pngdec_libpng_init (pngdec); + + return TRUE; +} + +static gboolean +gst_pngdec_stop (GstVideoDecoder * decoder) +{ + GstPngDec *pngdec = (GstPngDec *) decoder; + + gst_pngdec_libpng_clear (pngdec); if (pngdec->input_state) { gst_video_codec_state_unref (pngdec->input_state); @@ -522,3 +519,13 @@ gst_pngdec_stop (GstVideoDecoder * decoder) return TRUE; } + +/* Clean up the libpng structures */ +static gboolean +gst_pngdec_reset (GstVideoDecoder * decoder, gboolean hard) +{ + gst_pngdec_libpng_clear (decoder); + gst_pngdec_libpng_init (decoder); + + return TRUE; +}