From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <ffmpeg-devel-bounces@ffmpeg.org>
Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100])
	by master.gitmailbox.com (Postfix) with ESMTPS id B2DE84BD28
	for <ffmpegdev@gitmailbox.com>; Fri,  4 Apr 2025 09:27:19 +0000 (UTC)
Received: from [127.0.1.1] (localhost [127.0.0.1])
	by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 14DD4689D6E;
	Fri,  4 Apr 2025 12:27:16 +0300 (EEST)
Received: from mail-lf1-f45.google.com (mail-lf1-f45.google.com
 [209.85.167.45])
 by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 79572687C93
 for <ffmpeg-devel@ffmpeg.org>; Fri,  4 Apr 2025 12:27:08 +0300 (EEST)
Received: by mail-lf1-f45.google.com with SMTP id
 2adb3069b0e04-5499614d3d2so2017136e87.3
 for <ffmpeg-devel@ffmpeg.org>; Fri, 04 Apr 2025 02:27:08 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1743758827; x=1744363627; darn=ffmpeg.org;
 h=content-transfer-encoding:mime-version:message-id:date:subject:cc
 :to:from:from:to:cc:subject:date:message-id:reply-to;
 bh=N0E127WaUvah9VFSub+OfYGqD1ZGrbKigxga7bXlAKA=;
 b=GrP/h6QFSLDliDNHmDz8tkppuZcRQ2fIJbTdvh7NrTioXIJ70UKzDC6Fmw12RvB3g4
 q76EWut7MBv9ey+In4zPviSq3SnXROBKaPW8e6IydanlziDq/I/Gwm4Mdsdv0N3ynaew
 OchQtXlF0B6DPuA9V+EKvtsSwxEnt3MFZqNV1O5euBzZwaJP0D/YLidpN14HsO3o3+kI
 lUFGvCiKAkUlqNKK67bxQ/VBI7k124sUcfkuhah0bHu1ikNJaUUkuIsNarSClmG9GAZc
 2kGIay72vwpcL7841FxSF5xPoAGzU1jtP9LYIhknzdjDqSAWO9w4V0tPjSP5FcEUFRQg
 md1g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1743758827; x=1744363627;
 h=content-transfer-encoding:mime-version:message-id:date:subject:cc
 :to:from:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=N0E127WaUvah9VFSub+OfYGqD1ZGrbKigxga7bXlAKA=;
 b=j183k+ONdL1o6XYomix1o1MUN/jgax569J2/XjQfXeIYxLYF71G1ktMWJMzkV9yGTq
 yQvaC1J1lPd1/U7LlFZ+My+B8UUnAz/ceqojJwFrIJ3LUf4i+5aZhXG6ZWdEryr+bx87
 ONVuXiQIEwybpKW/0OCV9FmXCrhAtRj/QHWLIdUaQOBddFGm6BsXHfv8P25+gmlehmdx
 OxNv5XeV+U24tK4kzZ99KXWdeA4ebfMqLQDLwHzhHoeXmTZQ8XAAg4Y1Q/MqFkk2X60t
 8f4EpAfs0N4ve3wIcb8qJGc8kj8a7qN2D7XOyAOZuGWAT1w5pK/Mv6iNxVfdelvwgIJ8
 B9oQ==
X-Gm-Message-State: AOJu0YxlYw3tU8ISshEKtIN4VVhwsWq7edMPRH8UDrt01mEoSAYw62UJ
 cKE3YuQNsS/dmCNKoQGVxba/uAWKCYeSKeE5RN+iohmqw4Uv0rL/KNGrQA==
X-Gm-Gg: ASbGncuIU07o0nsVOirh86eKAooKEX0dGvO2bpy5EWVd51QyJGVr8SLPntlzZLOnKWo
 Tx6DjgdIH3J82Ejeave7wlpFY7VLsDE2emUqKLrlJyj3vcQWxpVSeZaaj/zNG7oDV/lv95EQBOD
 Kd7IUTBLoF5UaV3RjfW/9Zd4ZmvjRUYbV6zBFrzJLJqaLtqNiHBx1FvgCoMMh5Xif+lD8tLndMN
 9eB5+2+tHa5sxcfcSqxDkd1BOZSaTgvfvV/Qz7Kc0HlRzZMvZIx6IpJhbcZjLu5xA4+khnac6ep
 XD7zJdE9IsUulcjq1qEU+I0EwCNOeuKvkoyTUkZvv8dXT1kTqLrDE1bKKdAgyqB3Bvt26OKgfwi
 r2e9DT5rcWE18PNJbBrEwRrhkCqNu
X-Google-Smtp-Source: AGHT+IFSUI5pvA7Cdy+pl9E56rSIYUtWRSV6j/zFxgzHA1yAtlkY4oGO/VfglgfKKOExJuoDVZiIRw==
X-Received: by 2002:a05:6512:4010:b0:545:b28:2fa2 with SMTP id
 2adb3069b0e04-54c232bf03amr603601e87.7.1743758827331; 
 Fri, 04 Apr 2025 02:27:07 -0700 (PDT)
Received: from jb-Pixel-8.eh.lan (89-160-62-194.cust.bredband2.com.
 [89.160.62.194]) by smtp.gmail.com with ESMTPSA id
 2adb3069b0e04-54c1e5c309dsm379683e87.102.2025.04.04.02.27.06
 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256);
 Fri, 04 Apr 2025 02:27:06 -0700 (PDT)
From: Alexander Westberg-Bladh <alexander.bladh@gmail.com>
To: ffmpeg-devel@ffmpeg.org
Date: Fri,  4 Apr 2025 11:24:05 +0200
Message-ID: <20250404092402.54430-4-alexander.bladh@gmail.com>
X-Mailer: git-send-email 2.48.1
MIME-Version: 1.0
Subject: [FFmpeg-devel] [PATCH] libavformat/matroskadec: Add support for
 chapter segment UUID and edition UID
X-BeenThere: ffmpeg-devel@ffmpeg.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: FFmpeg development discussions and patches <ffmpeg-devel.ffmpeg.org>
List-Unsubscribe: <https://ffmpeg.org/mailman/options/ffmpeg-devel>,
 <mailto:ffmpeg-devel-request@ffmpeg.org?subject=unsubscribe>
List-Archive: <https://ffmpeg.org/pipermail/ffmpeg-devel>
List-Post: <mailto:ffmpeg-devel@ffmpeg.org>
List-Help: <mailto:ffmpeg-devel-request@ffmpeg.org?subject=help>
List-Subscribe: <https://ffmpeg.org/mailman/listinfo/ffmpeg-devel>,
 <mailto:ffmpeg-devel-request@ffmpeg.org?subject=subscribe>
Reply-To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Cc: Alexander Westberg-Bladh <alexander.bladh@gmail.com>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Errors-To: ffmpeg-devel-bounces@ffmpeg.org
Sender: "ffmpeg-devel" <ffmpeg-devel-bounces@ffmpeg.org>
Archived-At: <https://master.gitmailbox.com/ffmpegdev/20250404092402.54430-4-alexander.bladh@gmail.com/>
List-Archive: <https://master.gitmailbox.com/ffmpegdev/>
List-Post: <mailto:ffmpegdev@gitmailbox.com>

This adds support for parsing ChapterSegmentUID and ChapterSegmentEditionUID
elements in Matroska chapters. These elements are used in ordered chapters
to reference external files see #3123.

Signed-off-by: Alexander Westberg-Bladh <alexander.bladh@gmail.com>
---
 libavformat/matroska.h    |  3 +++
 libavformat/matroskadec.c | 32 ++++++++++++++++++++------------
 2 files changed, 23 insertions(+), 12 deletions(-)

diff --git a/libavformat/matroska.h b/libavformat/matroska.h
index 719f2ef796..5f617aa287 100644
--- a/libavformat/matroska.h
+++ b/libavformat/matroska.h
@@ -275,6 +275,9 @@
 #define MATROSKA_ID_CHAPTERFLAGENABLED  0x4598
 #define MATROSKA_ID_CHAPTERPHYSEQUIV    0x63C3
 
+#define MATROSKA_ID_CHAPTERSEGMENTUID         0x6E67
+#define MATROSKA_ID_CHAPTERSEGMENTEDITIONUID  0x6EBC
+
 typedef enum {
   MATROSKA_TRACK_TYPE_NONE     = 0x0,
   MATROSKA_TRACK_TYPE_VIDEO    = 0x1,
diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
index d4b7ae112c..e5c6eb74e2 100644
--- a/libavformat/matroskadec.c
+++ b/libavformat/matroskadec.c
@@ -312,6 +312,8 @@ typedef struct MatroskaChapter {
     uint64_t end;
     uint64_t uid;
     char    *title;
+    EbmlBin  segment_uid;
+    uint64_t segment_edition_uid;
 
     AVChapter *chapter;
 } MatroskaChapter;
@@ -438,6 +440,10 @@ typedef struct MatroskaDemuxContext {
 
     /* Bandwidth value for WebM DASH Manifest */
     int bandwidth;
+
+    /* Ordered chapters flag */
+    int ordered_chapters;
+    int segment_uid;
 } MatroskaDemuxContext;
 
 #define CHILD_OF(parent) { .def = { .n = parent } }
@@ -475,9 +481,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)
 };
 
@@ -669,14 +675,16 @@ 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 },
+    { 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 },
+    { MATROSKA_ID_CHAPTERATOM,              EBML_NONE },
     CHILD_OF(matroska_chapter)
 };
 
@@ -685,7 +693,7 @@ static EbmlSyntax matroska_chapter[] = {
     { MATROSKA_ID_EDITIONUID,         EBML_NONE },
     { MATROSKA_ID_EDITIONFLAGHIDDEN,  EBML_NONE },
     { MATROSKA_ID_EDITIONFLAGDEFAULT, EBML_NONE },
-    { MATROSKA_ID_EDITIONFLAGORDERED, EBML_NONE },
+    { MATROSKA_ID_EDITIONFLAGORDERED, EBML_UINT, 0, 0, offsetof(MatroskaDemuxContext, ordered_chapters) },
     CHILD_OF(matroska_chapters)
 };
 
-- 
2.48.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".