mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-04-14 00:58:38 +02:00
add support for reading duration from VBRI-tag in mp3 files
Originally committed as revision 10851 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
3a1d358825
commit
8862fb41e0
@ -426,9 +426,9 @@ static int mp3_read_probe(AVProbeData *p)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Try to extract a xing tag from the stream and if found, decode it
|
* Try to find Xing/Info/VBRI tags and compute duration from info therein
|
||||||
*/
|
*/
|
||||||
static void mp3_parse_xing(AVFormatContext *s, AVStream *st)
|
static void mp3_parse_vbr_tags(AVFormatContext *s, AVStream *st, offset_t base)
|
||||||
{
|
{
|
||||||
uint32_t v, spf;
|
uint32_t v, spf;
|
||||||
int frames = -1; /* Total number of frames in file */
|
int frames = -1; /* Total number of frames in file */
|
||||||
@ -448,6 +448,18 @@ static void mp3_parse_xing(AVFormatContext *s, AVStream *st)
|
|||||||
frames = get_be32(&s->pb);
|
frames = get_be32(&s->pb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Check for VBRI tag (always 32 bytes after end of mpegaudio header) */
|
||||||
|
url_fseek(&s->pb, base + 4 + 32, SEEK_SET);
|
||||||
|
v = get_be32(&s->pb);
|
||||||
|
if(v == MKBETAG('V', 'B', 'R', 'I')) {
|
||||||
|
/* Check tag version */
|
||||||
|
if(get_be16(&s->pb) == 1) {
|
||||||
|
/* skip delay, quality and total bytes */
|
||||||
|
url_fseek(&s->pb, 8, SEEK_CUR);
|
||||||
|
frames = get_be32(&s->pb);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(frames < 0)
|
if(frames < 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -503,7 +515,7 @@ static int mp3_read_header(AVFormatContext *s,
|
|||||||
}
|
}
|
||||||
|
|
||||||
off = url_ftell(&s->pb);
|
off = url_ftell(&s->pb);
|
||||||
mp3_parse_xing(s, st);
|
mp3_parse_vbr_tags(s, st, off);
|
||||||
url_fseek(&s->pb, off, SEEK_SET);
|
url_fseek(&s->pb, off, SEEK_SET);
|
||||||
|
|
||||||
/* the parameters will be extracted from the compressed bitstream */
|
/* the parameters will be extracted from the compressed bitstream */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user