You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-15 14:13:16 +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:
@@ -1074,6 +1074,7 @@ static int matroska_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
|||||||
MatroskaTrack *tracks;
|
MatroskaTrack *tracks;
|
||||||
EbmlList *index_list;
|
EbmlList *index_list;
|
||||||
MatroskaIndex *index;
|
MatroskaIndex *index;
|
||||||
|
int index_scale = 1;
|
||||||
Ebml ebml = { 0 };
|
Ebml ebml = { 0 };
|
||||||
AVStream *st;
|
AVStream *st;
|
||||||
int i, j;
|
int i, j;
|
||||||
@@ -1369,6 +1370,11 @@ static int matroska_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
|||||||
|
|
||||||
index_list = &matroska->index;
|
index_list = &matroska->index;
|
||||||
index = index_list->elem;
|
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++) {
|
for (i=0; i<index_list->nb_elem; i++) {
|
||||||
EbmlList *pos_list = &index[i].pos;
|
EbmlList *pos_list = &index[i].pos;
|
||||||
MatroskaIndexPos *pos = pos_list->elem;
|
MatroskaIndexPos *pos = pos_list->elem;
|
||||||
@@ -1378,7 +1384,8 @@ static int matroska_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
|||||||
if (track && track->stream)
|
if (track && track->stream)
|
||||||
av_add_index_entry(track->stream,
|
av_add_index_entry(track->stream,
|
||||||
pos[j].pos + matroska->segment_start,
|
pos[j].pos + matroska->segment_start,
|
||||||
index[i].time, 0, 0, AVINDEX_KEYFRAME);
|
index[i].time/index_scale, 0, 0,
|
||||||
|
AVINDEX_KEYFRAME);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user