From 3857fe722e6eef39ef41f802d8f9e89a07c96808 Mon Sep 17 00:00:00 2001
From: Aleksoid <Aleksoid1978@mail.ru>
Date: Sun, 11 Feb 2024 15:33:30 +1000
Subject: [PATCH 2/2] mov: parse track-based udta name tags
Signed-off-by: Aleksoid <Aleksoid1978@mail.ru>
---
libavformat/mov.c | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/libavformat/mov.c b/libavformat/mov.c
index 42b0135987..f9806cd889 100644
|
a
|
b
|
static int mov_metadata_hmmt(MOVContext *c, AVIOContext *pb, unsigned len)
|
| 297 | 297 | return 0; |
| 298 | 298 | } |
| 299 | 299 | |
| | 300 | |
| | 301 | static void mov_set_metadata(MOVContext *c, const char *key, const char *str) |
| | 302 | { |
| | 303 | if (c->trak_index >= 0) { |
| | 304 | AVStream *st = c->fc->streams[c->fc->nb_streams-1]; |
| | 305 | av_dict_set(&st->metadata, key, str, 0); |
| | 306 | } else |
| | 307 | av_dict_set(&c->fc->metadata, key, str, 0); |
| | 308 | } |
| | 309 | |
| 300 | 310 | static int mov_read_udta_string(MOVContext *c, AVIOContext *pb, MOVAtom atom) |
| 301 | 311 | { |
| 302 | 312 | char tmp_key[AV_FOURCC_MAX_STRING_SIZE] = {0}; |
| … |
… |
static int mov_read_udta_string(MOVContext *c, AVIOContext *pb, MOVAtom atom)
|
| 399 | 409 | case MKTAG(0xa9,'w','r','n'): key = "warning"; break; |
| 400 | 410 | case MKTAG(0xa9,'w','r','t'): key = "composer"; break; |
| 401 | 411 | case MKTAG(0xa9,'x','y','z'): key = "location"; break; |
| | 412 | case MKTAG( 'n','a','m','e'): key = "title"; break; |
| 402 | 413 | } |
| 403 | 414 | retry: |
| 404 | 415 | if (c->itunes_metadata && atom.size > 8) { |
| … |
… |
retry:
|
| 526 | 537 | str[str_size] = 0; |
| 527 | 538 | } |
| 528 | 539 | c->fc->event_flags |= AVFMT_EVENT_FLAG_METADATA_UPDATED; |
| 529 | | av_dict_set(&c->fc->metadata, key, str, 0); |
| | 540 | mov_set_metadata(c, key, str); |
| 530 | 541 | if (*language && strcmp(language, "und")) { |
| 531 | 542 | snprintf(key2, sizeof(key2), "%s-%s", key, language); |
| 532 | | av_dict_set(&c->fc->metadata, key2, str, 0); |
| | 543 | mov_set_metadata(c, key2, str); |
| 533 | 544 | } |
| 534 | 545 | if (!strcmp(key, "encoder")) { |
| 535 | 546 | int major, minor, micro; |