|
|
@ -62,6 +62,7 @@ typedef struct { |
|
|
|
int64_t riff_end; |
|
|
|
int64_t riff_end; |
|
|
|
int64_t movi_end; |
|
|
|
int64_t movi_end; |
|
|
|
int64_t fsize; |
|
|
|
int64_t fsize; |
|
|
|
|
|
|
|
int64_t io_fsize; |
|
|
|
int64_t movi_list; |
|
|
|
int64_t movi_list; |
|
|
|
int64_t last_pkt_pos; |
|
|
|
int64_t last_pkt_pos; |
|
|
|
int index_loaded; |
|
|
|
int index_loaded; |
|
|
@ -373,7 +374,7 @@ static int avi_read_header(AVFormatContext *s) |
|
|
|
|
|
|
|
|
|
|
|
av_log(avi, AV_LOG_DEBUG, "use odml:%d\n", avi->use_odml); |
|
|
|
av_log(avi, AV_LOG_DEBUG, "use odml:%d\n", avi->use_odml); |
|
|
|
|
|
|
|
|
|
|
|
avi->fsize = avio_size(pb); |
|
|
|
avi->io_fsize = avi->fsize = avio_size(pb); |
|
|
|
if(avi->fsize<=0 || avi->fsize < avi->riff_end) |
|
|
|
if(avi->fsize<=0 || avi->fsize < avi->riff_end) |
|
|
|
avi->fsize= avi->riff_end == 8 ? INT64_MAX : avi->riff_end; |
|
|
|
avi->fsize= avi->riff_end == 8 ? INT64_MAX : avi->riff_end; |
|
|
|
|
|
|
|
|
|
|
@ -569,8 +570,13 @@ static int avi_read_header(AVFormatContext *s) |
|
|
|
default: |
|
|
|
default: |
|
|
|
av_log(s, AV_LOG_INFO, "unknown stream type %X\n", tag1); |
|
|
|
av_log(s, AV_LOG_INFO, "unknown stream type %X\n", tag1); |
|
|
|
} |
|
|
|
} |
|
|
|
if(ast->sample_size == 0) |
|
|
|
if(ast->sample_size == 0) { |
|
|
|
st->duration = st->nb_frames; |
|
|
|
st->duration = st->nb_frames; |
|
|
|
|
|
|
|
if (st->duration > 0 && avi->io_fsize > 0 && avi->riff_end > avi->io_fsize) { |
|
|
|
|
|
|
|
av_log(s, AV_LOG_DEBUG, "File is truncated adjusting duration\n"); |
|
|
|
|
|
|
|
st->duration = av_rescale(st->duration, avi->io_fsize, avi->riff_end); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
ast->frame_offset= ast->cum_len; |
|
|
|
ast->frame_offset= ast->cum_len; |
|
|
|
avio_skip(pb, size - 12 * 4); |
|
|
|
avio_skip(pb, size - 12 * 4); |
|
|
|
break; |
|
|
|
break; |
|
|
|