changeset 5661:6d530eb42996 libavformat

Set lavf identification string globally in av_write_header(), rather than inside the muxers. Remove special handling of "encoder" tags from AVI and MP3 muxers. Patch by Anton Khirnov <wyskas gmail com>.
author rbultje
date Tue, 16 Feb 2010 16:32:25 +0000
parents 1701ad9b6064
children 8fddfdd5e9e7
files avi.c avienc.c metadata.c metadata.h mp3.c utils.c
diffstat 6 files changed, 20 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/avi.c	Tue Feb 16 09:55:56 2010 +0000
+++ b/avi.c	Tue Feb 16 16:32:25 2010 +0000
@@ -40,6 +40,6 @@
 const char ff_avi_tags[][5] = {
     "IARL", "IART", "ICMS", "ICMT", "ICOP", "ICRD", "ICRP", "IDIM", "IDPI",
     "IENG", "IGNR", "IKEY", "ILGT", "ILNG", "IMED", "INAM", "IPLT", "IPRD",
-    "IPRT", "ISBJ",/*"ISFT"*/"ISHP", "ISRC", "ISRF", "ITCH",
+    "IPRT", "ISBJ", "ISFT", "ISHP", "ISRC", "ISRF", "ITCH",
     {0}
 };
--- a/avienc.c	Tue Feb 16 09:55:56 2010 +0000
+++ b/avienc.c	Tue Feb 16 16:32:25 2010 +0000
@@ -376,8 +376,6 @@
         if ((t = av_metadata_get(s->metadata, ff_avi_tags[i], NULL, AV_METADATA_MATCH_CASE)))
             avi_write_info_tag(s->pb, t->key, t->value);
     }
-    if(!(s->streams[0]->codec->flags & CODEC_FLAG_BITEXACT))
-        avi_write_info_tag(pb, "ISFT", LIBAVFORMAT_IDENT);
     ff_end_tag(pb, list2);
 
     /* some padding for easier tag editing */
--- a/metadata.c	Tue Feb 16 09:55:56 2010 +0000
+++ b/metadata.c	Tue Feb 16 16:32:25 2010 +0000
@@ -105,7 +105,7 @@
     av_freep(pm);
 }
 
-static void metadata_conv(AVMetadata **pm, const AVMetadataConv *d_conv,
+void metadata_conv(AVMetadata **pm, const AVMetadataConv *d_conv,
                                            const AVMetadataConv *s_conv)
 {
     /* TODO: use binary search to look up the two conversion tables
--- a/metadata.h	Tue Feb 16 09:55:56 2010 +0000
+++ b/metadata.h	Tue Feb 16 16:32:25 2010 +0000
@@ -45,4 +45,7 @@
 void ff_metadata_mux_compat(AVFormatContext *s);
 #endif
 
+void metadata_conv(AVMetadata **pm, const AVMetadataConv *d_conv,
+                                    const AVMetadataConv *s_conv);
+
 #endif /* AVFORMAT_METADATA_H */
--- a/mp3.c	Tue Feb 16 09:55:56 2010 +0000
+++ b/mp3.c	Tue Feb 16 16:32:25 2010 +0000
@@ -313,7 +313,7 @@
     while ((t = av_metadata_get(s->metadata, "", t, AV_METADATA_IGNORE_SUFFIX))) {
         uint32_t tag = 0;
 
-        if (t->key[0] == 'T' && strcmp(t->key, "TSSE")) {
+        if (t->key[0] == 'T' && strlen(t->key) == 4) {
             int i;
             for (i = 0; *ff_id3v2_tags[i]; i++)
                 if (AV_RB32(t->key) == AV_RB32(ff_id3v2_tags[i])) {
@@ -338,11 +338,6 @@
             av_free(buf);
         }
     }
-    if(!(s->streams[0]->codec->flags & CODEC_FLAG_BITEXACT)) {
-        totlen += strlen(LIBAVFORMAT_IDENT) + ID3v2_HEADER_SIZE + 2;
-        id3v2_put_ttag(s, LIBAVFORMAT_IDENT, strlen(LIBAVFORMAT_IDENT) + 1,
-                       MKBETAG('T', 'S', 'S', 'E'));
-    }
 
     cur_pos = url_ftell(s->pb);
     url_fseek(s->pb, size_pos, SEEK_SET);
--- a/utils.c	Tue Feb 16 09:55:56 2010 +0000
+++ b/utils.c	Tue Feb 16 16:32:25 2010 +0000
@@ -2583,6 +2583,20 @@
     ff_metadata_mux_compat(s);
 #endif
 
+    /* set muxer identification string */
+    if (!(s->streams[0]->codec->flags & CODEC_FLAG_BITEXACT)) {
+        AVMetadata *m;
+        AVMetadataTag *t;
+
+        if (!(m = av_mallocz(sizeof(AVMetadata))))
+            return AVERROR(ENOMEM);
+        av_metadata_set2(&m, "encoder", LIBAVFORMAT_IDENT, 0);
+        metadata_conv(&m, s->oformat->metadata_conv, NULL);
+        if ((t = av_metadata_get(m, "", NULL, AV_METADATA_IGNORE_SUFFIX)))
+            av_metadata_set2(&s->metadata, t->key, t->value, 0);
+        av_metadata_free(&m);
+    }
+
     if(s->oformat->write_header){
         ret = s->oformat->write_header(s);
         if (ret < 0)