[FFmpeg-devel] [PATCH] avformat/mp3dec: offset seek index to end of id3v2 tag

wm4 nfxjfg at googlemail.com
Tue Mar 31 22:47:37 CEST 2015


The Xing index won't account for the id3 tag - it's relative to the
headers.
---
 libavformat/mp3dec.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/libavformat/mp3dec.c b/libavformat/mp3dec.c
index d2498a0..161f27d 100644
--- a/libavformat/mp3dec.c
+++ b/libavformat/mp3dec.c
@@ -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)
-- 
2.1.4



More information about the ffmpeg-devel mailing list