From fe03f3968ab0c9bd2319f4749c3dd7e0f1954640 Mon Sep 17 00:00:00 2001 From: Edward Hervey Date: Sat, 27 May 2006 13:11:37 +0000 Subject: ext/jpeg/gstjpegdec.c: Abort decompression when receiving FLUSH_STOP. This should avoid issues when interrupting deco... Original commit message from CVS: * ext/jpeg/gstjpegdec.c: (gst_jpeg_dec_init), (gst_jpeg_dec_sink_event): Abort decompression when receiving FLUSH_STOP. This should avoid issues when interrupting decoding with flushes. --- ChangeLog | 7 +++++++ ext/jpeg/gstjpegdec.c | 25 +++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/ChangeLog b/ChangeLog index e553e965..ed1b87ae 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2006-05-27 Edward Hervey + + * ext/jpeg/gstjpegdec.c: (gst_jpeg_dec_init), + (gst_jpeg_dec_sink_event): + Abort decompression when receiving FLUSH_STOP. This should avoid + issues when interrupting decoding with flushes. + 2006-05-27 Tim-Philipp Müller * ext/flac/gstflac.c: diff --git a/ext/jpeg/gstjpegdec.c b/ext/jpeg/gstjpegdec.c index c74f334c..ca42dc7c 100644 --- a/ext/jpeg/gstjpegdec.c +++ b/ext/jpeg/gstjpegdec.c @@ -79,6 +79,7 @@ static void gst_jpeg_dec_init (GstJpegDec * jpegdec); static GstFlowReturn gst_jpeg_dec_chain (GstPad * pad, GstBuffer * buffer); static gboolean gst_jpeg_dec_setcaps (GstPad * pad, GstCaps * caps); +static gboolean gst_jpeg_dec_sink_event (GstPad * pad, GstEvent * event); static GstStateChangeReturn gst_jpeg_dec_change_state (GstElement * element, GstStateChange transition); @@ -238,6 +239,8 @@ gst_jpeg_dec_init (GstJpegDec * dec) GST_DEBUG_FUNCPTR (gst_jpeg_dec_setcaps)); gst_pad_set_chain_function (dec->sinkpad, GST_DEBUG_FUNCPTR (gst_jpeg_dec_chain)); + gst_pad_set_event_function (dec->sinkpad, + GST_DEBUG_FUNCPTR (gst_jpeg_dec_sink_event)); dec->srcpad = gst_pad_new_from_static_template (&gst_jpeg_dec_src_pad_template, "src"); @@ -970,6 +973,28 @@ alloc_failed: } } +static gboolean +gst_jpeg_dec_sink_event (GstPad * pad, GstEvent * event) +{ + gboolean ret = TRUE; + GstJpegDec *dec = GST_JPEG_DEC (GST_OBJECT_PARENT (pad)); + + GST_DEBUG_OBJECT (dec, "event : %s", GST_EVENT_TYPE_NAME (event)); + + switch (GST_EVENT_TYPE (event)) { + case GST_EVENT_FLUSH_STOP: + GST_DEBUG_OBJECT (dec, "Aborting decompress"); + jpeg_abort_decompress (&dec->cinfo); + break; + default: + break; + } + + ret = gst_pad_push_event (dec->srcpad, event); + + return ret; +} + static GstStateChangeReturn gst_jpeg_dec_change_state (GstElement * element, GstStateChange transition) { -- cgit