[FFmpeg-cvslog] Ogg: discard non-essential metadata from Vorbis header when creating extradata

Reimar Döffinger git
Wed Feb 2 03:56:25 CET 2011


ffmpeg | branch: master | Reimar D?ffinger <Reimar.Doeffinger at gmx.de> | Mon Jan 31 19:16:38 2011 +0000| [403fa3cf07db6aba070eef262f10d0616088025f] | committer: Michael Niedermayer

Ogg: discard non-essential metadata from Vorbis header when creating extradata

The first part of the metadata, the "vendor" string, is required by
libvorbis, it will refuse to play when it is not available.
Also we do not currently parse that part into metadata so it would also
be lost if we removed it as well.

Signed-off-by: Mans Rullgard <mans at mansr.com>
(cherry picked from commit 8cb3c557a9f3b24bc55325e3f64a2150b983305c)

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=403fa3cf07db6aba070eef262f10d0616088025f
---

 libavformat/oggparsevorbis.c |   12 ++++++++++--
 1 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/libavformat/oggparsevorbis.c b/libavformat/oggparsevorbis.c
index d743d25..34ae2fc 100644
--- a/libavformat/oggparsevorbis.c
+++ b/libavformat/oggparsevorbis.c
@@ -256,8 +256,16 @@ vorbis_header (AVFormatContext * s, int idx)
             st->time_base.den = srate;
         }
     } else if (os->buf[os->pstart] == 3) {
-        if (os->psize > 8)
-            ff_vorbis_comment (s, &st->metadata, os->buf + os->pstart + 7, os->psize - 8);
+        if (os->psize > 8 &&
+            ff_vorbis_comment(s, &st->metadata, os->buf + os->pstart + 7, os->psize - 8) >= 0) {
+            // drop all metadata we parsed and which is not required by libvorbis
+            unsigned new_len = 7 + 4 + AV_RL32(priv->packet[1] + 7) + 4 + 1;
+            if (new_len >= 16 && new_len < os->psize) {
+                AV_WL32(priv->packet[1] + new_len - 5, 0);
+                priv->packet[1][new_len - 1] = 1;
+                priv->len[1] = new_len;
+            }
+        }
     } else {
         st->codec->extradata_size =
             fixup_vorbis_headers(s, priv, &st->codec->extradata);




More information about the ffmpeg-cvslog mailing list