mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
fixing av sync in videotest.avi (index doesnt match chunks, header doesnt indicate that)
Originally committed as revision 5088 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
115e8ae577
commit
8945ebb9c1
@ -87,6 +87,7 @@ static int get_riff(AVIContext *avi, ByteIOContext *pb)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int read_braindead_odml_indx(AVFormatContext *s, int frame_num){
|
static int read_braindead_odml_indx(AVFormatContext *s, int frame_num){
|
||||||
|
AVIContext *avi = s->priv_data;
|
||||||
ByteIOContext *pb = &s->pb;
|
ByteIOContext *pb = &s->pb;
|
||||||
int longs_pre_entry= get_le16(pb);
|
int longs_pre_entry= get_le16(pb);
|
||||||
int index_sub_type = get_byte(pb);
|
int index_sub_type = get_byte(pb);
|
||||||
@ -98,6 +99,7 @@ static int read_braindead_odml_indx(AVFormatContext *s, int frame_num){
|
|||||||
AVStream *st;
|
AVStream *st;
|
||||||
AVIStream *ast;
|
AVIStream *ast;
|
||||||
int i;
|
int i;
|
||||||
|
int64_t last_pos= -1;
|
||||||
|
|
||||||
// av_log(s, AV_LOG_ERROR, "longs_pre_entry:%d index_type:%d entries_in_use:%d chunk_id:%X base:%Ld\n",
|
// av_log(s, AV_LOG_ERROR, "longs_pre_entry:%d index_type:%d entries_in_use:%d chunk_id:%X base:%Ld\n",
|
||||||
// longs_pre_entry,index_type, entries_in_use, chunk_id, base);
|
// longs_pre_entry,index_type, entries_in_use, chunk_id, base);
|
||||||
@ -125,12 +127,16 @@ static int read_braindead_odml_indx(AVFormatContext *s, int frame_num){
|
|||||||
len &= 0x7FFFFFFF;
|
len &= 0x7FFFFFFF;
|
||||||
|
|
||||||
//av_log(s, AV_LOG_ERROR, "pos:%Ld, len:%X\n", pos, len);
|
//av_log(s, AV_LOG_ERROR, "pos:%Ld, len:%X\n", pos, len);
|
||||||
|
if(last_pos == pos || pos == base - 8)
|
||||||
|
avi->non_interleaved= 1;
|
||||||
|
else
|
||||||
av_add_index_entry(st, pos, ast->cum_len, len, 0, key ? AVINDEX_KEYFRAME : 0);
|
av_add_index_entry(st, pos, ast->cum_len, len, 0, key ? AVINDEX_KEYFRAME : 0);
|
||||||
|
|
||||||
if(ast->sample_size)
|
if(ast->sample_size)
|
||||||
ast->cum_len += len / ast->sample_size;
|
ast->cum_len += len / ast->sample_size;
|
||||||
else
|
else
|
||||||
ast->cum_len ++;
|
ast->cum_len ++;
|
||||||
|
last_pos= pos;
|
||||||
}else{
|
}else{
|
||||||
int64_t offset= get_le64(pb);
|
int64_t offset= get_le64(pb);
|
||||||
int size = get_le32(pb);
|
int size = get_le32(pb);
|
||||||
|
Loading…
Reference in New Issue
Block a user