[SCM] libav/experimental: add support for reading duration from VBRI-tag in mp3 files

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 16:08:43 UTC 2013


The following commit has been merged in the experimental branch:
commit 8862fb41e0f1ce7d0dbb93008c2bedf659c40f15
Author: Andreas Öman <andreas at lonelycoder.com>
Date:   Wed Oct 24 04:56:22 2007 +0000

    add support for reading duration from VBRI-tag in mp3 files
    
    Originally committed as revision 10851 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavformat/mp3.c b/libavformat/mp3.c
index 7781bd9..9a0b020 100644
--- a/libavformat/mp3.c
+++ b/libavformat/mp3.c
@@ -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;
     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);
     }
 
+    /* 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)
         return;
 
@@ -503,7 +515,7 @@ static int mp3_read_header(AVFormatContext *s,
     }
 
     off = url_ftell(&s->pb);
-    mp3_parse_xing(s, st);
+    mp3_parse_vbr_tags(s, st, off);
     url_fseek(&s->pb, off, SEEK_SET);
 
     /* the parameters will be extracted from the compressed bitstream */

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list