From: Alexander Westberg-Bladh <alexander.bladh@gmail.com> To: ffmpeg-devel@ffmpeg.org Cc: Alexander Westberg-Bladh <alexander.bladh@gmail.com> Subject: [FFmpeg-devel] [PATCH] libavformat/matroskadec: Add support for chapter segment UUID and edition UID Date: Fri, 4 Apr 2025 11:24:05 +0200 Message-ID: <20250404092402.54430-4-alexander.bladh@gmail.com> (raw) 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".
next reply other threads:[~2025-04-04 9:27 UTC|newest] Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top 2025-04-04 9:24 Alexander Westberg-Bladh [this message] 2025-04-04 23:37 ` Michael Niedermayer 2025-04-05 7:57 ` Alexander bladh
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20250404092402.54430-4-alexander.bladh@gmail.com \ --to=alexander.bladh@gmail.com \ --cc=ffmpeg-devel@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git