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".