This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg.
commit 504c135f8ccb2542fb170577dd2809b25c671102 Author: Tau Gärtli <[email protected]> AuthorDate: Thu Apr 30 20:53:07 2026 +0200 Commit: Tau Gärtli <[email protected]> CommitDate: Sat May 23 16:07:57 2026 +0200 libavformat: Add generic `disc_subtitle` tag mapping for MOV/MP4 The mapping is taken from Picard's [1] and taglib's [2] documentation. [1]: https://picard-docs.musicbrainz.org/en/appendices/tag_mapping.html#disc-subtitle [2]: https://taglib.org/api/p_propertymapping.html --- libavformat/mov.c | 6 ++++++ libavformat/movenc.c | 40 +++++++++++++++++++++++++++++++++++ tests/ref/fate/generic-tags-remux-mov | 5 +++-- 3 files changed, 49 insertions(+), 2 deletions(-) diff --git a/libavformat/mov.c b/libavformat/mov.c index e4e8036a4a..1cda7a1d05 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -5524,6 +5524,12 @@ static int mov_read_custom(MOVContext *c, AVIOContext *pb, MOVAtom atom) sc->start_pad = priming; } } + if (strcmp(mean, "com.apple.iTunes") == 0 && + strcmp(key, "DISCSUBTITLE") == 0) { + av_dict_set(&c->fc->metadata, "disc_subtitle", val, + AV_DICT_DONT_STRDUP_VAL); + val = NULL; + } if (strcmp(key, "cdec") != 0) { av_dict_set(&c->fc->metadata, key, val, AV_DICT_DONT_STRDUP_KEY | AV_DICT_DONT_STRDUP_VAL); diff --git a/libavformat/movenc.c b/libavformat/movenc.c index 10ea818dd3..586a378c4e 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -4595,6 +4595,35 @@ static int mov_write_string_tag(AVIOContext *pb, const char *name, return size; } +static int mov_write_freeform_tag(AVIOContext *pb, const char *mean, + const char *name, const char *data) +{ + if (!data || !data[0]) + return 0; + + static const char stub_flags[4] = {0, 0, 0, 0}; + + int64_t entry_pos = avio_tell(pb); + avio_wb32(pb, 0); /* size */ + ffio_wfourcc(pb, "----"); /* freeform */ + + size_t mean_len = strlen(mean); + avio_wb32(pb, 12 + mean_len); + ffio_wfourcc(pb, "mean"); + avio_write(pb, &stub_flags[0], sizeof(stub_flags)); + avio_write(pb, mean, mean_len); + + size_t name_len = strlen(name); + avio_wb32(pb, 12 + name_len); + ffio_wfourcc(pb, "name"); + avio_write(pb, &stub_flags[0], sizeof(stub_flags)); + avio_write(pb, name, name_len); + + mov_write_string_data_tag(pb, data, 0, 1); + + return update_size(pb, entry_pos); +} + static AVDictionaryEntry *get_metadata_lang(AVFormatContext *s, const char *tag, int *lang) { @@ -4631,6 +4660,16 @@ static int mov_write_string_metadata(AVFormatContext *s, AVIOContext *pb, return mov_write_string_tag(pb, name, t->value, lang, long_style); } +static int mov_write_custom_metadata(AVFormatContext *s, AVIOContext *pb, + const char *mean, const char *name, + const char *tag) +{ + AVDictionaryEntry *t = av_dict_get(s->metadata, tag, NULL, 0); + if (!t) + return 0; + return mov_write_freeform_tag(pb, mean, name, t->value); +} + /* iTunes bpm number */ static int mov_write_tmpo_tag(AVIOContext *pb, AVFormatContext *s) { @@ -4819,6 +4858,7 @@ static int mov_write_ilst_tag(AVIOContext *pb, MOVMuxContext *mov, mov_write_trkn_tag(pb, mov, s, 0); // track number mov_write_trkn_tag(pb, mov, s, 1); // disc number mov_write_tmpo_tag(pb, s); + mov_write_custom_metadata(s, pb, "com.apple.iTunes", "DISCSUBTITLE", "disc_subtitle"); return update_size(pb, pos); } diff --git a/tests/ref/fate/generic-tags-remux-mov b/tests/ref/fate/generic-tags-remux-mov index eb8c8f4e42..41dd43fcbf 100644 --- a/tests/ref/fate/generic-tags-remux-mov +++ b/tests/ref/fate/generic-tags-remux-mov @@ -1,5 +1,5 @@ -7b4885e9116562745df4c6bdc03b3bce *tests/data/fate/generic-tags-remux-mov.mp4 -10325 tests/data/fate/generic-tags-remux-mov.mp4 +e08290a2eaf72d1565f4a77a5b9093f8 *tests/data/fate/generic-tags-remux-mov.mp4 +10409 tests/data/fate/generic-tags-remux-mov.mp4 #extradata 0: 5, 0x03460155 #tb 0: 1/44100 #media_type 0: audio @@ -66,4 +66,5 @@ TAG:genre=Electronic TAG:copyright=2011 M83 Recording Inc TAG:track=1/11 TAG:disc=1 +TAG:disc_subtitle=Hurry Up [/FORMAT] _______________________________________________ ffmpeg-cvslog mailing list -- [email protected] To unsubscribe send an email to [email protected]
