Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* [FFmpeg-devel] [PATCH] libavformat/matroskadec: Add support for chapter segment UUID and edition UID
@ 2025-04-04  9:24 Alexander Westberg-Bladh
  2025-04-04 23:37 ` Michael Niedermayer
  0 siblings, 1 reply; 3+ messages in thread
From: Alexander Westberg-Bladh @ 2025-04-04  9:24 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Alexander Westberg-Bladh

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

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [FFmpeg-devel] [PATCH] libavformat/matroskadec: Add support for chapter segment UUID and edition UID
  2025-04-04  9:24 [FFmpeg-devel] [PATCH] libavformat/matroskadec: Add support for chapter segment UUID and edition UID Alexander Westberg-Bladh
@ 2025-04-04 23:37 ` Michael Niedermayer
  2025-04-05  7:57   ` Alexander bladh
  0 siblings, 1 reply; 3+ messages in thread
From: Michael Niedermayer @ 2025-04-04 23:37 UTC (permalink / raw)
  To: FFmpeg development discussions and patches


[-- Attachment #1.1: Type: text/plain, Size: 2165 bytes --]

On Fri, Apr 04, 2025 at 11:24:05AM +0200, Alexander Westberg-Bladh wrote:
> 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(-)

breaks fate-h264-direct-bff

==3402053== Invalid read of size 8
==3402053==    at 0x126DCE6: av_buffer_realloc (in ffmpeg/ffmpeg_g)
==3402053==    by 0x67E927: ebml_parse (in ffmpeg/ffmpeg_g)
==3402053==    by 0x67EC84: ebml_parse (in ffmpeg/ffmpeg_g)
==3402053==    by 0x67EC84: ebml_parse (in ffmpeg/ffmpeg_g)
==3402053==    by 0x67F421: matroska_read_header (in ffmpeg/ffmpeg_g)
==3402053==    by 0x625A1E: avformat_open_input (in ffmpeg/ffmpeg_g)
==3402053==    by 0x3054D4: ifile_open (in ffmpeg/ffmpeg_g)
==3402053==    by 0x31C417: open_files.isra.0 (in ffmpeg/ffmpeg_g)
==3402053==    by 0x31E3F5: ffmpeg_parse_options (in ffmpeg/ffmpeg_g)
==3402053==    by 0x2FCD77: main (in ffmpeg/ffmpeg_g)
==3402053==  Address 0x118dd288 is 0 bytes after a block of size 1,672 alloc'd
==3402053==    at 0x483E0F0: memalign (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==3402053==    by 0x483E212: posix_memalign (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==3402053==    by 0x128A524: av_malloc (in ffmpeg/ffmpeg_g)
==3402053==    by 0x128A6ED: av_mallocz (in ffmpeg/ffmpeg_g)
==3402053==    by 0x625DC4: avformat_open_input (in ffmpeg/ffmpeg_g)
==3402053==    by 0x3054D4: ifile_open (in ffmpeg/ffmpeg_g)
==3402053==    by 0x31C417: open_files.isra.0 (in ffmpeg/ffmpeg_g)
==3402053==    by 0x31E3F5: ffmpeg_parse_options (in ffmpeg/ffmpeg_g)
==3402053==    by 0x2FCD77: main (in ffmpeg/ffmpeg_g)


[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

No great genius has ever existed without some touch of madness. -- Aristotle

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]

[-- Attachment #2: Type: text/plain, Size: 251 bytes --]

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

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [FFmpeg-devel] [PATCH] libavformat/matroskadec: Add support for chapter segment UUID and edition UID
  2025-04-04 23:37 ` Michael Niedermayer
@ 2025-04-05  7:57   ` Alexander bladh
  0 siblings, 0 replies; 3+ messages in thread
From: Alexander bladh @ 2025-04-05  7:57 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Sorry, must have messed something up when running the tests locally.
I will also check the warning.

New contributor here, I have been looking at this issue for years now so I
thought I would try to contribute.
https://trac.ffmpeg.org/ticket/3123

My plan is
* Read the extra data needed to support ordered chapters
* Add some data structure tracking external files
* Add an option to search for external segment with related discovery logic
* Implement reading and seeking through external segments

Let me know if you have any feedback.

Regards,
Alexander

On Sat, 5 Apr 2025 at 01:37, Michael Niedermayer <michael@niedermayer.cc>
wrote:

> On Fri, Apr 04, 2025 at 11:24:05AM +0200, Alexander Westberg-Bladh wrote:
> > 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(-)
>
> breaks fate-h264-direct-bff
>
> ==3402053== Invalid read of size 8
> ==3402053==    at 0x126DCE6: av_buffer_realloc (in ffmpeg/ffmpeg_g)
> ==3402053==    by 0x67E927: ebml_parse (in ffmpeg/ffmpeg_g)
> ==3402053==    by 0x67EC84: ebml_parse (in ffmpeg/ffmpeg_g)
> ==3402053==    by 0x67EC84: ebml_parse (in ffmpeg/ffmpeg_g)
> ==3402053==    by 0x67F421: matroska_read_header (in ffmpeg/ffmpeg_g)
> ==3402053==    by 0x625A1E: avformat_open_input (in ffmpeg/ffmpeg_g)
> ==3402053==    by 0x3054D4: ifile_open (in ffmpeg/ffmpeg_g)
> ==3402053==    by 0x31C417: open_files.isra.0 (in ffmpeg/ffmpeg_g)
> ==3402053==    by 0x31E3F5: ffmpeg_parse_options (in ffmpeg/ffmpeg_g)
> ==3402053==    by 0x2FCD77: main (in ffmpeg/ffmpeg_g)
> ==3402053==  Address 0x118dd288 is 0 bytes after a block of size 1,672
> alloc'd
> ==3402053==    at 0x483E0F0: memalign (in
> /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==3402053==    by 0x483E212: posix_memalign (in
> /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==3402053==    by 0x128A524: av_malloc (in ffmpeg/ffmpeg_g)
> ==3402053==    by 0x128A6ED: av_mallocz (in ffmpeg/ffmpeg_g)
> ==3402053==    by 0x625DC4: avformat_open_input (in ffmpeg/ffmpeg_g)
> ==3402053==    by 0x3054D4: ifile_open (in ffmpeg/ffmpeg_g)
> ==3402053==    by 0x31C417: open_files.isra.0 (in ffmpeg/ffmpeg_g)
> ==3402053==    by 0x31E3F5: ffmpeg_parse_options (in ffmpeg/ffmpeg_g)
> ==3402053==    by 0x2FCD77: main (in ffmpeg/ffmpeg_g)
>
>
> [...]
> --
> Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
>
> No great genius has ever existed without some touch of madness. --
> Aristotle
> _______________________________________________
> 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".
>
_______________________________________________
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".

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2025-04-05  7:58 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-04-04  9:24 [FFmpeg-devel] [PATCH] libavformat/matroskadec: Add support for chapter segment UUID and edition UID Alexander Westberg-Bladh
2025-04-04 23:37 ` Michael Niedermayer
2025-04-05  7:57   ` Alexander bladh

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