[FFmpeg-devel] [PATCH 5/5] mp3enc: add lame tag with start padding info

Michael Niedermayer michaelni at gmx.at
Wed Jul 4 23:15:06 CEST 2012


Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
---
 libavformat/mp3dec.c    |    2 +-
 libavformat/mp3enc.c    |   11 ++++++++++-
 tests/ref/lavf-fate/mp3 |    2 +-
 3 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/libavformat/mp3dec.c b/libavformat/mp3dec.c
index bc62694..4a74f5c 100644
--- a/libavformat/mp3dec.c
+++ b/libavformat/mp3dec.c
@@ -116,7 +116,7 @@ static int mp3_parse_vbr_tags(AVFormatContext *s, AVStream *st, int64_t base)
             avio_skip(s->pb, 4);
 
         v = avio_rb32(s->pb);
-        if(v == MKBETAG('L', 'A', 'M', 'E')) {
+        if(v == MKBETAG('L', 'A', 'M', 'E') || v == MKBETAG('L', 'a', 'v', 'f')) {
             avio_skip(s->pb, 21-4);
             v= avio_rb24(s->pb);
             mp3->start_pad = v>>12;
diff --git a/libavformat/mp3enc.c b/libavformat/mp3enc.c
index 8a9f788..cc99e77 100644
--- a/libavformat/mp3enc.c
+++ b/libavformat/mp3enc.c
@@ -123,6 +123,7 @@ static int mp3_write_xing(AVFormatContext *s)
     MPADecodeHeader  c;
     int              srate_idx, ver = 0, i, channels;
     int              needed;
+    const char      *vendor = (codec->flags & CODEC_FLAG_BITEXACT) ? "Lavf" : LIBAVFORMAT_IDENT;
 
     if (!s->pb->seekable)
         return 0;
@@ -177,7 +178,9 @@ static int mp3_write_xing(AVFormatContext *s)
                + 4              // frames/size/toc flags
                + 4              // frames
                + 4              // size
-               + VBR_TOC_SIZE;  // toc
+               + VBR_TOC_SIZE   // toc
+               + 24
+               ;
 
         if (needed <= c.frame_size)
             break;
@@ -202,6 +205,12 @@ static int mp3_write_xing(AVFormatContext *s)
     for (i = 0; i < VBR_TOC_SIZE; ++i)
         avio_w8(s->pb, (uint8_t)(255 * i / VBR_TOC_SIZE));
 
+    for (i = 0; i < strlen(vendor); ++i)
+        avio_w8(s->pb, vendor[i]);
+    for (; i < 21; ++i)
+        avio_w8(s->pb, 0);
+    avio_wb24(s->pb, FFMAX(codec->delay - 528 - 1, 0)<<12);
+
     ffio_fill(s->pb, 0, c.frame_size - needed);
     avio_flush(s->pb);
 
diff --git a/tests/ref/lavf-fate/mp3 b/tests/ref/lavf-fate/mp3
index 48a5476..91e2b48 100644
--- a/tests/ref/lavf-fate/mp3
+++ b/tests/ref/lavf-fate/mp3
@@ -1,3 +1,3 @@
-67cbcc79f018afb68f7d81625bfa234c *./tests/data/lavf-fate/lavf.mp3
+40a4e41ae74ec8dacdf02402831a6a58 *./tests/data/lavf-fate/lavf.mp3
 97230 ./tests/data/lavf-fate/lavf.mp3
 ./tests/data/lavf-fate/lavf.mp3 CRC=0x6c9850fe
-- 
1.7.9.5



More information about the ffmpeg-devel mailing list