diff --git a/gst/rawparse/gstrawparse.c b/gst/rawparse/gstrawparse.c index 5f5925a169..198bed52b1 100644 --- a/gst/rawparse/gstrawparse.c +++ b/gst/rawparse/gstrawparse.c @@ -287,7 +287,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"); @@ -306,8 +306,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;