mirror of
https://gitee.com/openharmony/third_party_ffmpeg
synced 2024-11-24 03:39:45 +00:00
avformat/mp3dec: offset seek index to end of id3v2 tag
The Xing index won't account for the id3 tag - it's relative to the headers. Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
2ddedfd39c
commit
8b76c0eb56
@ -106,7 +106,7 @@ static int mp3_read_probe(AVProbeData *p)
|
||||
//mpegps_mp3_unrecognized_format.mpg has max_frames=3
|
||||
}
|
||||
|
||||
static void read_xing_toc(AVFormatContext *s, int64_t filesize, int64_t duration)
|
||||
static void read_xing_toc(AVFormatContext *s, int64_t base, int64_t filesize, int64_t duration)
|
||||
{
|
||||
int i;
|
||||
MP3DecContext *mp3 = s->priv_data;
|
||||
@ -122,7 +122,7 @@ static void read_xing_toc(AVFormatContext *s, int64_t filesize, int64_t duration
|
||||
uint8_t b = avio_r8(s->pb);
|
||||
if (fill_index)
|
||||
av_add_index_entry(s->streams[0],
|
||||
av_rescale(b, filesize, 256),
|
||||
av_rescale(b, filesize, 256) + base,
|
||||
av_rescale(i, duration, XING_TOC_COUNT),
|
||||
0, 0, AVINDEX_KEYFRAME);
|
||||
}
|
||||
@ -130,7 +130,7 @@ static void read_xing_toc(AVFormatContext *s, int64_t filesize, int64_t duration
|
||||
mp3->xing_toc = 1;
|
||||
}
|
||||
|
||||
static void mp3_parse_info_tag(AVFormatContext *s, AVStream *st,
|
||||
static void mp3_parse_info_tag(AVFormatContext *s, AVStream *st, int64_t base,
|
||||
MPADecodeHeader *c, uint32_t spf)
|
||||
{
|
||||
#define LAST_BITS(k, n) ((k) & ((1 << (n)) - 1))
|
||||
@ -172,7 +172,7 @@ static void mp3_parse_info_tag(AVFormatContext *s, AVStream *st,
|
||||
}
|
||||
}
|
||||
if (v & XING_FLAG_TOC)
|
||||
read_xing_toc(s, mp3->header_filesize, av_rescale_q(mp3->frames,
|
||||
read_xing_toc(s, base, mp3->header_filesize, av_rescale_q(mp3->frames,
|
||||
(AVRational){spf, c->sample_rate},
|
||||
st->time_base));
|
||||
/* VBR quality */
|
||||
@ -310,7 +310,7 @@ static int mp3_parse_vbr_tags(AVFormatContext *s, AVStream *st, int64_t base)
|
||||
mp3->frames = 0;
|
||||
mp3->header_filesize = 0;
|
||||
|
||||
mp3_parse_info_tag(s, st, &c, spf);
|
||||
mp3_parse_info_tag(s, st, base, &c, spf);
|
||||
mp3_parse_vbri_tag(s, st, base);
|
||||
|
||||
if (!mp3->frames && !mp3->header_filesize)
|
||||
|
Loading…
Reference in New Issue
Block a user