summaryrefslogtreecommitdiffstats
path: root/ext/jpeg/gstjpegdec.c
diff options
context:
space:
mode:
authorEdward Hervey <bilboed@bilboed.com>2006-05-27 13:11:37 +0000
committerEdward Hervey <bilboed@bilboed.com>2006-05-27 13:11:37 +0000
commitfe03f3968ab0c9bd2319f4749c3dd7e0f1954640 (patch)
treec8b6f59ad489c2d1f627f5278dc67492a5e8b98c /ext/jpeg/gstjpegdec.c
parente93a10df4ac5ebae65e2b9221321eff96d1a99a7 (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.c25
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)
{