Ticket #10853: 0002-mov-parse-track-based-udta-name-tags.patch

File 0002-mov-parse-track-based-udta-name-tags.patch, 2.0 KB (added by Aleksoid1978, 3 years ago)
  • libavformat/mov.c

    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)  
    297297    return 0;
    298298}
    299299
     300
     301static 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
    300310static int mov_read_udta_string(MOVContext *c, AVIOContext *pb, MOVAtom atom)
    301311{
    302312    char tmp_key[AV_FOURCC_MAX_STRING_SIZE] = {0};
    static int mov_read_udta_string(MOVContext *c, AVIOContext *pb, MOVAtom atom)  
    399409    case MKTAG(0xa9,'w','r','n'): key = "warning";   break;
    400410    case MKTAG(0xa9,'w','r','t'): key = "composer";  break;
    401411    case MKTAG(0xa9,'x','y','z'): key = "location";  break;
     412    case MKTAG( 'n','a','m','e'): key = "title";     break;
    402413    }
    403414retry:
    404415    if (c->itunes_metadata && atom.size > 8) {
    retry:  
    526537            str[str_size] = 0;
    527538        }
    528539        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);
    530541        if (*language && strcmp(language, "und")) {
    531542            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);
    533544        }
    534545        if (!strcmp(key, "encoder")) {
    535546            int major, minor, micro;