[FFmpeg-cvslog] r15829 - trunk/libavformat/matroskadec.c

aurel subversion
Sat Nov 15 16:34:51 CET 2008


Author: aurel
Date: Sat Nov 15 16:34:51 2008
New Revision: 15829

Log:
matroskadec: fix index timestamps for some broken files
fix issue697


Modified:
   trunk/libavformat/matroskadec.c

Modified: trunk/libavformat/matroskadec.c
==============================================================================
--- trunk/libavformat/matroskadec.c	(original)
+++ trunk/libavformat/matroskadec.c	Sat Nov 15 16:34:51 2008
@@ -1074,6 +1074,7 @@ static int matroska_read_header(AVFormat
     MatroskaTrack *tracks;
     EbmlList *index_list;
     MatroskaIndex *index;
+    int index_scale = 1;
     Ebml ebml = { 0 };
     AVStream *st;
     int i, j;
@@ -1369,6 +1370,11 @@ static int matroska_read_header(AVFormat
 
     index_list = &matroska->index;
     index = index_list->elem;
+    if (index_list->nb_elem
+        && index[0].time > 100000000000000/matroska->time_scale) {
+        av_log(matroska->ctx, AV_LOG_WARNING, "Working around broken index.\n");
+        index_scale = matroska->time_scale;
+    }
     for (i=0; i<index_list->nb_elem; i++) {
         EbmlList *pos_list = &index[i].pos;
         MatroskaIndexPos *pos = pos_list->elem;
@@ -1378,7 +1384,8 @@ static int matroska_read_header(AVFormat
             if (track && track->stream)
                 av_add_index_entry(track->stream,
                                    pos[j].pos + matroska->segment_start,
-                                   index[i].time, 0, 0, AVINDEX_KEYFRAME);
+                                   index[i].time/index_scale, 0, 0,
+                                   AVINDEX_KEYFRAME);
         }
     }
 




More information about the ffmpeg-cvslog mailing list