summaryrefslogtreecommitdiffstats
path: root/gst
diff options
context:
space:
mode:
Diffstat (limited to 'gst')
-rw-r--r--gst/avi/gstavidemux.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/gst/avi/gstavidemux.c b/gst/avi/gstavidemux.c
index 1c03ef2c..4061d096 100644
--- a/gst/avi/gstavidemux.c
+++ b/gst/avi/gstavidemux.c
@@ -1065,6 +1065,9 @@ gst_avi_demux_stream_index (GstAviDemux * avi)
entry.size = GUINT32_FROM_LE (_entry->size);
target = &avi->index_entries[i];
+ if (entry.id == GST_RIFF_rec)
+ continue;
+
stream_nr = CHUNKID_TO_STREAMNR (entry.id);
if (stream_nr >= avi->num_streams || stream_nr < 0) {
g_warning ("Index entry %d has invalid stream nr %d", i, stream_nr);
@@ -1388,6 +1391,20 @@ gst_avi_demux_stream_data (GstAviDemux * avi)
/* And then, we get the data */
if (!(tag = gst_riff_peek_tag (riff, NULL)))
return FALSE;
+
+ /* Support for rec-list files */
+ if (tag == GST_RIFF_TAG_LIST) {
+ if (!(tag = gst_riff_peek_list (riff)))
+ return FALSE;
+ if (tag == GST_RIFF_rec) {
+ /* Simply skip the list */
+ if (!gst_riff_read_list (riff, &tag))
+ return FALSE;
+ if (!(tag = gst_riff_peek_tag (riff, NULL)))
+ return FALSE;
+ }
+ }
+
stream_nr = CHUNKID_TO_STREAMNR (tag);
if (stream_nr < 0 || stream_nr >= avi->num_streams) {
/* recoverable */