mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
avidec: fix duration and bitrate of truncated files
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
4d16ba2dd8
commit
8d0da20ca6
@ -62,6 +62,7 @@ typedef struct {
|
||||
int64_t riff_end;
|
||||
int64_t movi_end;
|
||||
int64_t fsize;
|
||||
int64_t io_fsize;
|
||||
int64_t movi_list;
|
||||
int64_t last_pkt_pos;
|
||||
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);
|
||||
|
||||
avi->fsize = avio_size(pb);
|
||||
avi->io_fsize = avi->fsize = avio_size(pb);
|
||||
if(avi->fsize<=0 || avi->fsize < 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:
|
||||
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;
|
||||
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;
|
||||
avio_skip(pb, size - 12 * 4);
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user