summaryrefslogtreecommitdiffstats
path: root/gst/avi/gstavidemux.c
diff options
context:
space:
mode:
authorMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>2009-06-17 11:54:53 +0200
committerMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>2009-06-17 12:31:42 +0200
commit08c901956616f66d1e776322c4762300d6612c18 (patch)
tree6996c62f21e359c8ed3c841b595af676f872b81c /gst/avi/gstavidemux.c
parent71eb4a4dfadfffcae6cd24e2d38094d96c50df91 (diff)
avidemux: streaming mode; handle data chunks grouped in rec lists.
Fixes #567983.
Diffstat (limited to 'gst/avi/gstavidemux.c')
-rw-r--r--gst/avi/gstavidemux.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/gst/avi/gstavidemux.c b/gst/avi/gstavidemux.c
index 670da5ff..6ab073f3 100644
--- a/gst/avi/gstavidemux.c
+++ b/gst/avi/gstavidemux.c
@@ -4029,6 +4029,25 @@ gst_avi_demux_stream_data (GstAviDemux * avi)
GST_DEBUG ("Found index tag, stream done");
avi->have_eos = TRUE;
return GST_FLOW_UNEXPECTED;
+ } else if (tag == GST_RIFF_TAG_LIST) {
+ /* movi chunks might be grouped in rec list */
+ if (gst_adapter_available (avi->adapter) >= 12) {
+ GST_DEBUG ("Found LIST tag, skipping LIST header");
+ gst_adapter_flush (avi->adapter, 12);
+ continue;
+ }
+ return GST_FLOW_OK;
+ } else if (tag == GST_RIFF_TAG_JUNK) {
+ /* rec list might contain JUNK chunks */
+ GST_DEBUG ("Found JUNK tag");
+ if (gst_avi_demux_peek_chunk (avi, &tag, &size)) {
+ if ((size > 0) && (size != -1)) {
+ GST_DEBUG (" skipping %d bytes for now", size);
+ gst_adapter_flush (avi->adapter, 8 + size);
+ continue;
+ }
+ }
+ return GST_FLOW_OK;
} else {
GST_DEBUG ("No more stream chunks, send EOS");
avi->have_eos = TRUE;