baseparse: prevent infinite loop when draining

This commit is contained in:
Mark Nauwelaerts 2009-08-07 13:07:17 +02:00 committed by Tim-Philipp Müller
parent 569064282c
commit d6d066892e

View file

@ -872,6 +872,8 @@ gst_base_parse_drain (GstBaseParse * parse)
{ {
guint avail; guint avail;
GST_DEBUG_OBJECT (parse, "draining");
for (;;) { for (;;) {
avail = gst_adapter_available (parse->adapter); avail = gst_adapter_available (parse->adapter);
if (!avail) if (!avail)
@ -881,6 +883,12 @@ gst_base_parse_drain (GstBaseParse * parse)
if (gst_base_parse_chain (parse->sinkpad, NULL) != GST_FLOW_OK) { if (gst_base_parse_chain (parse->sinkpad, NULL) != GST_FLOW_OK) {
break; break;
} }
/* nothing changed, maybe due to truncated frame; break infinite loop */
if (avail == gst_adapter_available (parse->adapter)) {
GST_DEBUG_OBJECT (parse, "no change during draining; flushing");
gst_adapter_clear (parse->adapter);
}
} }
} }