changeset 4027:11fbf47f3e16 libavformat

matroskadec: fix index timestamps for some broken files fix issue697
author aurel
date Sat, 15 Nov 2008 15:34:51 +0000
parents bd11db44dfba
children 7d6ed3692203
files matroskadec.c
diffstat 1 files changed, 8 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/matroskadec.c	Sat Nov 15 14:44:48 2008 +0000
+++ b/matroskadec.c	Sat Nov 15 15:34:51 2008 +0000
@@ -1074,6 +1074,7 @@
     MatroskaTrack *tracks;
     EbmlList *index_list;
     MatroskaIndex *index;
+    int index_scale = 1;
     Ebml ebml = { 0 };
     AVStream *st;
     int i, j;
@@ -1369,6 +1370,11 @@
 
     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 @@
             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);
         }
     }