diff options
author | Andreas Öman <andreas@lonelycoder.com> | 2007-10-23 17:10:41 +0000 |
---|---|---|
committer | Andreas Öman <andreas@lonelycoder.com> | 2007-10-23 17:10:41 +0000 |
commit | db233e832f0b327e5fc6a37816d4bc7cea6299b8 (patch) | |
tree | 3f6675c408bcf0b1aac973c5fd62556ceb604adb /libavformat/mp3.c | |
parent | ca851a3a082f3678c5f0e7e8dc24480a5f483ec6 (diff) | |
download | ffmpeg-streaming-db233e832f0b327e5fc6a37816d4bc7cea6299b8.zip ffmpeg-streaming-db233e832f0b327e5fc6a37816d4bc7cea6299b8.tar.gz |
cosmetical change of mp3_parse_xing() to prepare for upcoming VBRI tag support
Originally committed as revision 10846 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat/mp3.c')
-rw-r--r-- | libavformat/mp3.c | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/libavformat/mp3.c b/libavformat/mp3.c index b2bc895..a711d7f 100644 --- a/libavformat/mp3.c +++ b/libavformat/mp3.c @@ -430,26 +430,30 @@ static int mp3_read_probe(AVProbeData *p) */ static void mp3_parse_xing(AVFormatContext *s, AVStream *st) { - uint32_t v, frames, spf; - const offset_t offtbl[2][2] = {{32, 17}, {17,9}}; + uint32_t v, spf; + int frames = -1; /* Total number of frames in file */ + const offset_t xing_offtbl[2][2] = {{32, 17}, {17,9}}; MPADecodeContext c; ff_mpegaudio_decode_header(&c, get_be32(&s->pb)); - url_fseek(&s->pb, offtbl[c.lsf == 1][c.nb_channels == 1], SEEK_CUR); - v = get_be32(&s->pb); - if(c.layer != 3 || - (v != MKBETAG('X', 'i', 'n', 'g') && - v != MKBETAG('I', 'n', 'f', 'o'))) - return; + if(c.layer != 3) + return; + /* Check for Xing / Info tag */ + url_fseek(&s->pb, xing_offtbl[c.lsf == 1][c.nb_channels == 1], SEEK_CUR); v = get_be32(&s->pb); - if(v & 0x1) { - frames = get_be32(&s->pb); /* Total number of frames in file */ - spf = c.lsf ? 576 : 1152; /* Samples per frame, layer 3 */ - - st->duration = av_rescale_q(frames, (AVRational){spf, c.sample_rate}, - st->time_base); + if(v == MKBETAG('X', 'i', 'n', 'g') || v == MKBETAG('I', 'n', 'f', 'o')) { + v = get_be32(&s->pb); + if(v & 0x1) + frames = get_be32(&s->pb); } + + if(frames < 0) + return; + + spf = c.lsf ? 576 : 1152; /* Samples per frame, layer 3 */ + st->duration = av_rescale_q(frames, (AVRational){spf, c.sample_rate}, + st->time_base); } static int mp3_read_header(AVFormatContext *s, |