matroskaparse: don't error out if there's not enough data in the adapter
authorTim-Philipp Müller <tim@centricular.com>
Sat, 28 Jun 2014 16:37:23 +0000 (17:37 +0100)
committerTim-Philipp Müller <tim@centricular.com>
Sat, 28 Jun 2014 16:39:36 +0000 (17:39 +0100)
gst_matroska_parse_take() would return FLOW_ERROR instead of
FLOW_EOS in case there's less data in the adapter than requested,
because buffer is NULL in that case which triggers the error
code path. This made the unit test fail (occasionally at least,
because of a bug in the unit test there's a race and it would
happen only sporadically).

gst/matroska/matroska-parse.c

index 4d3cb42..1eeef5c 100644 (file)
@@ -2274,10 +2274,10 @@ gst_matroska_parse_take (GstMatroskaParse * parse, guint64 bytes,
     ret = GST_FLOW_ERROR;
     goto exit;
   }
-  if (gst_adapter_available (parse->common.adapter) >= bytes)
-    buffer = gst_adapter_take_buffer (parse->common.adapter, bytes);
-  else
-    ret = GST_FLOW_EOS;
+  if (gst_adapter_available (parse->common.adapter) < bytes)
+    return GST_FLOW_EOS;
+
+  buffer = gst_adapter_take_buffer (parse->common.adapter, bytes);
   if (G_LIKELY (buffer)) {
     gst_ebml_read_init (ebml, GST_ELEMENT_CAST (parse), buffer,
         parse->common.offset);
@@ -2286,6 +2286,7 @@ gst_matroska_parse_take (GstMatroskaParse * parse, guint64 bytes,
     ret = GST_FLOW_ERROR;
   }
 exit:
+
   return ret;
 }