mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2026-08-04 23:20:40 +00:00
avformat/mp3dec: read TOC even if not all needed information is available
This fixes hyothetical bugs with parsing of elements after the TOC Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
@@ -93,22 +93,24 @@ static void read_xing_toc(AVFormatContext *s, int64_t filesize, int64_t duration
|
||||
{
|
||||
int i;
|
||||
MP3DecContext *mp3 = s->priv_data;
|
||||
int fill_index = mp3->usetoc && duration > 0;
|
||||
|
||||
if (!filesize &&
|
||||
!(filesize = avio_size(s->pb))) {
|
||||
av_log(s, AV_LOG_WARNING, "Cannot determine file size, skipping TOC table.\n");
|
||||
return;
|
||||
fill_index = 0;
|
||||
}
|
||||
|
||||
for (i = 0; i < XING_TOC_COUNT; i++) {
|
||||
uint8_t b = avio_r8(s->pb);
|
||||
if (mp3->usetoc)
|
||||
if (fill_index)
|
||||
av_add_index_entry(s->streams[0],
|
||||
av_rescale(b, filesize, 256),
|
||||
av_rescale(i, duration, XING_TOC_COUNT),
|
||||
0, 0, AVINDEX_KEYFRAME);
|
||||
}
|
||||
mp3->xing_toc = 1;
|
||||
if (fill_index)
|
||||
mp3->xing_toc = 1;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -146,7 +148,7 @@ static int mp3_parse_vbr_tags(AVFormatContext *s, AVStream *st, int64_t base)
|
||||
frames = avio_rb32(s->pb);
|
||||
if(v & XING_FLAG_SIZE)
|
||||
size = avio_rb32(s->pb);
|
||||
if (v & XING_FLAG_TOC && frames)
|
||||
if (v & XING_FLAG_TOC)
|
||||
read_xing_toc(s, size, av_rescale_q(frames, (AVRational){spf, c.sample_rate},
|
||||
st->time_base));
|
||||
if(v & 8)
|
||||
|
||||
Reference in New Issue
Block a user