mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
matroskadec: fix index timestamps for some broken files
fix issue697 Originally committed as revision 15829 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
6ff1f61530
commit
8f569ed08f
@ -1074,6 +1074,7 @@ static int matroska_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
||||
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(AVFormatContext *s, AVFormatParameters *ap)
|
||||
|
||||
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(AVFormatContext *s, AVFormatParameters *ap)
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user