avidemux: push mode; handle 0-size data chunks
authorMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
Thu, 22 Jul 2010 09:46:35 +0000 (11:46 +0200)
committerMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
Thu, 22 Jul 2010 09:46:51 +0000 (11:46 +0200)
Fixes #618535.

gst/avi/gstavidemux.c

index a62afb9..389649a 100644 (file)
@@ -4873,9 +4873,13 @@ gst_avi_demux_stream_data (GstAviDemux * avi)
        * through the whole file */
       if (avi->abort_buffering) {
         avi->abort_buffering = FALSE;
-        gst_adapter_flush (avi->adapter, 8);
+        if (size) {
+          gst_adapter_flush (avi->adapter, 8);
+          return GST_FLOW_OK;
+        }
+      } else {
+        return GST_FLOW_OK;
       }
-      return GST_FLOW_OK;
     }
     GST_DEBUG ("chunk ID %" GST_FOURCC_FORMAT ", size %u",
         GST_FOURCC_ARGS (tag), size);
@@ -4904,9 +4908,13 @@ gst_avi_demux_stream_data (GstAviDemux * avi)
       if (saw_desired_kf) {
         gst_adapter_flush (avi->adapter, 8);
         /* get buffer */
-        buf = gst_adapter_take_buffer (avi->adapter, GST_ROUND_UP_2 (size));
-        /* patch the size */
-        GST_BUFFER_SIZE (buf) = size;
+        if (size) {
+          buf = gst_adapter_take_buffer (avi->adapter, GST_ROUND_UP_2 (size));
+          /* patch the size */
+          GST_BUFFER_SIZE (buf) = size;
+        } else {
+          buf = NULL;
+        }
       } else {
         GST_DEBUG_OBJECT (avi,
             "Desired keyframe not yet reached, flushing chunk");
@@ -4980,6 +4988,7 @@ gst_avi_demux_stream_data (GstAviDemux * avi)
             stream->discont = FALSE;
           }
           res = gst_pad_push (stream->pad, buf);
+          buf = NULL;
 
           /* combine flows */
           res = gst_avi_demux_combine_flows (avi, stream, res);