than inside the muxers. Remove special handling of "encoder" tags from AVI and MP3 muxers. Patch by Anton Khirnov <wyskas gmail com>. Originally committed as revision 21850 to svn://svn.ffmpeg.org/ffmpeg/trunktags/v0.6
| @@ -40,6 +40,6 @@ const AVMetadataConv ff_avi_metadata_conv[] = { | |||||
| const char ff_avi_tags[][5] = { | const char ff_avi_tags[][5] = { | ||||
| "IARL", "IART", "ICMS", "ICMT", "ICOP", "ICRD", "ICRP", "IDIM", "IDPI", | "IARL", "IART", "ICMS", "ICMT", "ICOP", "ICRD", "ICRP", "IDIM", "IDPI", | ||||
| "IENG", "IGNR", "IKEY", "ILGT", "ILNG", "IMED", "INAM", "IPLT", "IPRD", | "IENG", "IGNR", "IKEY", "ILGT", "ILNG", "IMED", "INAM", "IPLT", "IPRD", | ||||
| "IPRT", "ISBJ",/*"ISFT"*/"ISHP", "ISRC", "ISRF", "ITCH", | |||||
| "IPRT", "ISBJ", "ISFT", "ISHP", "ISRC", "ISRF", "ITCH", | |||||
| {0} | {0} | ||||
| }; | }; | ||||
| @@ -376,8 +376,6 @@ static int avi_write_header(AVFormatContext *s) | |||||
| if ((t = av_metadata_get(s->metadata, ff_avi_tags[i], NULL, AV_METADATA_MATCH_CASE))) | 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); | 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); | ff_end_tag(pb, list2); | ||||
| /* some padding for easier tag editing */ | /* some padding for easier tag editing */ | ||||
| @@ -105,7 +105,7 @@ void av_metadata_free(AVMetadata **pm) | |||||
| av_freep(pm); | 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) | const AVMetadataConv *s_conv) | ||||
| { | { | ||||
| /* TODO: use binary search to look up the two conversion tables | /* TODO: use binary search to look up the two conversion tables | ||||
| @@ -45,4 +45,7 @@ void ff_metadata_demux_compat(AVFormatContext *s); | |||||
| void ff_metadata_mux_compat(AVFormatContext *s); | void ff_metadata_mux_compat(AVFormatContext *s); | ||||
| #endif | #endif | ||||
| void metadata_conv(AVMetadata **pm, const AVMetadataConv *d_conv, | |||||
| const AVMetadataConv *s_conv); | |||||
| #endif /* AVFORMAT_METADATA_H */ | #endif /* AVFORMAT_METADATA_H */ | ||||
| @@ -313,7 +313,7 @@ static int mp3_write_header(struct AVFormatContext *s) | |||||
| while ((t = av_metadata_get(s->metadata, "", t, AV_METADATA_IGNORE_SUFFIX))) { | while ((t = av_metadata_get(s->metadata, "", t, AV_METADATA_IGNORE_SUFFIX))) { | ||||
| uint32_t tag = 0; | uint32_t tag = 0; | ||||
| if (t->key[0] == 'T' && strcmp(t->key, "TSSE")) { | |||||
| if (t->key[0] == 'T' && strlen(t->key) == 4) { | |||||
| int i; | int i; | ||||
| for (i = 0; *ff_id3v2_tags[i]; i++) | for (i = 0; *ff_id3v2_tags[i]; i++) | ||||
| if (AV_RB32(t->key) == AV_RB32(ff_id3v2_tags[i])) { | if (AV_RB32(t->key) == AV_RB32(ff_id3v2_tags[i])) { | ||||
| @@ -338,11 +338,6 @@ static int mp3_write_header(struct AVFormatContext *s) | |||||
| av_free(buf); | 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); | cur_pos = url_ftell(s->pb); | ||||
| url_fseek(s->pb, size_pos, SEEK_SET); | url_fseek(s->pb, size_pos, SEEK_SET); | ||||
| @@ -2583,6 +2583,20 @@ int av_write_header(AVFormatContext *s) | |||||
| ff_metadata_mux_compat(s); | ff_metadata_mux_compat(s); | ||||
| #endif | #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){ | if(s->oformat->write_header){ | ||||
| ret = s->oformat->write_header(s); | ret = s->oformat->write_header(s); | ||||
| if (ret < 0) | if (ret < 0) | ||||