PR #23986 opened by Romain Beauxis (toots) URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23986 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23986.patch
I'm having second thoughts on b0c702aec2 after reviewing https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23985. With iTunes using the `descr` field of `COMM` metadata, the pattern of placing `descr` as key will be more common that I thought. With the current default, all these metadata round-trip as both `COMM` and custom `TXXX` metadata which is not practical not user-friendly. The changes in the PR makes the legacy `descr` as key be opt-in so it can still be enabled in case legacy users want to keep them but it remains disabled by default and everything gets removed with the next major version bump. From 0810b1c45feb987e3bcbed577c7d46f52de1bfc5 Mon Sep 17 00:00:00 2001 From: Romain Beauxis <[email protected]> Date: Sun, 2 Aug 2026 12:48:45 -0500 Subject: [PATCH] Make legacy id3v2 COMMM descr-as-key behavior opt-in --- doc/APIchanges | 5 ++++ libavformat/aacdec.c | 2 +- libavformat/avformat.h | 12 ++++++++ libavformat/demux.c | 2 +- libavformat/hls.c | 2 +- libavformat/id3v2.c | 11 +++---- libavformat/id3v2.h | 3 +- libavformat/mpegts.c | 2 +- libavformat/options_table.h | 3 ++ libavformat/version.h | 4 +-- tests/fate/id3v2.mak | 16 ++++++---- tests/ref/fate/id3v2-comm-dashed-descriptor | 2 -- tests/ref/fate/id3v2-comm-descriptor | 2 -- tests/ref/fate/id3v2-comm-descriptor-no-lang | 2 -- .../fate/id3v2-comm-foo-lang-as-descriptor | 2 -- tests/ref/fate/id3v2-comm-invalid-lang | 2 -- tests/ref/fate/id3v2-comm-lang-as-descriptor | 2 -- tests/ref/fate/id3v2-comm-long-descriptor | 2 -- tests/ref/fate/id3v2-comm-multi-invalid-lang | 2 -- tests/ref/fate/id3v2-comm-sort | 2 -- tests/ref/fate/id3v2-comm-sort- | 2 -- tests/ref/fate/id3v2-comm-sort-eng | 2 -- .../ref/fate/id3v2-reenc-delete-metadata-keep | 6 ++-- .../id3v2-reenc-delete-metadata-keep-format | 6 ++-- tests/ref/fate/id3v2-reenc-remux-keep | 7 ++--- tests/ref/fate/id3v2-wma-comm | 5 ---- tests/ref/fate/id3v2-wma-comm-asf_o | 5 ---- tests/ref/fate/id3v2-wma-comm-legacy-keys | 30 +++++++++++++++++++ 28 files changed, 82 insertions(+), 61 deletions(-) create mode 100644 tests/ref/fate/id3v2-wma-comm-legacy-keys diff --git a/doc/APIchanges b/doc/APIchanges index 7907af9290..38b81b968d 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -2,6 +2,11 @@ The last version increases of all libraries were on 2026-06-23. API changes, most recent first: +2026-08-xx - xxxxxxxxxx - lavf 63.6.100 - avformat.h + Add AVFMT_FLAG_LEGACY_ID3V2_COMM_KEYS. The deprecated export of id3v2 COMM + descriptors as bare metadata tag names is now opt-in through this flag, + only the <tag>-<description>-<lang> tag is exported by default. + 2026-07-04 - xxxxxxxxxx - lavc 63.7.100 - codec_id.h Add AV_CODEC_ID_PCM_DVDA. diff --git a/libavformat/aacdec.c b/libavformat/aacdec.c index fef3c69f0b..bf2a04d091 100644 --- a/libavformat/aacdec.c +++ b/libavformat/aacdec.c @@ -147,7 +147,7 @@ static int handle_id3(AVFormatContext *s, AVPacket *pkt) return ret; ffio_init_read_context(&pb, pkt->data, pkt->size); - ff_id3v2_read_dict(&pb.pub, &metadata, ID3v2_DEFAULT_MAGIC, &id3v2_extra_meta); + ff_id3v2_read_dict(s, &pb.pub, &metadata, ID3v2_DEFAULT_MAGIC, &id3v2_extra_meta); if ((ret = ff_id3v2_parse_priv_dict(&metadata, id3v2_extra_meta)) < 0) goto error; diff --git a/libavformat/avformat.h b/libavformat/avformat.h index d4f10122e6..575d046dd1 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -1505,6 +1505,18 @@ typedef struct AVFormatContext { #define AVFMT_FLAG_FAST_SEEK 0x80000 ///< Enable fast, but inaccurate seeks for some formats #define AVFMT_FLAG_AUTO_BSF 0x200000 ///< Add bitstream filters as requested by the muxer +#if FF_API_OLD_ID3V2_COMMENT +/** + * Also export ID3v2 COMM frames with a non-empty descriptor under the + * descriptor as metadata key, next to the "comment-<descriptor>-<lang>" key. + * + * @deprecated the bare descriptor key is ambiguous: a descriptor matching a + * known tag name (e.g. "album") is written back as that tag. Use the + * "comment-<descriptor>-<lang>" key instead. + */ +#define AVFMT_FLAG_LEGACY_ID3V2_COMM_KEYS 0x400000 +#endif + /** * Maximum number of bytes read from input in order to determine stream * properties. Used when reading the global header and in diff --git a/libavformat/demux.c b/libavformat/demux.c index 193fd17739..c20c222954 100644 --- a/libavformat/demux.c +++ b/libavformat/demux.c @@ -317,7 +317,7 @@ int avformat_open_input(AVFormatContext **ps, const char *filename, /* e.g. AVFMT_NOFILE formats will not have an AVIOContext */ if (s->pb && is_id3v2_format(s->iformat)) - ff_id3v2_read_dict(s->pb, &si->id3v2_meta, ID3v2_DEFAULT_MAGIC, &id3v2_extra_meta); + ff_id3v2_read_dict(s, s->pb, &si->id3v2_meta, ID3v2_DEFAULT_MAGIC, &id3v2_extra_meta); if (ffifmt(s->iformat)->read_header) if ((ret = ffifmt(s->iformat)->read_header(s)) < 0) { diff --git a/libavformat/hls.c b/libavformat/hls.c index e8533aa93f..1c3c6c887f 100644 --- a/libavformat/hls.c +++ b/libavformat/hls.c @@ -1240,7 +1240,7 @@ static void parse_id3(AVFormatContext *s, AVIOContext *pb, static const char id3_priv_owner_audio_setup[] = "com.apple.streaming.audioDescription"; ID3v2ExtraMeta *meta; - ff_id3v2_read_dict(pb, metadata, ID3v2_DEFAULT_MAGIC, extra_meta); + ff_id3v2_read_dict(s, pb, metadata, ID3v2_DEFAULT_MAGIC, extra_meta); for (meta = *extra_meta; meta; meta = meta->next) { if (!strcmp(meta->tag, "PRIV")) { ID3v2ExtraMetaPRIV *priv = &meta->data.priv; diff --git a/libavformat/id3v2.c b/libavformat/id3v2.c index ad670052ff..5ae931da9b 100644 --- a/libavformat/id3v2.c +++ b/libavformat/id3v2.c @@ -426,10 +426,11 @@ static void read_lang_descr_tag(AVFormatContext *s, AVIOContext *pb, if (descriptor && *descriptor) { #if FF_API_OLD_ID3V2_COMMENT - if (!strcmp(key, "comment")) { + if (s && (s->flags & AVFMT_FLAG_LEGACY_ID3V2_COMM_KEYS) && + !strcmp(key, "comment")) { av_log(s, AV_LOG_WARNING, - "Deprecated: COMM descriptor '%s' used as metadata key. " - "This will change in a future version.\n", descriptor); + "Deprecated: COMM descriptor '%s' exported as metadata key. " + "This will be removed in a future version.\n", descriptor); av_dict_set(metadata, (const char *)descriptor, (const char *)dst, AV_DICT_DONT_OVERWRITE); } @@ -1170,10 +1171,10 @@ static void id3v2_read_internal(AVIOContext *pb, AVDictionary **metadata, *extra_metap = extra_meta.head; } -void ff_id3v2_read_dict(AVIOContext *pb, AVDictionary **metadata, +void ff_id3v2_read_dict(AVFormatContext *s, AVIOContext *pb, AVDictionary **metadata, const char *magic, ID3v2ExtraMeta **extra_meta) { - id3v2_read_internal(pb, metadata, NULL, magic, extra_meta, 0); + id3v2_read_internal(pb, metadata, s, magic, extra_meta, 0); } void ff_id3v2_read(AVFormatContext *s, const char *magic, diff --git a/libavformat/id3v2.h b/libavformat/id3v2.h index 9afa5a2ddc..c55cf52128 100644 --- a/libavformat/id3v2.h +++ b/libavformat/id3v2.h @@ -110,11 +110,12 @@ int ff_id3v2_tag_len(const uint8_t *buf); /** * Read an ID3v2 tag into specified dictionary and retrieve supported extra metadata. * + * @param s Used for logging and for reading demuxer options, may be NULL * @param metadata Parsed metadata is stored here * @param[out] extra_meta If not NULL, extra metadata is parsed into a list of * ID3v2ExtraMeta structs and *extra_meta points to the head of the list */ -void ff_id3v2_read_dict(AVIOContext *pb, AVDictionary **metadata, const char *magic, ID3v2ExtraMeta **extra_meta); +void ff_id3v2_read_dict(AVFormatContext *s, AVIOContext *pb, AVDictionary **metadata, const char *magic, ID3v2ExtraMeta **extra_meta); /** * Read an ID3v2 tag, including supported extra metadata. diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c index 076020509d..8d21980089 100644 --- a/libavformat/mpegts.c +++ b/libavformat/mpegts.c @@ -1048,7 +1048,7 @@ static int timed_id3_update_metadata(AVStream *s, AVPacket *pkt) int ret = 0; ffio_init_read_context(&id3_buf, pkt->data, pkt->size); - ff_id3v2_read_dict(&id3_buf.pub, &metadata, ID3v2_DEFAULT_MAGIC, &extra_meta); + ff_id3v2_read_dict(NULL, &id3_buf.pub, &metadata, ID3v2_DEFAULT_MAGIC, &extra_meta); ret = ff_id3v2_parse_priv_dict(&metadata, extra_meta); ff_id3v2_free_extra_meta(&extra_meta); diff --git a/libavformat/options_table.h b/libavformat/options_table.h index 915c553f54..537870c5c9 100644 --- a/libavformat/options_table.h +++ b/libavformat/options_table.h @@ -52,6 +52,9 @@ static const AVOption avformat_options[] = { {"nobuffer", "reduce the latency introduced by optional buffering", 0, AV_OPT_TYPE_CONST, {.i64 = AVFMT_FLAG_NOBUFFER }, 0, INT_MAX, D, .unit = "fflags"}, {"bitexact", "do not write random/volatile data", 0, AV_OPT_TYPE_CONST, { .i64 = AVFMT_FLAG_BITEXACT }, 0, 0, E, .unit = "fflags" }, {"autobsf", "add needed bsfs automatically", 0, AV_OPT_TYPE_CONST, { .i64 = AVFMT_FLAG_AUTO_BSF }, 0, 0, E, .unit = "fflags" }, +#if FF_API_OLD_ID3V2_COMMENT +{"legacy_id3v2_comm_keys", "also export id3v2 COMM descriptors as bare metadata keys", 0, AV_OPT_TYPE_CONST, { .i64 = AVFMT_FLAG_LEGACY_ID3V2_COMM_KEYS }, 0, 0, D|AV_OPT_FLAG_DEPRECATED, .unit = "fflags" }, +#endif {"seek2any", "allow seeking to non-keyframes on demuxer level when supported", OFFSET(seek2any), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, D}, {"analyzeduration", "specify how many microseconds are analyzed to probe the input", OFFSET(max_analyze_duration), AV_OPT_TYPE_INT64, {.i64 = 0 }, 0, (double)INT64_MAX, D}, {"cryptokey", "decryption key", OFFSET(key), AV_OPT_TYPE_BINARY, {.dbl = 0}, 0, 0, D}, diff --git a/libavformat/version.h b/libavformat/version.h index 384cbd49cc..4bde82abb4 100644 --- a/libavformat/version.h +++ b/libavformat/version.h @@ -31,8 +31,8 @@ #include "version_major.h" -#define LIBAVFORMAT_VERSION_MINOR 5 -#define LIBAVFORMAT_VERSION_MICRO 101 +#define LIBAVFORMAT_VERSION_MINOR 6 +#define LIBAVFORMAT_VERSION_MICRO 100 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ LIBAVFORMAT_VERSION_MINOR, \ diff --git a/tests/fate/id3v2.mak b/tests/fate/id3v2.mak index 4bde6225b1..5dafe8213f 100644 --- a/tests/fate/id3v2.mak +++ b/tests/fate/id3v2.mak @@ -48,7 +48,7 @@ FATE_ID3V2_FFMPEG_FFPROBE-$(call ENCDEC, AAC MP3, NUT) += fate-id3v2-reenc-delet fate-id3v2-reenc-delete-metadata: CMD = transcode mp3 $(TARGET_SAMPLES)/gapless/gapless-itunes.mp3 nut "-c:a aac -bitexact -t 0.1" "-c copy -t 0.1" "-show_entries format_tags" "" "" "" null FATE_ID3V2_FFMPEG_FFPROBE-$(call ENCDEC, AAC MP3, NUT) += fate-id3v2-reenc-delete-metadata-keep -fate-id3v2-reenc-delete-metadata-keep: CMD = transcode mp3 $(TARGET_SAMPLES)/gapless/gapless-itunes.mp3 nut "-c:a aac -bitexact -keep_metadata iTunSMPB -t 0.1" "-c copy -t 0.1" "-show_entries format_tags" "" "" "" null +fate-id3v2-reenc-delete-metadata-keep: CMD = transcode mp3 $(TARGET_SAMPLES)/gapless/gapless-itunes.mp3 nut "-c:a aac -bitexact -keep_metadata comment-iTunSMPB-eng -t 0.1" "-c copy -t 0.1" "-show_entries format_tags" "" "" "" null # -map_metadata must not bypass stale metadata pruning FATE_ID3V2_FFMPEG_FFPROBE-$(call ENCDEC, AAC MP3, NUT) += fate-id3v2-reenc-delete-metadata-map-metadata @@ -56,11 +56,11 @@ fate-id3v2-reenc-delete-metadata-map-metadata: CMD = transcode mp3 $(TARGET_SAMP # :g specifier targets format metadata — iTunSMPB lives there, so it should be kept FATE_ID3V2_FFMPEG_FFPROBE-$(call ENCDEC, AAC MP3, NUT) += fate-id3v2-reenc-delete-metadata-keep-format -fate-id3v2-reenc-delete-metadata-keep-format: CMD = transcode mp3 $(TARGET_SAMPLES)/gapless/gapless-itunes.mp3 nut "-c:a aac -bitexact -keep_metadata:g iTunSMPB -t 0.1" "-c copy -t 0.1" "-show_entries format_tags" "" "" "" null +fate-id3v2-reenc-delete-metadata-keep-format: CMD = transcode mp3 $(TARGET_SAMPLES)/gapless/gapless-itunes.mp3 nut "-c:a aac -bitexact -keep_metadata:g comment-iTunSMPB-eng -t 0.1" "-c copy -t 0.1" "-show_entries format_tags" "" "" "" null # :s:a specifier targets stream metadata — iTunSMPB is format-level, so it should still be deleted FATE_ID3V2_FFMPEG_FFPROBE-$(call ENCDEC, AAC MP3, NUT) += fate-id3v2-reenc-delete-metadata-keep-stream -fate-id3v2-reenc-delete-metadata-keep-stream: CMD = transcode mp3 $(TARGET_SAMPLES)/gapless/gapless-itunes.mp3 nut "-c:a aac -bitexact -keep_metadata:s:a iTunSMPB -t 0.1" "-c copy -t 0.1" "-show_entries format_tags" "" "" "" null +fate-id3v2-reenc-delete-metadata-keep-stream: CMD = transcode mp3 $(TARGET_SAMPLES)/gapless/gapless-itunes.mp3 nut "-c:a aac -bitexact -keep_metadata:s:a comment-iTunSMPB-eng -t 0.1" "-c copy -t 0.1" "-show_entries format_tags" "" "" "" null FATE_ID3V2_FFMPEG_FFPROBE-$(call REMUX, MP3) += fate-id3v2-reenc-remux-keep fate-id3v2-reenc-remux-keep: CMD = transcode mp3 $(TARGET_SAMPLES)/gapless/gapless-itunes.mp3 mp3 "-c copy" "-c copy -t 0.1" "-show_entries format_tags" "" "" "" null @@ -73,15 +73,19 @@ fate-id3v2-chapters: CMD = transcode wav $(TARGET_SAMPLES)/wav/200828-005.wav ai FATE_ID3V2_FFMPEG_FFPROBE-$(call REMUX, AIFF, WAV_DEMUXER FLAC_DEMUXER PCM_S16LE_DECODER MJPEG_DECODER ARESAMPLE_FILTER CHANNELMAP_FILTER PCM_S24BE_ENCODER) += fate-id3v2-utf16-bom fate-id3v2-utf16-bom: CMD = transcode wav $(TARGET_SAMPLES)/audio-reference/yo.raw-short.wav aiff "-map 0:a -map 1:v -af aresample,channelmap=channel_layout=hexagonal,aresample -c:a pcm_s24be -c:v copy -write_id3v2 1 -id3v2_version 3 -map_metadata:g:0 1:g -map_metadata:s:v 1:g" "-c copy -t 0.05" "-show_entries stream=channel_layout:stream_tags:format_tags" "-i $(TARGET_SAMPLES)/cover_art/cover_art.flac" -# Test legacy COMM descriptor behavior: non-empty descriptor becomes the key. -# MusicMatch tools embed artist bio etc. this way. +# Test COMM frames with a non-empty descriptor. MusicMatch tools embed artist +# bio etc. this way. FATE_ID3V2_FFPROBE-$(CONFIG_ASF_DEMUXER) += fate-id3v2-wma-comm fate-id3v2-wma-comm: CMD = probetags $(TARGET_SAMPLES)/cover_art/wma_with_ID3_APIC_trimmed.wma FATE_ID3V2_FFPROBE-$(CONFIG_ASF_O_DEMUXER) += fate-id3v2-wma-comm-asf_o fate-id3v2-wma-comm-asf_o: CMD = probetags -f asf_o $(TARGET_SAMPLES)/cover_art/wma_with_ID3_APIC_trimmed.wma -# Round-trip: write COMM with descriptor, read back (legacy: descriptor as key). +# Same file with the deprecated descriptor-as-key export enabled. +FATE_ID3V2_FFPROBE-$(CONFIG_ASF_DEMUXER) += fate-id3v2-wma-comm-legacy-keys +fate-id3v2-wma-comm-legacy-keys: CMD = probetags -fflags +legacy_id3v2_comm_keys $(TARGET_SAMPLES)/cover_art/wma_with_ID3_APIC_trimmed.wma + +# Round-trip: write COMM with descriptor, read back. FATE_ID3V2_RAW-$(call REMUX, MP3) += fate-id3v2-comm-descriptor fate-id3v2-comm-descriptor: $(ID3V2_TESTBIN) fate-id3v2-comm-descriptor: CMD = run_with_temp "$(FFMPEG) -nostdin -hide_banner -loglevel error -i $(TARGET_SAMPLES)/id3v2/id3v2_priv.mp3 -map_metadata -1 -c copy -fflags +bitexact -metadata comment-MusicMatch_Bio-eng=test -f mp3 -y" "$(ID3V2_TESTBIN)" mp3 diff --git a/tests/ref/fate/id3v2-comm-dashed-descriptor b/tests/ref/fate/id3v2-comm-dashed-descriptor index 74fdb60f16..d9e925a626 100644 --- a/tests/ref/fate/id3v2-comm-dashed-descriptor +++ b/tests/ref/fate/id3v2-comm-dashed-descriptor @@ -1,4 +1,2 @@ ID3v2 frame COMM (17 bytes):|.engFoo-Bar.test.| -Deprecated: COMM descriptor 'Foo-Bar' used as metadata key. This will change in a future version. -Foo-Bar=test comment-Foo-Bar-eng=test diff --git a/tests/ref/fate/id3v2-comm-descriptor b/tests/ref/fate/id3v2-comm-descriptor index 456de11b2a..7cf5e6d6fc 100644 --- a/tests/ref/fate/id3v2-comm-descriptor +++ b/tests/ref/fate/id3v2-comm-descriptor @@ -1,4 +1,2 @@ ID3v2 frame COMM (24 bytes):|.engMusicMatch_Bio.test.| -Deprecated: COMM descriptor 'MusicMatch_Bio' used as metadata key. This will change in a future version. -MusicMatch_Bio=test comment-MusicMatch_Bio-eng=test diff --git a/tests/ref/fate/id3v2-comm-descriptor-no-lang b/tests/ref/fate/id3v2-comm-descriptor-no-lang index 25f68957e6..dd5fda4b28 100644 --- a/tests/ref/fate/id3v2-comm-descriptor-no-lang +++ b/tests/ref/fate/id3v2-comm-descriptor-no-lang @@ -1,4 +1,2 @@ ID3v2 frame COMM (24 bytes):|.undMusicMatch_Bio.test.| -Deprecated: COMM descriptor 'MusicMatch_Bio' used as metadata key. This will change in a future version. -MusicMatch_Bio=test comment-MusicMatch_Bio=test diff --git a/tests/ref/fate/id3v2-comm-foo-lang-as-descriptor b/tests/ref/fate/id3v2-comm-foo-lang-as-descriptor index 50259571e6..e75f962918 100644 --- a/tests/ref/fate/id3v2-comm-foo-lang-as-descriptor +++ b/tests/ref/fate/id3v2-comm-foo-lang-as-descriptor @@ -1,4 +1,2 @@ ID3v2 frame COMM (17 bytes):|.undfoo-eng.test.| -Deprecated: COMM descriptor 'foo-eng' used as metadata key. This will change in a future version. -foo-eng=test comment-foo-eng-und=test diff --git a/tests/ref/fate/id3v2-comm-invalid-lang b/tests/ref/fate/id3v2-comm-invalid-lang index 354b063378..cdcbfadcb7 100644 --- a/tests/ref/fate/id3v2-comm-invalid-lang +++ b/tests/ref/fate/id3v2-comm-invalid-lang @@ -1,4 +1,2 @@ ID3v2 frame COMM (13 bytes):|.undxyz.test.| -Deprecated: COMM descriptor 'xyz' used as metadata key. This will change in a future version. -xyz=test comment-xyz=test diff --git a/tests/ref/fate/id3v2-comm-lang-as-descriptor b/tests/ref/fate/id3v2-comm-lang-as-descriptor index 1b58d6ea5a..85e7ccd727 100644 --- a/tests/ref/fate/id3v2-comm-lang-as-descriptor +++ b/tests/ref/fate/id3v2-comm-lang-as-descriptor @@ -1,4 +1,2 @@ ID3v2 frame COMM (13 bytes):|.undeng.test.| -Deprecated: COMM descriptor 'eng' used as metadata key. This will change in a future version. -eng=test comment-eng-und=test diff --git a/tests/ref/fate/id3v2-comm-long-descriptor b/tests/ref/fate/id3v2-comm-long-descriptor index 722b5edfbd..94eab2aa7c 100644 --- a/tests/ref/fate/id3v2-comm-long-descriptor +++ b/tests/ref/fate/id3v2-comm-long-descriptor @@ -1,4 +1,2 @@ ID3v2 frame COMM (16 bytes):|.undfoobar.test.| -Deprecated: COMM descriptor 'foobar' used as metadata key. This will change in a future version. -foobar=test comment-foobar=test diff --git a/tests/ref/fate/id3v2-comm-multi-invalid-lang b/tests/ref/fate/id3v2-comm-multi-invalid-lang index 5164002f18..541029e9d4 100644 --- a/tests/ref/fate/id3v2-comm-multi-invalid-lang +++ b/tests/ref/fate/id3v2-comm-multi-invalid-lang @@ -1,4 +1,2 @@ ID3v2 frame COMM (18 bytes):|.unddesc-xyz.test.| -Deprecated: COMM descriptor 'desc-xyz' used as metadata key. This will change in a future version. -desc-xyz=test comment-desc-xyz=test diff --git a/tests/ref/fate/id3v2-comm-sort b/tests/ref/fate/id3v2-comm-sort index 7a4ee1441f..5682bba540 100644 --- a/tests/ref/fate/id3v2-comm-sort +++ b/tests/ref/fate/id3v2-comm-sort @@ -1,4 +1,2 @@ ID3v2 frame COMM (14 bytes):|.undsort.test.| -Deprecated: COMM descriptor 'sort' used as metadata key. This will change in a future version. -sort=test comment-sort=test diff --git a/tests/ref/fate/id3v2-comm-sort- b/tests/ref/fate/id3v2-comm-sort- index 7a4ee1441f..5682bba540 100644 --- a/tests/ref/fate/id3v2-comm-sort- +++ b/tests/ref/fate/id3v2-comm-sort- @@ -1,4 +1,2 @@ ID3v2 frame COMM (14 bytes):|.undsort.test.| -Deprecated: COMM descriptor 'sort' used as metadata key. This will change in a future version. -sort=test comment-sort=test diff --git a/tests/ref/fate/id3v2-comm-sort-eng b/tests/ref/fate/id3v2-comm-sort-eng index 01a1f6ba1c..0db7a899fa 100644 --- a/tests/ref/fate/id3v2-comm-sort-eng +++ b/tests/ref/fate/id3v2-comm-sort-eng @@ -1,4 +1,2 @@ ID3v2 frame COMM (14 bytes):|.engsort.test.| -Deprecated: COMM descriptor 'sort' used as metadata key. This will change in a future version. -sort=test comment-sort-eng=test diff --git a/tests/ref/fate/id3v2-reenc-delete-metadata-keep b/tests/ref/fate/id3v2-reenc-delete-metadata-keep index 2ccb64a380..bd9de3162a 100644 --- a/tests/ref/fate/id3v2-reenc-delete-metadata-keep +++ b/tests/ref/fate/id3v2-reenc-delete-metadata-keep @@ -1,6 +1,6 @@ -db828221356fb78b3fe2990c717672b8 *tests/data/fate/id3v2-reenc-delete-metadata-keep.nut -1697 tests/data/fate/id3v2-reenc-delete-metadata-keep.nut +079ae9bb4ea16f93ac992cd988da0fbc *tests/data/fate/id3v2-reenc-delete-metadata-keep.nut +1709 tests/data/fate/id3v2-reenc-delete-metadata-keep.nut [FORMAT] TAG:title=7rk -TAG:iTunSMPB= 00000000 00000210 0000086A 0000000000066486 00000000 0002DA9D 00000000 00000000 00000000 00000000 00000000 00000000 +TAG:comment-iTunSMPB-eng= 00000000 00000210 0000086A 0000000000066486 00000000 0002DA9D 00000000 00000000 00000000 00000000 00000000 00000000 [/FORMAT] diff --git a/tests/ref/fate/id3v2-reenc-delete-metadata-keep-format b/tests/ref/fate/id3v2-reenc-delete-metadata-keep-format index c96b381876..d146b6a1e5 100644 --- a/tests/ref/fate/id3v2-reenc-delete-metadata-keep-format +++ b/tests/ref/fate/id3v2-reenc-delete-metadata-keep-format @@ -1,6 +1,6 @@ -db828221356fb78b3fe2990c717672b8 *tests/data/fate/id3v2-reenc-delete-metadata-keep-format.nut -1697 tests/data/fate/id3v2-reenc-delete-metadata-keep-format.nut +079ae9bb4ea16f93ac992cd988da0fbc *tests/data/fate/id3v2-reenc-delete-metadata-keep-format.nut +1709 tests/data/fate/id3v2-reenc-delete-metadata-keep-format.nut [FORMAT] TAG:title=7rk -TAG:iTunSMPB= 00000000 00000210 0000086A 0000000000066486 00000000 0002DA9D 00000000 00000000 00000000 00000000 00000000 00000000 +TAG:comment-iTunSMPB-eng= 00000000 00000210 0000086A 0000000000066486 00000000 0002DA9D 00000000 00000000 00000000 00000000 00000000 00000000 [/FORMAT] diff --git a/tests/ref/fate/id3v2-reenc-remux-keep b/tests/ref/fate/id3v2-reenc-remux-keep index f005e6a420..63de286bee 100644 --- a/tests/ref/fate/id3v2-reenc-remux-keep +++ b/tests/ref/fate/id3v2-reenc-remux-keep @@ -1,12 +1,9 @@ -3183f143906fd8064f574448f26a50e6 *tests/data/fate/id3v2-reenc-remux-keep.mp3 -192351 tests/data/fate/id3v2-reenc-remux-keep.mp3 +2b846fc3fd4b5fbb0cd97113b72e7ce6 *tests/data/fate/id3v2-reenc-remux-keep.mp3 +192081 tests/data/fate/id3v2-reenc-remux-keep.mp3 [FORMAT] TAG:title=7rk -TAG:iTunPGAP=0 TAG:comment-iTunPGAP-eng=0 TAG:encoded_by=iTunes 12.7.0.166 -TAG:iTunNORM= 00000362 000004C0 0000308F 00003CC5 00000DAC 00000DAC 00007D14 00007AC9 000007C1 0000175E TAG:comment-iTunNORM-eng= 00000362 000004C0 0000308F 00003CC5 00000DAC 00000DAC 00007D14 00007AC9 000007C1 0000175E -TAG:iTunSMPB= 00000000 00000210 0000086A 0000000000066486 00000000 0002DA9D 00000000 00000000 00000000 00000000 00000000 00000000 TAG:comment-iTunSMPB-eng= 00000000 00000210 0000086A 0000000000066486 00000000 0002DA9D 00000000 00000000 00000000 00000000 00000000 00000000 [/FORMAT] diff --git a/tests/ref/fate/id3v2-wma-comm b/tests/ref/fate/id3v2-wma-comm index e2f19f5077..21f009d82b 100644 --- a/tests/ref/fate/id3v2-wma-comm +++ b/tests/ref/fate/id3v2-wma-comm @@ -10,16 +10,11 @@ TAG:album=Tombé du Ciel TAG:genre=Inconnu TAG:comment-eng= TAG:lyrics-eng= -TAG:MusicMatch_Bio= TAG:comment-MusicMatch_Bio-eng= TAG:TLEN=286000 -TAG:MusicMatch_Tempo= TAG:comment-MusicMatch_Tempo-eng= -TAG:MusicMatch_Mood= TAG:comment-MusicMatch_Mood-eng= -TAG:MusicMatch_Preference= TAG:comment-MusicMatch_Preference-eng= -TAG:MusicMatch_Situation= TAG:comment-MusicMatch_Situation-eng= TAG:track=5 TAG:composer=Jacques Higelin diff --git a/tests/ref/fate/id3v2-wma-comm-asf_o b/tests/ref/fate/id3v2-wma-comm-asf_o index 5d8e02aac6..e5751ba3f1 100644 --- a/tests/ref/fate/id3v2-wma-comm-asf_o +++ b/tests/ref/fate/id3v2-wma-comm-asf_o @@ -12,16 +12,11 @@ TAG:album=Tombé du Ciel TAG:genre=Inconnu TAG:comment-eng= TAG:lyrics-eng= -TAG:MusicMatch_Bio= TAG:comment-MusicMatch_Bio-eng= TAG:TLEN=286000 -TAG:MusicMatch_Tempo= TAG:comment-MusicMatch_Tempo-eng= -TAG:MusicMatch_Mood= TAG:comment-MusicMatch_Mood-eng= -TAG:MusicMatch_Preference= TAG:comment-MusicMatch_Preference-eng= -TAG:MusicMatch_Situation= TAG:comment-MusicMatch_Situation-eng= TAG:WM/TrackNumber=5 TAG:WM/Composer=Jacques Higelin diff --git a/tests/ref/fate/id3v2-wma-comm-legacy-keys b/tests/ref/fate/id3v2-wma-comm-legacy-keys new file mode 100644 index 0000000000..e2f19f5077 --- /dev/null +++ b/tests/ref/fate/id3v2-wma-comm-legacy-keys @@ -0,0 +1,30 @@ +[FORMAT] +TAG:title=Piste 5 +TAG:artist=Higelin +TAG:WM/Track=4 +TAG:WMFSDKVersion=8.00.00.4477 +TAG:WMFSDKNeeded=0.0.0.0000 +TAG:WM/GenreID=Inconnu +TAG:track=00 +TAG:album=Tombé du Ciel +TAG:genre=Inconnu +TAG:comment-eng= +TAG:lyrics-eng= +TAG:MusicMatch_Bio= +TAG:comment-MusicMatch_Bio-eng= +TAG:TLEN=286000 +TAG:MusicMatch_Tempo= +TAG:comment-MusicMatch_Tempo-eng= +TAG:MusicMatch_Mood= +TAG:comment-MusicMatch_Mood-eng= +TAG:MusicMatch_Preference= +TAG:comment-MusicMatch_Preference-eng= +TAG:MusicMatch_Situation= +TAG:comment-MusicMatch_Situation-eng= +TAG:track=5 +TAG:composer=Jacques Higelin +TAG:WM/EncodingTime=127518048290000000 +TAG:album_artist=Jacques Higelin +TAG:WM/Provider=User Feedback +TAG:creation_time=2003-03-23T11:52:22.967000Z +[/FORMAT] -- 2.52.0 _______________________________________________ ffmpeg-devel mailing list -- [email protected] To unsubscribe send an email to [email protected]
