diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2014-10-22 14:43:50 +0200 |
---|---|---|
committer | Tim-Philipp Müller <tim@centricular.com> | 2014-10-24 22:11:29 +0100 |
commit | 621ae89215b1479d2d9d04a336a4adedb42ef659 (patch) | |
tree | 1973ee4d540313316b29af6616ead2b7f19f055b | |
parent | 5dfceb869039fc3c02ec23ef0ba3501252dae5f7 (diff) | |
download | gstreamer-plugins-bad-621ae89215b1479d2d9d04a336a4adedb42ef659.tar.gz |
rawparse: Don't try to retrieve 0 byte buffers from the adapter in multi-frame mode
-rw-r--r-- | gst/rawparse/gstrawparse.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/gst/rawparse/gstrawparse.c b/gst/rawparse/gstrawparse.c index f807d9eff..62275f984 100644 --- a/gst/rawparse/gstrawparse.c +++ b/gst/rawparse/gstrawparse.c @@ -291,7 +291,7 @@ gst_raw_parse_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer) GstRawParse *rp = GST_RAW_PARSE (parent); GstFlowReturn ret = GST_FLOW_OK; GstRawParseClass *rp_class = GST_RAW_PARSE_GET_CLASS (rp); - guint buffersize; + guint buffersize, available; if (G_UNLIKELY (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DISCONT))) { GST_DEBUG_OBJECT (rp, "received DISCONT buffer"); @@ -310,8 +310,12 @@ gst_raw_parse_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer) gst_adapter_push (rp->adapter, buffer); - if (rp_class->multiple_frames_per_buffer) { - buffersize = gst_adapter_available (rp->adapter); + available = gst_adapter_available (rp->adapter); + if (available == 0) { + ret = GST_FLOW_OK; + goto done; + } else if (rp_class->multiple_frames_per_buffer) { + buffersize = available; buffersize -= buffersize % rp->framesize; } else { buffersize = rp->framesize; |