baseparse: Don't forget error returns when processing more
authorJan Schmidt <jan@centricular.com>
Fri, 17 Mar 2017 11:32:19 +0000 (22:32 +1100)
committerJan Schmidt <jan@centricular.com>
Wed, 22 Mar 2017 00:42:53 +0000 (11:42 +1100)
If parsing returns a non-OK flow return in the middle
of processing an input buffer, don't overwrite that
if a later return is OK again - the subclass might
return not-linked in the middle, and then discard
subsequent data without pushing while returning OK.

A later success doesn't invalidate the earlier failure,
but we should continue processing after not-linked, so
as to keep parse state consistent.

https://bugzilla.gnome.org/show_bug.cgi?id=779831

libs/gst/base/gstbaseparse.c

index 7386168..df67dd0 100644 (file)
@@ -3237,7 +3237,8 @@ gst_base_parse_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
       ret = old_ret;
       goto done;
     }
-    old_ret = ret;
+    if (old_ret == GST_FLOW_OK)
+      old_ret = ret;
   }
 
 done: