summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@gmail.com>2002-06-13 18:17:23 +0000
committerWim Taymans <wim.taymans@gmail.com>2002-06-13 18:17:23 +0000
commit98ae5cb27092b0911c411564e6cbde2babb95309 (patch)
tree10713d48e720d4db770e3fee0057f6ae122a32a9
parent514729bbba884d74d2fd89a41876e0b4f95f4c6d (diff)
Ignore bogus index entries
Original commit message from CVS: Ignore bogus index entries Assume all audio frames are keyframes
-rw-r--r--gst/avi/gstavidemux.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/gst/avi/gstavidemux.c b/gst/avi/gstavidemux.c
index 257ca13f..34fed011 100644
--- a/gst/avi/gstavidemux.c
+++ b/gst/avi/gstavidemux.c
@@ -602,7 +602,7 @@ gst_avi_demux_strf_iavs (GstAviDemux *avi_demux)
static void
gst_avi_debug_entry (const gchar *prefix, gst_avi_index_entry *entry)
{
- GST_DEBUG (0, "%s: %05d %d %08llx %05d %08lld %08x %08x (%d) %08x", prefix, entry->index_nr, entry->stream_nr,
+ GST_DEBUG (0, "%s: %05d %d %08llx %05d %14lld %08x %08x (%d) %08x", prefix, entry->index_nr, entry->stream_nr,
entry->bytes_before, entry->frames_before, entry->ts, entry->flags, entry->offset,
entry->offset, entry->size);
}
@@ -664,6 +664,11 @@ gst_avi_demux_parse_index (GstAviDemux *avi_demux,
GstFormat format;
stream_nr = CHUNKID_TO_STREAMNR (entry[i].id);
+ if (stream_nr > avi_demux->num_streams || stream_nr < 0) {
+ avi_demux->index_entries[i].stream_nr = -1;
+ continue;
+ }
+
target->stream_nr = stream_nr;
stream = &avi_demux->stream[stream_nr];
@@ -671,12 +676,15 @@ gst_avi_demux_parse_index (GstAviDemux *avi_demux,
target->flags = entry[i].flags;
target->size = entry[i].size;
target->offset = entry[i].offset;
-
+
target->bytes_before = stream->total_bytes;
target->frames_before = stream->total_frames;
format = GST_FORMAT_TIME;
if (stream->strh.type == GST_RIFF_FCC_auds) {
+ /* all audio frames are keyframes */
+ target->flags |= GST_RIFF_IF_KEYFRAME;
+
gst_pad_convert (stream->pad, GST_FORMAT_BYTES, stream->total_bytes,
&format, &target->ts);
}
@@ -1019,7 +1027,7 @@ gst_avi_demux_handle_sink_event (GstAviDemux *avi_demux)
GST_DEBUG (GST_CAT_EVENT, "sending discont on %d %lld + %lld = %lld", i,
avi_demux->last_seek, stream->delay, avi_demux->last_seek + stream->delay);
event = gst_event_new_discontinuous (FALSE, GST_FORMAT_TIME,
- avi_demux->last_seek + stream->delay, NULL);
+ avi_demux->last_seek + stream->delay , NULL);
gst_pad_push (stream->pad, GST_BUFFER (event));
}
break;