From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id D7D4248E03 for ; Wed, 19 Nov 2025 18:19:49 +0000 (UTC) Authentication-Results: ffbox; dkim=fail (body hash mismatch (got b'0GZuXtBdUhWa8ZpebDdM7rstqJiLkfIuPRpzS61q2RQ=', expected b'0ye18vCJDIVI6Zkjmrte8w9aNZHZVItHI1SslccVzoc=')) header.d=gmail.com header.a=rsa-sha256 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1763576344; h=to : date : message-id : in-reply-to : references : mime-version : reply-to : subject : list-id : list-archive : list-archive : list-help : list-owner : list-post : list-subscribe : list-unsubscribe : from : cc : content-type : content-transfer-encoding : from; bh=ojSILe+EB9Gg000Ku5T5paep87HSqbSFyP9DOxkT8XU=; b=lEujCM6gqNYXe8AbrI7CowpSLFf3Jqz4wGttVBqTifQTHyOopcq4x/E04MLlRmZ1ZtrKt hl/yJdV2zMUwUExpT4w2u+0qgTMIMPYaVwIzf3UN6KhVMYoIuEaaaqWILN+0sLCUMOnJMg5 uJAYNeyBfuIGCnq9Pt9PmjzFuTjO1jwZ6yUe1sBZMwd4BafvRA52NLbMUk56HyoCy0EL+qG hyI26vgbSOFKLv/1MRa/OtjUvt3BErxIZa97Ew2hQdwt4pycPyLK597Uh9ux7qu7rJwMgMH 99prIzUr1+MaF+KmT/zp2cC6RbeOWMBTlzlxf1Je/k2cU1WweDt2Xvy9N5FA== Received: from [172.19.0.2] (unknown [172.19.0.2]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id E90E368FCC1; Wed, 19 Nov 2025 20:19:04 +0200 (EET) ARC-Seal: i=1; cv=none; a=rsa-sha256; d=ffmpeg.org; s=arc; t=1763576343; b=fxkh2iyhWZ4RBEZqiu0/jcizzOYD4EvrfizOuJoCUqosyVzZO9pq3mZlVA7YMCI02O3TC khe53nifpdR9zR+lblLVQCxNIzFKqReTkWEERvQOOqGuu6jZYzOg8kCnrFDRfCMioHNOM7x wnwlfNv/moz/+okwmzmUF5POzBGyUYEoTlR5SAK3GFR5jx0fmyRphXzjH8qjj7IUvZF55T/ NB/779tVM/e0T0PLFn3hK+0xJNtGHAhyBPbjiFtJ3zw1yxkTfnGj6UkqIYSkxauOSbCEk2t cgnBLQ1WqXWLEvrxRtHkqDvWPwAX1+o8H+ffHET9gjzNjAyoS3nX6z1zflIg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=ffmpeg.org; s=arc; t=1763576343; h=from : sender : reply-to : subject : date : message-id : to : cc : mime-version : content-type : content-transfer-encoding : content-id : content-description : resent-date : resent-from : resent-sender : resent-to : resent-cc : resent-message-id : in-reply-to : references : list-id : list-help : list-unsubscribe : list-subscribe : list-post : list-owner : list-archive; bh=0GZuXtBdUhWa8ZpebDdM7rstqJiLkfIuPRpzS61q2RQ=; b=aAopzYGwPLEDmezDCFVSPWrRCunvxP1qSEmUtYha4ECvgfEtJGNjTuY9n6NlMwTxHBpBJ 3AngneeHypdz4Enkzf95Bqy6s5nWIRun3Z7DiKLAzSIob+cq8oD2ibCexqqenYgKGfEtY8U hTGv0YgtRkBJtLRSot69SHqIBamcztAEtkxmn6bpUeVTALS2pZe6NUeGuh+MleRNQ53bmfL HOm04uYhm+XlVI6RLqvDQ1quScCUuXWPNxqVsBY+1d4GHvTFpTbJvzLTOMJY44k1ByzkKuq BYRYhcoMFBDWC6oZ0rFMI85cAzyuF/V5nxdHhkndBLDKEcQyBrToEGC1O4hA== ARC-Authentication-Results: i=1; ffmpeg.org; dkim=pass header.d=gmail.com; arc=none; dmarc=pass header.from=gmail.com policy.dmarc=quarantine Authentication-Results: ffmpeg.org; dkim=pass header.d=gmail.com; arc=none (Message is not ARC signed); dmarc=pass (Used From Domain Record) header.from=gmail.com policy.dmarc=quarantine Received: from mail-lf1-f43.google.com (mail-lf1-f43.google.com [209.85.167.43]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id DD1C868F4F7 for ; Wed, 19 Nov 2025 15:50:13 +0200 (EET) Received: by mail-lf1-f43.google.com with SMTP id 2adb3069b0e04-5945510fd7aso5751482e87.0 for ; Wed, 19 Nov 2025 05:50:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1763560213; x=1764165013; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=0ye18vCJDIVI6Zkjmrte8w9aNZHZVItHI1SslccVzoc=; b=gG2zF8//eaNJBUnUSdITWkM7URRQl98WYtZmt6VwTjPVcE7ttL2HvrAqB1wD9Rut9i 2clm6727xyIWFJv3Peb9DcxUQLQIFtV7UVflJjhK3WOzwYVjwbzAP2PTBp6jZmu612zs THrNm17DS3DlaMygCrw2YaoupPLr3Oge5dpJJTL+m2HmD+FUruA3In5pLJnidveiyxiS Hvccq3Jmv/smDxIkBwb/NG9Kym3q7te+cFywaa+DFhb9fb4sSZGA4KQzJ9N/fGoPNTwx G+pseNsCTYnTC8Yg8IoYpmSybCjbedDZKBHyAlvxulff9sd3sfsyTCvyjPWOXrL43yui Gezg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763560213; x=1764165013; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=0ye18vCJDIVI6Zkjmrte8w9aNZHZVItHI1SslccVzoc=; b=mVV2+8wg403Pt1IWFq4WsVTwJxzPizXt/D59uaDoW8nczsYlClv7RjlDP1EYMZpc8y iZG9rpB1uCkhjjY9oSh+zkHORcWlSjGiRlzXpyKHZXHgEwK8byvROTj1LWGfWoZThNnm xSMFBzVLImQB4Yp8+0dnJdrAh7nynoDFtWVVa1ozsKKQhBR5dvhxSwQc2AJ68I1fmOQu k7GDEvgdVNiZvP8W/qgJpbUpcvwC7StVQFC2aPOTzjX5MOjeat5gkgu+s/Lrf/aok/Q7 jLQC5U0t0eSVExe/u7dgM3gwwspZJQelsChwb1bzDl9RISbs1KKFnxStpnjeMDPNsi7V muKA== X-Gm-Message-State: AOJu0Yx6sz+xqlmNlEfh3EHesKegV9iwMByv3bfdA4bGcmKlhggvBIQW nYNtcdh1SE4Fhmm9yWhqKsyqjkSS+1l/upE8qxVSPDxmmvGKDZCQedIDvBHj1w== X-Gm-Gg: ASbGncsJFlADnMlt8KH78I2RmfTF2ro9m6tP2XDUDc3uuNIXy+UlrLvR5wx1vx9P5Ca 1K5MvQV642ImazpXg+YhEvC8Frr1Ki9OkEDlAyaG5QPAxQAM4tldNi0vc43/eel25hnGlzzGhs9 qYaqSK88CY6ruYd9F9tI0RpnV2NXYuWLJqLx2hto3Jearo5vVrDR7KCop/8DbVYk5idiBCAT0y6 Sih82uJ/Wv8+/RBdrHgi5kWxkQI8/TecyBa0OUthD+9da2om2EeXdLEaDDmS19NB6mwZo9LNAcc 1O6TfRMSD1uWQntcYNyJv/NitYrDkJNVaPCiPc3x0zBFrHoPE1OZYlJGQwnjXzdxjxs2hEUDlwm lI70F4oV+T7iWA6sd/bXhc98wqAkt2/tZWhm7TLK0eOM+dLZ/fTX4oclPRRo4jKxHcHN2R35jUX Si7V6tVfjVkpNArARS4/vUN2K1fiaSwG4SLhX8w1q4 X-Google-Smtp-Source: AGHT+IHY2RbZ5lQF1/e82YC/FYBbuMPCzcSRV8nP/x/Ey3dhYLWrGeQ8y91guVmPj8W3R0JlVs+Cvg== X-Received: by 2002:a05:6512:b9b:b0:595:7e54:90ca with SMTP id 2adb3069b0e04-595841fbd05mr7364823e87.30.1763560211903; Wed, 19 Nov 2025 05:50:11 -0800 (PST) Received: from localhost ([2a02:aa1:1152:13f1:ec39:c2dc:1fcd:9cf8]) by smtp.gmail.com with UTF8SMTPSA id 2adb3069b0e04-595803b305bsm4638778e87.28.2025.11.19.05.50.11 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 19 Nov 2025 05:50:11 -0800 (PST) To: ffmpeg-devel@ffmpeg.org Date: Wed, 19 Nov 2025 14:49:39 +0100 Message-ID: <071de5787fedcae1a6edbcbf7bc7c2ea4e7f3c7d.1763545906.git.alexander.bladh@gmail.com> X-Mailer: git-send-email 2.51.2 In-Reply-To: References: MIME-Version: 1.0 X-MailFrom: SRS0=/qO0=53=gmail.com=alexander.bladh@ffmpeg.org X-Mailman-Rule-Hits: nonmember-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-ffmpeg-devel.ffmpeg.org-0; header-match-ffmpeg-devel.ffmpeg.org-1; header-match-ffmpeg-devel.ffmpeg.org-2; header-match-ffmpeg-devel.ffmpeg.org-3; emergency; member-moderation Message-ID-Hash: CWRUF7K4ABIPJ7UBORGP5KEGOKQM4KDU X-Message-ID-Hash: CWRUF7K4ABIPJ7UBORGP5KEGOKQM4KDU X-Mailman-Approved-At: Wed, 19 Nov 2025 18:17:31 +0000 X-Mailman-Version: 3.3.10 Precedence: list Reply-To: FFmpeg development discussions and patches Subject: [FFmpeg-devel] [PATCH 3/3] avformat/matroskadec: Update EBML syntax to parse EditionEntry List-Id: FFmpeg development discussions and patches Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Alexander Westberg-Bladh via ffmpeg-devel Cc: Alexander Westberg-Bladh Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Archived-At: List-Archive: List-Post: Update matroska_chapters[] syntax to parse EditionEntry elements into matroska->editions instead of the flat matroska->chapters list. update chapter finding code to look through all editions. Signed-off-by: Alexander Westberg-Bladh --- libavformat/matroskadec.c | 85 ++++++++++++++++++++++----------------- 1 file changed, 48 insertions(+), 37 deletions(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 0b120bb43e..c771f87a06 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -463,7 +463,7 @@ typedef struct MatroskaDemuxContext { static EbmlSyntax ebml_syntax[3], matroska_segment[9], matroska_track_video_color[15], matroska_track_video[19], matroska_track[33], matroska_track_encoding[6], matroska_track_encodings[2], matroska_track_combine_planes[2], matroska_track_operation[2], matroska_block_addition_mapping[5], matroska_tracks[2], - matroska_attachments[2], matroska_chapter_entry[9], matroska_chapter[6], matroska_chapters[2], + matroska_attachments[2], matroska_chapter_entry[10], matroska_edition[6], matroska_chapter[6], matroska_chapters[2], matroska_index_entry[3], matroska_index[2], matroska_tag[3], matroska_tags[2], matroska_seekhead[2], matroska_blockadditions[2], matroska_blockgroup[8], matroska_cluster_parsing[8]; @@ -489,9 +489,9 @@ static EbmlSyntax matroska_info[] = { { MATROSKA_ID_DURATION, EBML_FLOAT, 0, 0, offsetof(MatroskaDemuxContext, duration) }, { MATROSKA_ID_TITLE, EBML_UTF8, 0, 0, offsetof(MatroskaDemuxContext, title) }, { MATROSKA_ID_WRITINGAPP, EBML_NONE }, - { MATROSKA_ID_MUXINGAPP, EBML_UTF8, 0, 0, offsetof(MatroskaDemuxContext, muxingapp) }, - { MATROSKA_ID_DATEUTC, EBML_BIN, 0, 0, offsetof(MatroskaDemuxContext, date_utc) }, - { MATROSKA_ID_SEGMENTUID, EBML_NONE }, + { MATROSKA_ID_MUXINGAPP, EBML_UTF8, 0, 0, offsetof(MatroskaDemuxContext, muxingapp) }, + { MATROSKA_ID_DATEUTC, EBML_BIN, 0, 0, offsetof(MatroskaDemuxContext, date_utc) }, + { MATROSKA_ID_SEGMENTUID, EBML_BIN, 0, 0, offsetof(MatroskaDemuxContext, segment_uid) }, CHILD_OF(matroska_segment) }; @@ -683,28 +683,29 @@ static EbmlSyntax matroska_chapter_display[] = { }; static EbmlSyntax matroska_chapter_entry[] = { - { MATROSKA_ID_CHAPTERTIMESTART, EBML_UINT, 0, 0, offsetof(MatroskaChapter, start), { .u = AV_NOPTS_VALUE } }, - { MATROSKA_ID_CHAPTERTIMEEND, EBML_UINT, 0, 0, offsetof(MatroskaChapter, end), { .u = AV_NOPTS_VALUE } }, - { MATROSKA_ID_CHAPTERUID, EBML_UINT, 0, 0, offsetof(MatroskaChapter, uid) }, - { MATROSKA_ID_CHAPTERDISPLAY, EBML_NEST, 0, 0, 0, { .n = matroska_chapter_display } }, - { MATROSKA_ID_CHAPTERFLAGHIDDEN, EBML_NONE }, - { MATROSKA_ID_CHAPTERFLAGENABLED, EBML_NONE }, - { MATROSKA_ID_CHAPTERPHYSEQUIV, EBML_NONE }, - { MATROSKA_ID_CHAPTERATOM, EBML_NONE }, - CHILD_OF(matroska_chapter) + { MATROSKA_ID_CHAPTERTIMESTART, EBML_UINT, 0, 0, offsetof(MatroskaChapter, start), { .u = AV_NOPTS_VALUE } }, + { MATROSKA_ID_CHAPTERTIMEEND, EBML_UINT, 0, 0, offsetof(MatroskaChapter, end), { .u = AV_NOPTS_VALUE } }, + { MATROSKA_ID_CHAPTERUID, EBML_UINT, 0, 0, offsetof(MatroskaChapter, uid) }, + { MATROSKA_ID_CHAPTERSEGMENTUID, EBML_BIN, 0, 0, offsetof(MatroskaChapter, segment_uid) }, + { MATROSKA_ID_CHAPTERSEGMENTEDITIONUID, EBML_UINT, 0, 0, offsetof(MatroskaChapter, segment_edition_uid) }, + { MATROSKA_ID_CHAPTERDISPLAY, EBML_NEST, 0, 0, 0, { .n = matroska_chapter_display } }, + { MATROSKA_ID_CHAPTERFLAGHIDDEN, EBML_NONE }, + { MATROSKA_ID_CHAPTERFLAGENABLED, EBML_NONE }, + { MATROSKA_ID_CHAPTERPHYSEQUIV, EBML_NONE }, + CHILD_OF(matroska_edition) }; -static EbmlSyntax matroska_chapter[] = { - { MATROSKA_ID_CHAPTERATOM, EBML_NEST, 0, sizeof(MatroskaChapter), offsetof(MatroskaDemuxContext, chapters), { .n = matroska_chapter_entry } }, - { MATROSKA_ID_EDITIONUID, EBML_NONE }, - { MATROSKA_ID_EDITIONFLAGHIDDEN, EBML_NONE }, - { MATROSKA_ID_EDITIONFLAGDEFAULT, EBML_NONE }, - { MATROSKA_ID_EDITIONFLAGORDERED, EBML_NONE }, +static EbmlSyntax matroska_edition[] = { + { MATROSKA_ID_EDITIONUID, EBML_UINT, 0, 0, offsetof(MatroskaEdition, uid) }, + { MATROSKA_ID_EDITIONFLAGHIDDEN, EBML_UINT, 0, 0, offsetof(MatroskaEdition, flag_hidden) }, + { MATROSKA_ID_EDITIONFLAGDEFAULT, EBML_UINT, 0, 0, offsetof(MatroskaEdition, flag_default) }, + { MATROSKA_ID_EDITIONFLAGORDERED, EBML_UINT, 0, 0, offsetof(MatroskaEdition, flag_ordered) }, + { MATROSKA_ID_CHAPTERATOM, EBML_NEST, 0, sizeof(MatroskaChapter), offsetof(MatroskaEdition, chapters), { .n = matroska_chapter_entry } }, CHILD_OF(matroska_chapters) }; static EbmlSyntax matroska_chapters[] = { - { MATROSKA_ID_EDITIONENTRY, EBML_NEST, 0, 0, 0, { .n = matroska_chapter } }, + { MATROSKA_ID_EDITIONENTRY, EBML_NEST, 0, sizeof(MatroskaEdition), offsetof(MatroskaDemuxContext, editions), { .n = matroska_edition } }, CHILD_OF(matroska_segment) }; @@ -1884,14 +1885,18 @@ static void matroska_convert_tags(AVFormatContext *s) i, tags[i].target.attachuid); } } else if (tags[i].target.chapteruid) { - MatroskaChapter *chapter = matroska->chapters.elem; + MatroskaEdition *editions = matroska->editions.elem; + MatroskaChapter *chapter; int found = 0; - for (j = 0; j < matroska->chapters.nb_elem; j++) { - if (chapter[j].uid == tags[i].target.chapteruid && - chapter[j].chapter) { + for (j = 0; j < matroska->editions.nb_elem && !found; j++) { + chapter = editions[j].chapters.elem; + for (int k = 0; k < editions[j].chapters.nb_elem; k++) { + if (chapter[k].uid == tags[i].target.chapteruid && + chapter[k].chapter) { matroska_convert_tag(s, &tags[i].tag, - &chapter[j].chapter->metadata, NULL); + &chapter[k].chapter->metadata, NULL); found = 1; + } } } if (!found) { @@ -3328,9 +3333,10 @@ static int matroska_read_header(AVFormatContext *s) FFFormatContext *const si = ffformatcontext(s); MatroskaDemuxContext *matroska = s->priv_data; EbmlList *attachments_list = &matroska->attachments; - EbmlList *chapters_list = &matroska->chapters; MatroskaAttachment *attachments; - MatroskaChapter *chapters; + EbmlList *editions_list = &matroska->editions; + MatroskaEdition *editions; + MatroskaChapter *chapters = NULL; uint64_t max_start = 0; int64_t pos; Ebml ebml = { 0 }; @@ -3456,17 +3462,22 @@ static int matroska_read_header(AVFormatContext *s) } } - chapters = chapters_list->elem; - for (i = 0; i < chapters_list->nb_elem; i++) - if (chapters[i].start != AV_NOPTS_VALUE && chapters[i].uid && - (max_start == 0 || chapters[i].start > max_start)) { - chapters[i].chapter = - avpriv_new_chapter(s, chapters[i].uid, - (AVRational) { 1, 1000000000 }, - chapters[i].start, chapters[i].end, - chapters[i].title); - max_start = chapters[i].start; + editions = editions_list->elem; + for (i = 0; i < editions_list->nb_elem; i++) { + chapters = editions[i].chapters.elem; + + for (j = 0; j < editions[i].chapters.nb_elem; j++) { + if (chapters[j].start != AV_NOPTS_VALUE && chapters[j].uid && + (max_start == 0 || chapters[j].start > max_start)) { + chapters[j].chapter = + avpriv_new_chapter(s, chapters[j].uid, + (AVRational) { 1, 1000000000 }, + chapters[j].start, chapters[j].end, + chapters[j].title); + max_start = chapters[j].start; + } } + } matroska_add_index_entries(matroska); -- 2.51.2 _______________________________________________ ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org