diff options
author | Edward Hervey <bilboed@bilboed.com> | 2006-05-27 13:11:37 +0000 |
---|---|---|
committer | Edward Hervey <bilboed@bilboed.com> | 2006-05-27 13:11:37 +0000 |
commit | fe03f3968ab0c9bd2319f4749c3dd7e0f1954640 (patch) | |
tree | c8b6f59ad489c2d1f627f5278dc67492a5e8b98c /ext/jpeg/gstjpegdec.c | |
parent | e93a10df4ac5ebae65e2b9221321eff96d1a99a7 (diff) |
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.
Diffstat (limited to 'ext/jpeg/gstjpegdec.c')
-rw-r--r-- | ext/jpeg/gstjpegdec.c | 25 |
1 files changed, 25 insertions, 0 deletions
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) { |