changeset 3922:56dc585dcda4 libavformat

matroskadec: simplify, first_timecode is already in the index no need to duplicate it
author aurel
date Fri, 12 Sep 2008 00:06:06 +0000
parents 6339a1e029de
children 83e51bcb03c2
files matroskadec.c
diffstat 1 files changed, 5 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/matroskadec.c	Thu Sep 11 22:42:17 2008 +0000
+++ b/matroskadec.c	Fri Sep 12 00:06:06 2008 +0000
@@ -139,7 +139,6 @@
     EbmlList encodings;
 
     AVStream *stream;
-    int64_t first_timecode;
     int64_t end_timecode;
 } MatroskaTrack;
 
@@ -1182,7 +1181,6 @@
         st = track->stream = av_new_stream(s, 0);
         if (st == NULL)
             return AVERROR(ENOMEM);
-        track->first_timecode = AV_NOPTS_VALUE;
 
         if (!strcmp(track->codec_id, "V_MS/VFW/FOURCC")
             && track->codec_priv.size >= 40
@@ -1468,11 +1466,8 @@
         if (track->type == MATROSKA_TRACK_TYPE_SUBTITLE
             && timecode < track->end_timecode)
             is_keyframe = 0;  /* overlapping subtitles are not key frame */
-        if (is_keyframe) {
+        if (is_keyframe)
             av_add_index_entry(st, cluster_pos, timecode, 0,0,AVINDEX_KEYFRAME);
-            if (track->first_timecode == AV_NOPTS_VALUE)
-                track->first_timecode = timecode;
-        }
         track->end_timecode = FFMAX(track->end_timecode, timecode+duration);
     }
 
@@ -1697,19 +1692,13 @@
     MatroskaTrack *tracks = matroska->tracks.elem;
     AVStream *st = s->streams[stream_index];
     int i, index, index_sub, index_min;
-    int64_t first_timecode = 0;
 
-    for (i=0; i < matroska->tracks.nb_elem; i++)
-        if (tracks[i].stream->index == stream_index &&
-            tracks[i].first_timecode != AV_NOPTS_VALUE)
-            first_timecode = tracks[i].first_timecode;
-
-    if (timestamp < first_timecode)
-        timestamp = first_timecode;
+    if (!st->nb_index_entries)
+        return 0;
+    timestamp = FFMAX(timestamp, st->index_entries[0].timestamp);
 
     if ((index = av_index_search_timestamp(st, timestamp, flags)) < 0) {
-        if (st->nb_index_entries)
-            url_fseek(s->pb, st->index_entries[st->nb_index_entries-1].pos, SEEK_SET);
+        url_fseek(s->pb, st->index_entries[st->nb_index_entries-1].pos, SEEK_SET);
         while ((index = av_index_search_timestamp(st, timestamp, flags)) < 0) {
             matroska_clear_queue(matroska);
             if (matroska_parse_cluster(matroska) < 0)