oggdec: Metadata is per-stream; don't merge multiple streams' together
authorDavid Conrad <lessen42@gmail.com>
Fri, 12 Mar 2010 05:16:44 +0000 (05:16 +0000)
committerDavid Conrad <lessen42@gmail.com>
Fri, 12 Mar 2010 05:16:44 +0000 (05:16 +0000)
Originally committed as revision 22473 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavformat/flacdec.c
libavformat/oggdec.h
libavformat/oggparseflac.c
libavformat/oggparsespeex.c
libavformat/oggparsetheora.c
libavformat/oggparsevorbis.c

index d7f1e71..495fa2b 100644 (file)
@@ -113,7 +113,7 @@ static int flac_read_header(AVFormatContext *s,
             }
             /* process supported blocks other than STREAMINFO */
             if (metadata_type == FLAC_METADATA_TYPE_VORBIS_COMMENT) {
-                if (ff_vorbis_comment(s, buffer, metadata_size)) {
+                if (ff_vorbis_comment(s, &s->metadata, buffer, metadata_size)) {
                     av_log(s, AV_LOG_WARNING, "error parsing VorbisComment metadata\n");
                 }
             }
index 739e4ca..2f3a6f3 100644 (file)
@@ -115,7 +115,7 @@ extern const struct ogg_codec ff_vorbis_codec;
 
 extern const AVMetadataConv ff_vorbiscomment_metadata_conv[];
 
-int ff_vorbis_comment(AVFormatContext *ms, uint8_t *buf, int size);
+int ff_vorbis_comment(AVFormatContext *ms, AVMetadata **m, uint8_t *buf, int size);
 
 static inline int
 ogg_find_stream (struct ogg * ogg, int serial)
index 36b2345..9a9ca7e 100644 (file)
@@ -68,7 +68,7 @@ flac_header (AVFormatContext * s, int idx)
         st->time_base.num = 1;
         st->time_base.den = st->codec->sample_rate;
     } else if (mdt == FLAC_METADATA_TYPE_VORBIS_COMMENT) {
-        ff_vorbis_comment (s, os->buf + os->pstart + 4, os->psize - 4);
+        ff_vorbis_comment (s, &st->metadata, os->buf + os->pstart + 4, os->psize - 4);
     }
 
     return 1;
index 05a998b..9ad5397 100644 (file)
@@ -75,7 +75,7 @@ static int speex_header(AVFormatContext *s, int idx) {
         st->time_base.num = 1;
         st->time_base.den = st->codec->sample_rate;
     } else
-        ff_vorbis_comment(s, p, os->psize);
+        ff_vorbis_comment(s, &st->metadata, p, os->psize);
 
     spxp->seq++;
     return 1;
index 4cbb62a..ecd2bbe 100644 (file)
@@ -109,7 +109,7 @@ theora_header (AVFormatContext * s, int idx)
         st->need_parsing = AVSTREAM_PARSE_HEADERS;
 
     } else if (os->buf[os->pstart] == 0x83) {
-        ff_vorbis_comment (s, os->buf + os->pstart + 7, os->psize - 8);
+        ff_vorbis_comment (s, &st->metadata, os->buf + os->pstart + 7, os->psize - 8);
     }
 
     st->codec->extradata = av_realloc (st->codec->extradata,
index 6b69b65..a2e057e 100644 (file)
@@ -42,7 +42,7 @@ const AVMetadataConv ff_vorbiscomment_metadata_conv[] = {
 };
 
 int
-ff_vorbis_comment(AVFormatContext * as, uint8_t *buf, int size)
+ff_vorbis_comment(AVFormatContext * as, AVMetadata **m, uint8_t *buf, int size)
 {
     const uint8_t *p = buf;
     const uint8_t *end = buf + size;
@@ -101,7 +101,7 @@ ff_vorbis_comment(AVFormatContext * as, uint8_t *buf, int size)
             memcpy(ct, v, vl);
             ct[vl] = 0;
 
-            av_metadata_set2(&as->metadata, tt, ct,
+            av_metadata_set2(m, tt, ct,
                                    AV_METADATA_DONT_STRDUP_KEY |
                                    AV_METADATA_DONT_STRDUP_VAL);
         }
@@ -220,7 +220,7 @@ vorbis_header (AVFormatContext * s, int idx)
         st->time_base.den = st->codec->sample_rate;
     } else if (os->buf[os->pstart] == 3) {
         if (os->psize > 8)
-            ff_vorbis_comment (s, os->buf + os->pstart + 7, os->psize - 8);
+            ff_vorbis_comment (s, &st->metadata, os->buf + os->pstart + 7, os->psize - 8);
     } else {
         st->codec->extradata_size =
             fixup_vorbis_headers(s, priv, &st->codec->extradata);