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 00/12] Use generated semantic for Matroska demuxer
@ 2022-11-06 15:08 Steve Lhomme
  2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 01/12] avformat/matroskadec: fix the default of the TagDefault element Steve Lhomme
                   ` (11 more replies)
  0 siblings, 12 replies; 13+ messages in thread
From: Steve Lhomme @ 2022-11-06 15:08 UTC (permalink / raw)
  To: ffmpeg-devel

From: robux4 <robux4@Envy15j.localdomain>

Following an earlier version of the generated code, I reworked to code and move 
the generator outside of the FFmpeg source tree.

The XSLT code to generate this code from the EBML Schema for Matroska can be
found at https://github.com/Matroska-Org/foundation-source/pull/116

Steve Lhomme (12):
  avformat/matroskadec: fix the default of the TagDefault element
  avformat/matroskadec: remove some implicit default value
  avformat/matroska: use more consistent spacing in enums
  avformat/matroska: move Matroska IDs and enums in a separate header
  avformat/matroskadec: move the elements semantic in a separate file
  avformat/matroska_ids: move some IDs in separate sections
  avformat/matroska_ids: reorder some IDs to match the generated order
  avformat/matroskasem: reorder EbmlSyntax tables
  avformat/matroskasem: reorder some EbmlSyntax elements
  avformat/matroska: use the generated semantic files
  avformat/matroska: only export a few elements.
  avformat/matroska: add missing elements

 libavformat/Makefile       |   2 +-
 libavformat/matroska.h     | 314 +---------------
 libavformat/matroska_ids.h | 464 ++++++++++++++++++++++++
 libavformat/matroskadec.c  | 712 +------------------------------------
 libavformat/matroskasem.c  | 471 ++++++++++++++++++++++++
 libavformat/matroskasem.h  | 389 ++++++++++++++++++++
 6 files changed, 1327 insertions(+), 1025 deletions(-)
 create mode 100644 libavformat/matroska_ids.h
 create mode 100644 libavformat/matroskasem.c
 create mode 100644 libavformat/matroskasem.h

-- 
2.20.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] 13+ messages in thread

* [FFmpeg-devel] [PATCH 01/12] avformat/matroskadec: fix the default of the TagDefault element
  2022-11-06 15:08 [FFmpeg-devel] [PATCH 00/12] Use generated semantic for Matroska demuxer Steve Lhomme
@ 2022-11-06 15:08 ` Steve Lhomme
  2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 02/12] avformat/matroskadec: remove some implicit default value Steve Lhomme
                   ` (10 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: Steve Lhomme @ 2022-11-06 15:08 UTC (permalink / raw)
  To: ffmpeg-devel

By default a tag is the default one.
---
 libavformat/matroskadec.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
index d582f566a2..9e756bb030 100644
--- a/libavformat/matroskadec.c
+++ b/libavformat/matroskadec.c
@@ -703,8 +703,8 @@ static EbmlSyntax matroska_simpletag[] = {
     { MATROSKA_ID_TAGNAME,        EBML_UTF8, 0, 0,                   offsetof(MatroskaTag, name) },
     { MATROSKA_ID_TAGSTRING,      EBML_UTF8, 0, 0,                   offsetof(MatroskaTag, string) },
     { MATROSKA_ID_TAGLANG,        EBML_STR,  0, 0,                   offsetof(MatroskaTag, lang), { .s = "und" } },
-    { MATROSKA_ID_TAGDEFAULT,     EBML_UINT, 0, 0,                   offsetof(MatroskaTag, def) },
-    { MATROSKA_ID_TAGDEFAULT_BUG, EBML_UINT, 0, 0,                   offsetof(MatroskaTag, def) },
+    { MATROSKA_ID_TAGDEFAULT,     EBML_UINT, 0, 0,                   offsetof(MatroskaTag, def), { .u = 1 } },
+    { MATROSKA_ID_TAGDEFAULT_BUG, EBML_UINT, 0, 0,                   offsetof(MatroskaTag, def), { .u = 1 } },
     { MATROSKA_ID_SIMPLETAG,      EBML_NEST, 0, sizeof(MatroskaTag), offsetof(MatroskaTag, sub),  { .n = matroska_simpletag } },
     CHILD_OF(matroska_tag)
 };
-- 
2.20.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] 13+ messages in thread

* [FFmpeg-devel] [PATCH 02/12] avformat/matroskadec: remove some implicit default value
  2022-11-06 15:08 [FFmpeg-devel] [PATCH 00/12] Use generated semantic for Matroska demuxer Steve Lhomme
  2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 01/12] avformat/matroskadec: fix the default of the TagDefault element Steve Lhomme
@ 2022-11-06 15:08 ` Steve Lhomme
  2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 03/12] avformat/matroska: use more consistent spacing in enums Steve Lhomme
                   ` (9 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: Steve Lhomme @ 2022-11-06 15:08 UTC (permalink / raw)
  To: ffmpeg-devel

All integers should be initialized to 0. Make the tables more consistent by
only setting non zero values, so they stand out.
---
 libavformat/matroskadec.c | 32 ++++++++++++++++----------------
 1 file changed, 16 insertions(+), 16 deletions(-)

diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
index 9e756bb030..5a083acd75 100644
--- a/libavformat/matroskadec.c
+++ b/libavformat/matroskadec.c
@@ -482,7 +482,7 @@ static EbmlSyntax matroska_mastering_meta[] = {
 
 static EbmlSyntax matroska_track_video_color[] = {
     { MATROSKA_ID_VIDEOCOLORMATRIXCOEFF,      EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, matrix_coefficients), { .u = AVCOL_SPC_UNSPECIFIED } },
-    { MATROSKA_ID_VIDEOCOLORBITSPERCHANNEL,   EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, bits_per_channel), { .u = 0 } },
+    { MATROSKA_ID_VIDEOCOLORBITSPERCHANNEL,   EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, bits_per_channel) },
     { MATROSKA_ID_VIDEOCOLORCHROMASUBHORZ,    EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, chroma_sub_horz) },
     { MATROSKA_ID_VIDEOCOLORCHROMASUBVERT,    EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, chroma_sub_vert) },
     { MATROSKA_ID_VIDEOCOLORCBSUBHORZ,        EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, cb_sub_horz) },
@@ -514,7 +514,7 @@ static EbmlSyntax matroska_track_video[] = {
     { MATROSKA_ID_VIDEOPIXELWIDTH,     EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, pixel_width) },
     { MATROSKA_ID_VIDEOPIXELHEIGHT,    EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, pixel_height) },
     { MATROSKA_ID_VIDEOCOLORSPACE,     EBML_BIN,   0, 0, offsetof(MatroskaTrackVideo, color_space) },
-    { MATROSKA_ID_VIDEOALPHAMODE,      EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, alpha_mode), { .u = 0 } },
+    { MATROSKA_ID_VIDEOALPHAMODE,      EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, alpha_mode) },
     { MATROSKA_ID_VIDEOCOLOR,          EBML_NEST,  0, sizeof(MatroskaTrackVideoColor), offsetof(MatroskaTrackVideo, color), { .n = matroska_track_video_color } },
     { MATROSKA_ID_VIDEOPROJECTION,     EBML_NEST,  0, 0, offsetof(MatroskaTrackVideo, projection), { .n = matroska_track_video_projection } },
     { MATROSKA_ID_VIDEOPIXELCROPB,     EBML_NONE },
@@ -544,7 +544,7 @@ static EbmlSyntax matroska_track_encoding_compression[] = {
 };
 
 static EbmlSyntax matroska_track_encoding_encryption[] = {
-    { MATROSKA_ID_ENCODINGENCALGO,        EBML_UINT, 0, 0, offsetof(MatroskaTrackEncryption,algo), {.u = 0} },
+    { MATROSKA_ID_ENCODINGENCALGO,        EBML_UINT, 0, 0, offsetof(MatroskaTrackEncryption,algo) },
     { MATROSKA_ID_ENCODINGENCKEYID,       EBML_BIN, 0, 0, offsetof(MatroskaTrackEncryption,key_id) },
     { MATROSKA_ID_ENCODINGENCAESSETTINGS, EBML_NONE },
     { MATROSKA_ID_ENCODINGSIGALGO,        EBML_NONE },
@@ -555,7 +555,7 @@ static EbmlSyntax matroska_track_encoding_encryption[] = {
 };
 static EbmlSyntax matroska_track_encoding[] = {
     { MATROSKA_ID_ENCODINGSCOPE,       EBML_UINT, 0, 0, offsetof(MatroskaTrackEncoding, scope),       { .u = 1 } },
-    { MATROSKA_ID_ENCODINGTYPE,        EBML_UINT, 0, 0, offsetof(MatroskaTrackEncoding, type),        { .u = 0 } },
+    { MATROSKA_ID_ENCODINGTYPE,        EBML_UINT, 0, 0, offsetof(MatroskaTrackEncoding, type) },
     { MATROSKA_ID_ENCODINGCOMPRESSION, EBML_NEST, 0, 0, offsetof(MatroskaTrackEncoding, compression), { .n = matroska_track_encoding_compression } },
     { MATROSKA_ID_ENCODINGENCRYPTION,  EBML_NEST, 0, 0, offsetof(MatroskaTrackEncoding, encryption),  { .n = matroska_track_encoding_encryption } },
     { MATROSKA_ID_ENCODINGORDER,       EBML_NONE },
@@ -598,24 +598,24 @@ static EbmlSyntax matroska_track[] = {
     { MATROSKA_ID_TRACKTYPE,             EBML_UINT,  0, 0, offsetof(MatroskaTrack, type) },
     { MATROSKA_ID_CODECID,               EBML_STR,   0, 0, offsetof(MatroskaTrack, codec_id) },
     { MATROSKA_ID_CODECPRIVATE,          EBML_BIN,   0, 0, offsetof(MatroskaTrack, codec_priv) },
-    { MATROSKA_ID_CODECDELAY,            EBML_UINT,  0, 0, offsetof(MatroskaTrack, codec_delay),  { .u = 0 } },
+    { MATROSKA_ID_CODECDELAY,            EBML_UINT,  0, 0, offsetof(MatroskaTrack, codec_delay) },
     { MATROSKA_ID_TRACKLANGUAGE,         EBML_STR,   0, 0, offsetof(MatroskaTrack, language),     { .s = "eng" } },
     { MATROSKA_ID_TRACKDEFAULTDURATION,  EBML_UINT,  0, 0, offsetof(MatroskaTrack, default_duration) },
     { MATROSKA_ID_TRACKTIMECODESCALE,    EBML_FLOAT, 0, 0, offsetof(MatroskaTrack, time_scale),   { .f = 1.0 } },
-    { MATROSKA_ID_TRACKFLAGCOMMENTARY,   EBML_UINT,  0, 0, offsetof(MatroskaTrack, flag_comment), { .u = 0 } },
+    { MATROSKA_ID_TRACKFLAGCOMMENTARY,   EBML_UINT,  0, 0, offsetof(MatroskaTrack, flag_comment) },
     { MATROSKA_ID_TRACKFLAGDEFAULT,      EBML_UINT,  0, 0, offsetof(MatroskaTrack, flag_default), { .u = 1 } },
-    { MATROSKA_ID_TRACKFLAGFORCED,       EBML_UINT,  0, 0, offsetof(MatroskaTrack, flag_forced),  { .u = 0 } },
-    { MATROSKA_ID_TRACKFLAGHEARINGIMPAIRED, EBML_UINT, 0, 0, offsetof(MatroskaTrack, flag_hearingimpaired), { .u = 0 } },
-    { MATROSKA_ID_TRACKFLAGVISUALIMPAIRED, EBML_UINT, 0, 0, offsetof(MatroskaTrack, flag_visualimpaired), { .u = 0 } },
-    { MATROSKA_ID_TRACKFLAGTEXTDESCRIPTIONS, EBML_UINT, 0, 0, offsetof(MatroskaTrack, flag_textdescriptions), { .u = 0 } },
-    { MATROSKA_ID_TRACKFLAGORIGINAL,     EBML_UINT,  1, 0, offsetof(MatroskaTrack, flag_original), {.u = 0 } },
+    { MATROSKA_ID_TRACKFLAGFORCED,       EBML_UINT,  0, 0, offsetof(MatroskaTrack, flag_forced) },
+    { MATROSKA_ID_TRACKFLAGHEARINGIMPAIRED, EBML_UINT, 0, 0, offsetof(MatroskaTrack, flag_hearingimpaired) },
+    { MATROSKA_ID_TRACKFLAGVISUALIMPAIRED, EBML_UINT, 0, 0, offsetof(MatroskaTrack, flag_visualimpaired) },
+    { MATROSKA_ID_TRACKFLAGTEXTDESCRIPTIONS, EBML_UINT, 0, 0, offsetof(MatroskaTrack, flag_textdescriptions) },
+    { MATROSKA_ID_TRACKFLAGORIGINAL,     EBML_UINT,  1, 0, offsetof(MatroskaTrack, flag_original) },
     { MATROSKA_ID_TRACKVIDEO,            EBML_NEST,  0, 0, offsetof(MatroskaTrack, video),        { .n = matroska_track_video } },
     { MATROSKA_ID_TRACKAUDIO,            EBML_NEST,  0, 0, offsetof(MatroskaTrack, audio),        { .n = matroska_track_audio } },
     { MATROSKA_ID_TRACKOPERATION,        EBML_NEST,  0, 0, offsetof(MatroskaTrack, operation),    { .n = matroska_track_operation } },
     { MATROSKA_ID_TRACKCONTENTENCODINGS, EBML_NEST,  0, 0, 0,                                     { .n = matroska_track_encodings } },
-    { MATROSKA_ID_TRACKMAXBLKADDID,      EBML_UINT,  0, 0, offsetof(MatroskaTrack, max_block_additional_id), { .u = 0 } },
+    { MATROSKA_ID_TRACKMAXBLKADDID,      EBML_UINT,  0, 0, offsetof(MatroskaTrack, max_block_additional_id) },
     { MATROSKA_ID_TRACKBLKADDMAPPING,    EBML_NEST,  0, sizeof(MatroskaBlockAdditionMapping), offsetof(MatroskaTrack, block_addition_mappings), { .n = matroska_block_addition_mapping } },
-    { MATROSKA_ID_SEEKPREROLL,           EBML_UINT,  0, 0, offsetof(MatroskaTrack, seek_preroll), { .u = 0 } },
+    { MATROSKA_ID_SEEKPREROLL,           EBML_UINT,  0, 0, offsetof(MatroskaTrack, seek_preroll) },
     { MATROSKA_ID_TRACKFLAGENABLED,      EBML_NONE },
     { MATROSKA_ID_TRACKFLAGLACING,       EBML_NONE },
     { MATROSKA_ID_CODECNAME,             EBML_NONE },
@@ -712,9 +712,9 @@ static EbmlSyntax matroska_simpletag[] = {
 static EbmlSyntax matroska_tagtargets[] = {
     { MATROSKA_ID_TAGTARGETS_TYPE,       EBML_STR,  0, 0, offsetof(MatroskaTagTarget, type) },
     { MATROSKA_ID_TAGTARGETS_TYPEVALUE,  EBML_UINT, 0, 0, offsetof(MatroskaTagTarget, typevalue),  { .u = 50 } },
-    { MATROSKA_ID_TAGTARGETS_TRACKUID,   EBML_UINT, 0, 0, offsetof(MatroskaTagTarget, trackuid),   { .u = 0 } },
-    { MATROSKA_ID_TAGTARGETS_CHAPTERUID, EBML_UINT, 0, 0, offsetof(MatroskaTagTarget, chapteruid), { .u = 0 } },
-    { MATROSKA_ID_TAGTARGETS_ATTACHUID,  EBML_UINT, 0, 0, offsetof(MatroskaTagTarget, attachuid),  { .u = 0 } },
+    { MATROSKA_ID_TAGTARGETS_TRACKUID,   EBML_UINT, 0, 0, offsetof(MatroskaTagTarget, trackuid) },
+    { MATROSKA_ID_TAGTARGETS_CHAPTERUID, EBML_UINT, 0, 0, offsetof(MatroskaTagTarget, chapteruid) },
+    { MATROSKA_ID_TAGTARGETS_ATTACHUID,  EBML_UINT, 0, 0, offsetof(MatroskaTagTarget, attachuid) },
     CHILD_OF(matroska_tag)
 };
 
-- 
2.20.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] 13+ messages in thread

* [FFmpeg-devel] [PATCH 03/12] avformat/matroska: use more consistent spacing in enums
  2022-11-06 15:08 [FFmpeg-devel] [PATCH 00/12] Use generated semantic for Matroska demuxer Steve Lhomme
  2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 01/12] avformat/matroskadec: fix the default of the TagDefault element Steve Lhomme
  2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 02/12] avformat/matroskadec: remove some implicit default value Steve Lhomme
@ 2022-11-06 15:08 ` Steve Lhomme
  2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 04/12] avformat/matroska: move Matroska IDs and enums in a separate header Steve Lhomme
                   ` (8 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: Steve Lhomme @ 2022-11-06 15:08 UTC (permalink / raw)
  To: ffmpeg-devel

---
 libavformat/matroska.h | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/libavformat/matroska.h b/libavformat/matroska.h
index 45077ed33f..1e8a91295f 100644
--- a/libavformat/matroska.h
+++ b/libavformat/matroska.h
@@ -296,18 +296,18 @@ typedef enum {
 } MatroskaTrackEncodingCompAlgo;
 
 typedef enum {
-    MATROSKA_VIDEO_INTERLACE_FLAG_UNDETERMINED = 0,
-    MATROSKA_VIDEO_INTERLACE_FLAG_INTERLACED   = 1,
-    MATROSKA_VIDEO_INTERLACE_FLAG_PROGRESSIVE  = 2,
+  MATROSKA_VIDEO_INTERLACE_FLAG_UNDETERMINED = 0,
+  MATROSKA_VIDEO_INTERLACE_FLAG_INTERLACED   = 1,
+  MATROSKA_VIDEO_INTERLACE_FLAG_PROGRESSIVE  = 2,
 } MatroskaVideoInterlaceFlag;
 
 typedef enum {
-    MATROSKA_VIDEO_FIELDORDER_PROGRESSIVE  = 0,
-    MATROSKA_VIDEO_FIELDORDER_TT           = 1,
-    MATROSKA_VIDEO_FIELDORDER_UNDETERMINED = 2,
-    MATROSKA_VIDEO_FIELDORDER_BB           = 6,
-    MATROSKA_VIDEO_FIELDORDER_TB           = 9,
-    MATROSKA_VIDEO_FIELDORDER_BT           = 14,
+  MATROSKA_VIDEO_FIELDORDER_PROGRESSIVE  = 0,
+  MATROSKA_VIDEO_FIELDORDER_TT           = 1,
+  MATROSKA_VIDEO_FIELDORDER_UNDETERMINED = 2,
+  MATROSKA_VIDEO_FIELDORDER_BB           = 6,
+  MATROSKA_VIDEO_FIELDORDER_TB           = 9,
+  MATROSKA_VIDEO_FIELDORDER_BT           = 14,
 } MatroskaVideoFieldOrder;
 
 typedef enum {
-- 
2.20.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] 13+ messages in thread

* [FFmpeg-devel] [PATCH 04/12] avformat/matroska: move Matroska IDs and enums in a separate header
  2022-11-06 15:08 [FFmpeg-devel] [PATCH 00/12] Use generated semantic for Matroska demuxer Steve Lhomme
                   ` (2 preceding siblings ...)
  2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 03/12] avformat/matroska: use more consistent spacing in enums Steve Lhomme
@ 2022-11-06 15:08 ` Steve Lhomme
  2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 05/12] avformat/matroskadec: move the elements semantic in a separate file Steve Lhomme
                   ` (7 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: Steve Lhomme @ 2022-11-06 15:08 UTC (permalink / raw)
  To: ffmpeg-devel

So the file can be generated from the EBML Schema.

No functional change.
---
 libavformat/matroska.h     | 314 +---------------------------------
 libavformat/matroska_ids.h | 339 +++++++++++++++++++++++++++++++++++++
 2 files changed, 340 insertions(+), 313 deletions(-)
 create mode 100644 libavformat/matroska_ids.h

diff --git a/libavformat/matroska.h b/libavformat/matroska.h
index 1e8a91295f..174af130de 100644
--- a/libavformat/matroska.h
+++ b/libavformat/matroska.h
@@ -24,6 +24,7 @@
 
 #include "libavcodec/codec_id.h"
 #include "avformat.h"
+#include "matroska_ids.h"
 #include "metadata.h"
 
 /* EBML version supported */
@@ -45,319 +46,6 @@
 #define EBML_ID_VOID               0xEC
 #define EBML_ID_CRC32              0xBF
 
-/*
- * Matroska element IDs, max. 32 bits
- */
-
-/* toplevel segment */
-#define MATROSKA_ID_SEGMENT    0x18538067
-
-/* Matroska top-level master IDs */
-#define MATROSKA_ID_INFO       0x1549A966
-#define MATROSKA_ID_TRACKS     0x1654AE6B
-#define MATROSKA_ID_CUES       0x1C53BB6B
-#define MATROSKA_ID_TAGS       0x1254C367
-#define MATROSKA_ID_SEEKHEAD   0x114D9B74
-#define MATROSKA_ID_ATTACHMENTS 0x1941A469
-#define MATROSKA_ID_CLUSTER    0x1F43B675
-#define MATROSKA_ID_CHAPTERS   0x1043A770
-
-/* IDs in the info master */
-#define MATROSKA_ID_TIMECODESCALE 0x2AD7B1
-#define MATROSKA_ID_DURATION   0x4489
-#define MATROSKA_ID_TITLE      0x7BA9
-#define MATROSKA_ID_WRITINGAPP 0x5741
-#define MATROSKA_ID_MUXINGAPP  0x4D80
-#define MATROSKA_ID_DATEUTC    0x4461
-#define MATROSKA_ID_SEGMENTUID 0x73A4
-
-/* ID in the tracks master */
-#define MATROSKA_ID_TRACKENTRY 0xAE
-
-/* IDs in the trackentry master */
-#define MATROSKA_ID_TRACKNUMBER 0xD7
-#define MATROSKA_ID_TRACKUID   0x73C5
-#define MATROSKA_ID_TRACKTYPE  0x83
-#define MATROSKA_ID_TRACKVIDEO     0xE0
-#define MATROSKA_ID_TRACKAUDIO     0xE1
-#define MATROSKA_ID_TRACKOPERATION 0xE2
-#define MATROSKA_ID_TRACKCOMBINEPLANES 0xE3
-#define MATROSKA_ID_TRACKPLANE         0xE4
-#define MATROSKA_ID_TRACKPLANEUID      0xE5
-#define MATROSKA_ID_TRACKPLANETYPE     0xE6
-#define MATROSKA_ID_CODECID    0x86
-#define MATROSKA_ID_CODECPRIVATE 0x63A2
-#define MATROSKA_ID_CODECNAME  0x258688
-#define MATROSKA_ID_CODECINFOURL 0x3B4040
-#define MATROSKA_ID_CODECDOWNLOADURL 0x26B240
-#define MATROSKA_ID_CODECDECODEALL 0xAA
-#define MATROSKA_ID_CODECDELAY 0x56AA
-#define MATROSKA_ID_SEEKPREROLL 0x56BB
-#define MATROSKA_ID_TRACKNAME  0x536E
-#define MATROSKA_ID_TRACKLANGUAGE 0x22B59C
-#define MATROSKA_ID_TRACKFLAGENABLED 0xB9
-#define MATROSKA_ID_TRACKFLAGDEFAULT 0x88
-#define MATROSKA_ID_TRACKFLAGFORCED 0x55AA
-#define MATROSKA_ID_TRACKFLAGHEARINGIMPAIRED  0x55AB
-#define MATROSKA_ID_TRACKFLAGVISUALIMPAIRED   0x55AC
-#define MATROSKA_ID_TRACKFLAGTEXTDESCRIPTIONS 0x55AD
-#define MATROSKA_ID_TRACKFLAGORIGINAL         0x55AE
-#define MATROSKA_ID_TRACKFLAGCOMMENTARY       0x55AF
-#define MATROSKA_ID_TRACKFLAGLACING 0x9C
-#define MATROSKA_ID_TRACKMINCACHE 0x6DE7
-#define MATROSKA_ID_TRACKMAXCACHE 0x6DF8
-#define MATROSKA_ID_TRACKDEFAULTDURATION 0x23E383
-#define MATROSKA_ID_TRACKCONTENTENCODINGS 0x6D80
-#define MATROSKA_ID_TRACKCONTENTENCODING 0x6240
-#define MATROSKA_ID_TRACKTIMECODESCALE 0x23314F
-#define MATROSKA_ID_TRACKMAXBLKADDID 0x55EE
-#define MATROSKA_ID_TRACKBLKADDMAPPING 0x41E4
-
-/* IDs in the trackvideo master */
-#define MATROSKA_ID_VIDEOFRAMERATE 0x2383E3
-#define MATROSKA_ID_VIDEODISPLAYWIDTH 0x54B0
-#define MATROSKA_ID_VIDEODISPLAYHEIGHT 0x54BA
-#define MATROSKA_ID_VIDEOPIXELWIDTH 0xB0
-#define MATROSKA_ID_VIDEOPIXELHEIGHT 0xBA
-#define MATROSKA_ID_VIDEOPIXELCROPB 0x54AA
-#define MATROSKA_ID_VIDEOPIXELCROPT 0x54BB
-#define MATROSKA_ID_VIDEOPIXELCROPL 0x54CC
-#define MATROSKA_ID_VIDEOPIXELCROPR 0x54DD
-#define MATROSKA_ID_VIDEODISPLAYUNIT 0x54B2
-#define MATROSKA_ID_VIDEOFLAGINTERLACED 0x9A
-#define MATROSKA_ID_VIDEOFIELDORDER 0x9D
-#define MATROSKA_ID_VIDEOSTEREOMODE 0x53B8
-#define MATROSKA_ID_VIDEOALPHAMODE 0x53C0
-#define MATROSKA_ID_VIDEOASPECTRATIO 0x54B3
-#define MATROSKA_ID_VIDEOCOLORSPACE 0x2EB524
-#define MATROSKA_ID_VIDEOCOLOR 0x55B0
-
-#define MATROSKA_ID_VIDEOCOLORMATRIXCOEFF 0x55B1
-#define MATROSKA_ID_VIDEOCOLORBITSPERCHANNEL 0x55B2
-#define MATROSKA_ID_VIDEOCOLORCHROMASUBHORZ 0x55B3
-#define MATROSKA_ID_VIDEOCOLORCHROMASUBVERT 0x55B4
-#define MATROSKA_ID_VIDEOCOLORCBSUBHORZ 0x55B5
-#define MATROSKA_ID_VIDEOCOLORCBSUBVERT 0x55B6
-#define MATROSKA_ID_VIDEOCOLORCHROMASITINGHORZ 0x55B7
-#define MATROSKA_ID_VIDEOCOLORCHROMASITINGVERT 0x55B8
-#define MATROSKA_ID_VIDEOCOLORRANGE 0x55B9
-#define MATROSKA_ID_VIDEOCOLORTRANSFERCHARACTERISTICS 0x55BA
-
-#define MATROSKA_ID_VIDEOCOLORPRIMARIES 0x55BB
-#define MATROSKA_ID_VIDEOCOLORMAXCLL 0x55BC
-#define MATROSKA_ID_VIDEOCOLORMAXFALL 0x55BD
-
-#define MATROSKA_ID_VIDEOCOLORMASTERINGMETA 0x55D0
-#define MATROSKA_ID_VIDEOCOLOR_RX 0x55D1
-#define MATROSKA_ID_VIDEOCOLOR_RY 0x55D2
-#define MATROSKA_ID_VIDEOCOLOR_GX 0x55D3
-#define MATROSKA_ID_VIDEOCOLOR_GY 0x55D4
-#define MATROSKA_ID_VIDEOCOLOR_BX 0x55D5
-#define MATROSKA_ID_VIDEOCOLOR_BY 0x55D6
-#define MATROSKA_ID_VIDEOCOLOR_WHITEX 0x55D7
-#define MATROSKA_ID_VIDEOCOLOR_WHITEY 0x55D8
-#define MATROSKA_ID_VIDEOCOLOR_LUMINANCEMAX 0x55D9
-#define MATROSKA_ID_VIDEOCOLOR_LUMINANCEMIN 0x55DA
-
-#define MATROSKA_ID_VIDEOPROJECTION 0x7670
-#define MATROSKA_ID_VIDEOPROJECTIONTYPE 0x7671
-#define MATROSKA_ID_VIDEOPROJECTIONPRIVATE 0x7672
-#define MATROSKA_ID_VIDEOPROJECTIONPOSEYAW 0x7673
-#define MATROSKA_ID_VIDEOPROJECTIONPOSEPITCH 0x7674
-#define MATROSKA_ID_VIDEOPROJECTIONPOSEROLL 0x7675
-
-/* IDs in the trackaudio master */
-#define MATROSKA_ID_AUDIOSAMPLINGFREQ 0xB5
-#define MATROSKA_ID_AUDIOOUTSAMPLINGFREQ 0x78B5
-
-#define MATROSKA_ID_AUDIOBITDEPTH 0x6264
-#define MATROSKA_ID_AUDIOCHANNELS 0x9F
-
-/* IDs in the content encoding master */
-#define MATROSKA_ID_ENCODINGORDER 0x5031
-#define MATROSKA_ID_ENCODINGSCOPE 0x5032
-#define MATROSKA_ID_ENCODINGTYPE 0x5033
-#define MATROSKA_ID_ENCODINGCOMPRESSION 0x5034
-#define MATROSKA_ID_ENCODINGCOMPALGO 0x4254
-#define MATROSKA_ID_ENCODINGCOMPSETTINGS 0x4255
-
-#define MATROSKA_ID_ENCODINGENCRYPTION 0x5035
-#define MATROSKA_ID_ENCODINGENCAESSETTINGS 0x47E7
-#define MATROSKA_ID_ENCODINGENCALGO 0x47E1
-#define MATROSKA_ID_ENCODINGENCKEYID 0x47E2
-#define MATROSKA_ID_ENCODINGSIGALGO 0x47E5
-#define MATROSKA_ID_ENCODINGSIGHASHALGO 0x47E6
-#define MATROSKA_ID_ENCODINGSIGKEYID 0x47E4
-#define MATROSKA_ID_ENCODINGSIGNATURE 0x47E3
-
-/* IDs in the block addition mapping master */
-#define MATROSKA_ID_BLKADDIDVALUE 0x41F0
-#define MATROSKA_ID_BLKADDIDNAME 0x41A4
-#define MATROSKA_ID_BLKADDIDTYPE 0x41E7
-#define MATROSKA_ID_BLKADDIDEXTRADATA 0x41ED
-
-/* ID in the cues master */
-#define MATROSKA_ID_POINTENTRY 0xBB
-
-/* IDs in the pointentry master */
-#define MATROSKA_ID_CUETIME    0xB3
-#define MATROSKA_ID_CUETRACKPOSITION 0xB7
-
-/* IDs in the cuetrackposition master */
-#define MATROSKA_ID_CUETRACK   0xF7
-#define MATROSKA_ID_CUECLUSTERPOSITION 0xF1
-#define MATROSKA_ID_CUERELATIVEPOSITION 0xF0
-#define MATROSKA_ID_CUEDURATION 0xB2
-#define MATROSKA_ID_CUEBLOCKNUMBER 0x5378
-
-/* IDs in the tags master */
-#define MATROSKA_ID_TAG                 0x7373
-#define MATROSKA_ID_SIMPLETAG           0x67C8
-#define MATROSKA_ID_TAGNAME             0x45A3
-#define MATROSKA_ID_TAGSTRING           0x4487
-#define MATROSKA_ID_TAGLANG             0x447A
-#define MATROSKA_ID_TAGDEFAULT          0x4484
-#define MATROSKA_ID_TAGDEFAULT_BUG      0x44B4
-#define MATROSKA_ID_TAGTARGETS          0x63C0
-#define MATROSKA_ID_TAGTARGETS_TYPE       0x63CA
-#define MATROSKA_ID_TAGTARGETS_TYPEVALUE  0x68CA
-#define MATROSKA_ID_TAGTARGETS_TRACKUID   0x63C5
-#define MATROSKA_ID_TAGTARGETS_CHAPTERUID 0x63C4
-#define MATROSKA_ID_TAGTARGETS_ATTACHUID  0x63C6
-
-/* IDs in the seekhead master */
-#define MATROSKA_ID_SEEKENTRY  0x4DBB
-
-/* IDs in the seekpoint master */
-#define MATROSKA_ID_SEEKID     0x53AB
-#define MATROSKA_ID_SEEKPOSITION 0x53AC
-
-/* IDs in the cluster master */
-#define MATROSKA_ID_CLUSTERTIMECODE 0xE7
-#define MATROSKA_ID_CLUSTERPOSITION 0xA7
-#define MATROSKA_ID_CLUSTERPREVSIZE 0xAB
-#define MATROSKA_ID_BLOCKGROUP 0xA0
-#define MATROSKA_ID_BLOCKADDITIONS 0x75A1
-#define MATROSKA_ID_BLOCKMORE 0xA6
-#define MATROSKA_ID_BLOCKADDID 0xEE
-#define MATROSKA_ID_BLOCKADDITIONAL 0xA5
-#define MATROSKA_ID_SIMPLEBLOCK 0xA3
-
-/* IDs in the blockgroup master */
-#define MATROSKA_ID_BLOCK      0xA1
-#define MATROSKA_ID_BLOCKDURATION 0x9B
-#define MATROSKA_ID_BLOCKREFERENCE 0xFB
-#define MATROSKA_ID_CODECSTATE 0xA4
-#define MATROSKA_ID_DISCARDPADDING 0x75A2
-
-/* IDs in the attachments master */
-#define MATROSKA_ID_ATTACHEDFILE        0x61A7
-#define MATROSKA_ID_FILEDESC            0x467E
-#define MATROSKA_ID_FILENAME            0x466E
-#define MATROSKA_ID_FILEMIMETYPE        0x4660
-#define MATROSKA_ID_FILEDATA            0x465C
-#define MATROSKA_ID_FILEUID             0x46AE
-
-/* IDs in the chapters master */
-#define MATROSKA_ID_EDITIONENTRY        0x45B9
-#define MATROSKA_ID_CHAPTERATOM         0xB6
-#define MATROSKA_ID_CHAPTERTIMESTART    0x91
-#define MATROSKA_ID_CHAPTERTIMEEND      0x92
-#define MATROSKA_ID_CHAPTERDISPLAY      0x80
-#define MATROSKA_ID_CHAPSTRING          0x85
-#define MATROSKA_ID_CHAPLANG            0x437C
-#define MATROSKA_ID_CHAPCOUNTRY         0x437E
-#define MATROSKA_ID_EDITIONUID          0x45BC
-#define MATROSKA_ID_EDITIONFLAGHIDDEN   0x45BD
-#define MATROSKA_ID_EDITIONFLAGDEFAULT  0x45DB
-#define MATROSKA_ID_EDITIONFLAGORDERED  0x45DD
-#define MATROSKA_ID_CHAPTERUID          0x73C4
-#define MATROSKA_ID_CHAPTERFLAGHIDDEN   0x98
-#define MATROSKA_ID_CHAPTERFLAGENABLED  0x4598
-#define MATROSKA_ID_CHAPTERPHYSEQUIV    0x63C3
-
-typedef enum {
-  MATROSKA_TRACK_TYPE_NONE     = 0x0,
-  MATROSKA_TRACK_TYPE_VIDEO    = 0x1,
-  MATROSKA_TRACK_TYPE_AUDIO    = 0x2,
-  MATROSKA_TRACK_TYPE_COMPLEX  = 0x3,
-  MATROSKA_TRACK_TYPE_LOGO     = 0x10,
-  MATROSKA_TRACK_TYPE_SUBTITLE = 0x11,
-  MATROSKA_TRACK_TYPE_BUTTONS  = 0x12,
-  MATROSKA_TRACK_TYPE_CONTROL  = 0x20,
-  MATROSKA_TRACK_TYPE_METADATA = 0x21,
-} MatroskaTrackType;
-
-typedef enum {
-  MATROSKA_TRACK_ENCODING_COMP_ZLIB        = 0,
-  MATROSKA_TRACK_ENCODING_COMP_BZLIB       = 1,
-  MATROSKA_TRACK_ENCODING_COMP_LZO         = 2,
-  MATROSKA_TRACK_ENCODING_COMP_HEADERSTRIP = 3,
-} MatroskaTrackEncodingCompAlgo;
-
-typedef enum {
-  MATROSKA_VIDEO_INTERLACE_FLAG_UNDETERMINED = 0,
-  MATROSKA_VIDEO_INTERLACE_FLAG_INTERLACED   = 1,
-  MATROSKA_VIDEO_INTERLACE_FLAG_PROGRESSIVE  = 2,
-} MatroskaVideoInterlaceFlag;
-
-typedef enum {
-  MATROSKA_VIDEO_FIELDORDER_PROGRESSIVE  = 0,
-  MATROSKA_VIDEO_FIELDORDER_TT           = 1,
-  MATROSKA_VIDEO_FIELDORDER_UNDETERMINED = 2,
-  MATROSKA_VIDEO_FIELDORDER_BB           = 6,
-  MATROSKA_VIDEO_FIELDORDER_TB           = 9,
-  MATROSKA_VIDEO_FIELDORDER_BT           = 14,
-} MatroskaVideoFieldOrder;
-
-typedef enum {
-  MATROSKA_VIDEO_STEREOMODE_TYPE_MONO               = 0,
-  MATROSKA_VIDEO_STEREOMODE_TYPE_LEFT_RIGHT         = 1,
-  MATROSKA_VIDEO_STEREOMODE_TYPE_BOTTOM_TOP         = 2,
-  MATROSKA_VIDEO_STEREOMODE_TYPE_TOP_BOTTOM         = 3,
-  MATROSKA_VIDEO_STEREOMODE_TYPE_CHECKERBOARD_RL    = 4,
-  MATROSKA_VIDEO_STEREOMODE_TYPE_CHECKERBOARD_LR    = 5,
-  MATROSKA_VIDEO_STEREOMODE_TYPE_ROW_INTERLEAVED_RL = 6,
-  MATROSKA_VIDEO_STEREOMODE_TYPE_ROW_INTERLEAVED_LR = 7,
-  MATROSKA_VIDEO_STEREOMODE_TYPE_COL_INTERLEAVED_RL = 8,
-  MATROSKA_VIDEO_STEREOMODE_TYPE_COL_INTERLEAVED_LR = 9,
-  MATROSKA_VIDEO_STEREOMODE_TYPE_ANAGLYPH_CYAN_RED  = 10,
-  MATROSKA_VIDEO_STEREOMODE_TYPE_RIGHT_LEFT         = 11,
-  MATROSKA_VIDEO_STEREOMODE_TYPE_ANAGLYPH_GREEN_MAG = 12,
-  MATROSKA_VIDEO_STEREOMODE_TYPE_BOTH_EYES_BLOCK_LR = 13,
-  MATROSKA_VIDEO_STEREOMODE_TYPE_BOTH_EYES_BLOCK_RL = 14,
-  MATROSKA_VIDEO_STEREOMODE_TYPE_NB,
-} MatroskaVideoStereoModeType;
-
-typedef enum {
-  MATROSKA_VIDEO_DISPLAYUNIT_PIXELS      = 0,
-  MATROSKA_VIDEO_DISPLAYUNIT_CENTIMETERS = 1,
-  MATROSKA_VIDEO_DISPLAYUNIT_INCHES      = 2,
-  MATROSKA_VIDEO_DISPLAYUNIT_DAR         = 3,
-  MATROSKA_VIDEO_DISPLAYUNIT_UNKNOWN     = 4,
-} MatroskaVideoDisplayUnit;
-
-typedef enum {
-  MATROSKA_COLOUR_CHROMASITINGHORZ_UNDETERMINED     = 0,
-  MATROSKA_COLOUR_CHROMASITINGHORZ_LEFT             = 1,
-  MATROSKA_COLOUR_CHROMASITINGHORZ_HALF             = 2,
-  MATROSKA_COLOUR_CHROMASITINGHORZ_NB
-} MatroskaColourChromaSitingHorz;
-
-typedef enum {
-  MATROSKA_COLOUR_CHROMASITINGVERT_UNDETERMINED     = 0,
-  MATROSKA_COLOUR_CHROMASITINGVERT_TOP              = 1,
-  MATROSKA_COLOUR_CHROMASITINGVERT_HALF             = 2,
-  MATROSKA_COLOUR_CHROMASITINGVERT_NB
-} MatroskaColourChromaSitingVert;
-
-typedef enum {
-  MATROSKA_VIDEO_PROJECTION_TYPE_RECTANGULAR        = 0,
-  MATROSKA_VIDEO_PROJECTION_TYPE_EQUIRECTANGULAR    = 1,
-  MATROSKA_VIDEO_PROJECTION_TYPE_CUBEMAP            = 2,
-  MATROSKA_VIDEO_PROJECTION_TYPE_MESH               = 3,
-} MatroskaVideoProjectionType;
-
 /*
  * Matroska Codec IDs, strings
  */
diff --git a/libavformat/matroska_ids.h b/libavformat/matroska_ids.h
new file mode 100644
index 0000000000..ddd20d6036
--- /dev/null
+++ b/libavformat/matroska_ids.h
@@ -0,0 +1,339 @@
+/*
+ * Matroska Semantic constants
+ * Copyright (c) 2003-2022 The FFmpeg Project
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef AVFORMAT_MATROSKA_IDS_H
+#define AVFORMAT_MATROSKA_IDS_H
+
+/*
+ * Matroska element IDs, max. 32 bits
+ */
+
+/* toplevel segment */
+#define MATROSKA_ID_SEGMENT    0x18538067
+
+/* Matroska top-level master IDs */
+#define MATROSKA_ID_INFO       0x1549A966
+#define MATROSKA_ID_TRACKS     0x1654AE6B
+#define MATROSKA_ID_CUES       0x1C53BB6B
+#define MATROSKA_ID_TAGS       0x1254C367
+#define MATROSKA_ID_SEEKHEAD   0x114D9B74
+#define MATROSKA_ID_ATTACHMENTS 0x1941A469
+#define MATROSKA_ID_CLUSTER    0x1F43B675
+#define MATROSKA_ID_CHAPTERS   0x1043A770
+
+/* IDs in the info master */
+#define MATROSKA_ID_TIMECODESCALE 0x2AD7B1
+#define MATROSKA_ID_DURATION   0x4489
+#define MATROSKA_ID_TITLE      0x7BA9
+#define MATROSKA_ID_WRITINGAPP 0x5741
+#define MATROSKA_ID_MUXINGAPP  0x4D80
+#define MATROSKA_ID_DATEUTC    0x4461
+#define MATROSKA_ID_SEGMENTUID 0x73A4
+
+/* ID in the tracks master */
+#define MATROSKA_ID_TRACKENTRY 0xAE
+
+/* IDs in the trackentry master */
+#define MATROSKA_ID_TRACKNUMBER 0xD7
+#define MATROSKA_ID_TRACKUID   0x73C5
+#define MATROSKA_ID_TRACKTYPE  0x83
+#define MATROSKA_ID_TRACKVIDEO     0xE0
+#define MATROSKA_ID_TRACKAUDIO     0xE1
+#define MATROSKA_ID_TRACKOPERATION 0xE2
+#define MATROSKA_ID_TRACKCOMBINEPLANES 0xE3
+#define MATROSKA_ID_TRACKPLANE         0xE4
+#define MATROSKA_ID_TRACKPLANEUID      0xE5
+#define MATROSKA_ID_TRACKPLANETYPE     0xE6
+#define MATROSKA_ID_CODECID    0x86
+#define MATROSKA_ID_CODECPRIVATE 0x63A2
+#define MATROSKA_ID_CODECNAME  0x258688
+#define MATROSKA_ID_CODECINFOURL 0x3B4040
+#define MATROSKA_ID_CODECDOWNLOADURL 0x26B240
+#define MATROSKA_ID_CODECDECODEALL 0xAA
+#define MATROSKA_ID_CODECDELAY 0x56AA
+#define MATROSKA_ID_SEEKPREROLL 0x56BB
+#define MATROSKA_ID_TRACKNAME  0x536E
+#define MATROSKA_ID_TRACKLANGUAGE 0x22B59C
+#define MATROSKA_ID_TRACKFLAGENABLED 0xB9
+#define MATROSKA_ID_TRACKFLAGDEFAULT 0x88
+#define MATROSKA_ID_TRACKFLAGFORCED 0x55AA
+#define MATROSKA_ID_TRACKFLAGHEARINGIMPAIRED  0x55AB
+#define MATROSKA_ID_TRACKFLAGVISUALIMPAIRED   0x55AC
+#define MATROSKA_ID_TRACKFLAGTEXTDESCRIPTIONS 0x55AD
+#define MATROSKA_ID_TRACKFLAGORIGINAL         0x55AE
+#define MATROSKA_ID_TRACKFLAGCOMMENTARY       0x55AF
+#define MATROSKA_ID_TRACKFLAGLACING 0x9C
+#define MATROSKA_ID_TRACKMINCACHE 0x6DE7
+#define MATROSKA_ID_TRACKMAXCACHE 0x6DF8
+#define MATROSKA_ID_TRACKDEFAULTDURATION 0x23E383
+#define MATROSKA_ID_TRACKCONTENTENCODINGS 0x6D80
+#define MATROSKA_ID_TRACKCONTENTENCODING 0x6240
+#define MATROSKA_ID_TRACKTIMECODESCALE 0x23314F
+#define MATROSKA_ID_TRACKMAXBLKADDID 0x55EE
+#define MATROSKA_ID_TRACKBLKADDMAPPING 0x41E4
+
+/* IDs in the trackvideo master */
+#define MATROSKA_ID_VIDEOFRAMERATE 0x2383E3
+#define MATROSKA_ID_VIDEODISPLAYWIDTH 0x54B0
+#define MATROSKA_ID_VIDEODISPLAYHEIGHT 0x54BA
+#define MATROSKA_ID_VIDEOPIXELWIDTH 0xB0
+#define MATROSKA_ID_VIDEOPIXELHEIGHT 0xBA
+#define MATROSKA_ID_VIDEOPIXELCROPB 0x54AA
+#define MATROSKA_ID_VIDEOPIXELCROPT 0x54BB
+#define MATROSKA_ID_VIDEOPIXELCROPL 0x54CC
+#define MATROSKA_ID_VIDEOPIXELCROPR 0x54DD
+#define MATROSKA_ID_VIDEODISPLAYUNIT 0x54B2
+#define MATROSKA_ID_VIDEOFLAGINTERLACED 0x9A
+#define MATROSKA_ID_VIDEOFIELDORDER 0x9D
+#define MATROSKA_ID_VIDEOSTEREOMODE 0x53B8
+#define MATROSKA_ID_VIDEOALPHAMODE 0x53C0
+#define MATROSKA_ID_VIDEOASPECTRATIO 0x54B3
+#define MATROSKA_ID_VIDEOCOLORSPACE 0x2EB524
+#define MATROSKA_ID_VIDEOCOLOR 0x55B0
+
+#define MATROSKA_ID_VIDEOCOLORMATRIXCOEFF 0x55B1
+#define MATROSKA_ID_VIDEOCOLORBITSPERCHANNEL 0x55B2
+#define MATROSKA_ID_VIDEOCOLORCHROMASUBHORZ 0x55B3
+#define MATROSKA_ID_VIDEOCOLORCHROMASUBVERT 0x55B4
+#define MATROSKA_ID_VIDEOCOLORCBSUBHORZ 0x55B5
+#define MATROSKA_ID_VIDEOCOLORCBSUBVERT 0x55B6
+#define MATROSKA_ID_VIDEOCOLORCHROMASITINGHORZ 0x55B7
+#define MATROSKA_ID_VIDEOCOLORCHROMASITINGVERT 0x55B8
+#define MATROSKA_ID_VIDEOCOLORRANGE 0x55B9
+#define MATROSKA_ID_VIDEOCOLORTRANSFERCHARACTERISTICS 0x55BA
+
+#define MATROSKA_ID_VIDEOCOLORPRIMARIES 0x55BB
+#define MATROSKA_ID_VIDEOCOLORMAXCLL 0x55BC
+#define MATROSKA_ID_VIDEOCOLORMAXFALL 0x55BD
+
+#define MATROSKA_ID_VIDEOCOLORMASTERINGMETA 0x55D0
+#define MATROSKA_ID_VIDEOCOLOR_RX 0x55D1
+#define MATROSKA_ID_VIDEOCOLOR_RY 0x55D2
+#define MATROSKA_ID_VIDEOCOLOR_GX 0x55D3
+#define MATROSKA_ID_VIDEOCOLOR_GY 0x55D4
+#define MATROSKA_ID_VIDEOCOLOR_BX 0x55D5
+#define MATROSKA_ID_VIDEOCOLOR_BY 0x55D6
+#define MATROSKA_ID_VIDEOCOLOR_WHITEX 0x55D7
+#define MATROSKA_ID_VIDEOCOLOR_WHITEY 0x55D8
+#define MATROSKA_ID_VIDEOCOLOR_LUMINANCEMAX 0x55D9
+#define MATROSKA_ID_VIDEOCOLOR_LUMINANCEMIN 0x55DA
+
+#define MATROSKA_ID_VIDEOPROJECTION 0x7670
+#define MATROSKA_ID_VIDEOPROJECTIONTYPE 0x7671
+#define MATROSKA_ID_VIDEOPROJECTIONPRIVATE 0x7672
+#define MATROSKA_ID_VIDEOPROJECTIONPOSEYAW 0x7673
+#define MATROSKA_ID_VIDEOPROJECTIONPOSEPITCH 0x7674
+#define MATROSKA_ID_VIDEOPROJECTIONPOSEROLL 0x7675
+
+/* IDs in the trackaudio master */
+#define MATROSKA_ID_AUDIOSAMPLINGFREQ 0xB5
+#define MATROSKA_ID_AUDIOOUTSAMPLINGFREQ 0x78B5
+
+#define MATROSKA_ID_AUDIOBITDEPTH 0x6264
+#define MATROSKA_ID_AUDIOCHANNELS 0x9F
+
+/* IDs in the content encoding master */
+#define MATROSKA_ID_ENCODINGORDER 0x5031
+#define MATROSKA_ID_ENCODINGSCOPE 0x5032
+#define MATROSKA_ID_ENCODINGTYPE 0x5033
+#define MATROSKA_ID_ENCODINGCOMPRESSION 0x5034
+#define MATROSKA_ID_ENCODINGCOMPALGO 0x4254
+#define MATROSKA_ID_ENCODINGCOMPSETTINGS 0x4255
+
+#define MATROSKA_ID_ENCODINGENCRYPTION 0x5035
+#define MATROSKA_ID_ENCODINGENCAESSETTINGS 0x47E7
+#define MATROSKA_ID_ENCODINGENCALGO 0x47E1
+#define MATROSKA_ID_ENCODINGENCKEYID 0x47E2
+#define MATROSKA_ID_ENCODINGSIGALGO 0x47E5
+#define MATROSKA_ID_ENCODINGSIGHASHALGO 0x47E6
+#define MATROSKA_ID_ENCODINGSIGKEYID 0x47E4
+#define MATROSKA_ID_ENCODINGSIGNATURE 0x47E3
+
+/* IDs in the block addition mapping master */
+#define MATROSKA_ID_BLKADDIDVALUE 0x41F0
+#define MATROSKA_ID_BLKADDIDNAME 0x41A4
+#define MATROSKA_ID_BLKADDIDTYPE 0x41E7
+#define MATROSKA_ID_BLKADDIDEXTRADATA 0x41ED
+
+/* ID in the cues master */
+#define MATROSKA_ID_POINTENTRY 0xBB
+
+/* IDs in the pointentry master */
+#define MATROSKA_ID_CUETIME    0xB3
+#define MATROSKA_ID_CUETRACKPOSITION 0xB7
+
+/* IDs in the cuetrackposition master */
+#define MATROSKA_ID_CUETRACK   0xF7
+#define MATROSKA_ID_CUECLUSTERPOSITION 0xF1
+#define MATROSKA_ID_CUERELATIVEPOSITION 0xF0
+#define MATROSKA_ID_CUEDURATION 0xB2
+#define MATROSKA_ID_CUEBLOCKNUMBER 0x5378
+
+/* IDs in the tags master */
+#define MATROSKA_ID_TAG                 0x7373
+#define MATROSKA_ID_SIMPLETAG           0x67C8
+#define MATROSKA_ID_TAGNAME             0x45A3
+#define MATROSKA_ID_TAGSTRING           0x4487
+#define MATROSKA_ID_TAGLANG             0x447A
+#define MATROSKA_ID_TAGDEFAULT          0x4484
+#define MATROSKA_ID_TAGDEFAULT_BUG      0x44B4
+#define MATROSKA_ID_TAGTARGETS          0x63C0
+#define MATROSKA_ID_TAGTARGETS_TYPE       0x63CA
+#define MATROSKA_ID_TAGTARGETS_TYPEVALUE  0x68CA
+#define MATROSKA_ID_TAGTARGETS_TRACKUID   0x63C5
+#define MATROSKA_ID_TAGTARGETS_CHAPTERUID 0x63C4
+#define MATROSKA_ID_TAGTARGETS_ATTACHUID  0x63C6
+
+/* IDs in the seekhead master */
+#define MATROSKA_ID_SEEKENTRY  0x4DBB
+
+/* IDs in the seekpoint master */
+#define MATROSKA_ID_SEEKID     0x53AB
+#define MATROSKA_ID_SEEKPOSITION 0x53AC
+
+/* IDs in the cluster master */
+#define MATROSKA_ID_CLUSTERTIMECODE 0xE7
+#define MATROSKA_ID_CLUSTERPOSITION 0xA7
+#define MATROSKA_ID_CLUSTERPREVSIZE 0xAB
+#define MATROSKA_ID_BLOCKGROUP 0xA0
+#define MATROSKA_ID_BLOCKADDITIONS 0x75A1
+#define MATROSKA_ID_BLOCKMORE 0xA6
+#define MATROSKA_ID_BLOCKADDID 0xEE
+#define MATROSKA_ID_BLOCKADDITIONAL 0xA5
+#define MATROSKA_ID_SIMPLEBLOCK 0xA3
+
+/* IDs in the blockgroup master */
+#define MATROSKA_ID_BLOCK      0xA1
+#define MATROSKA_ID_BLOCKDURATION 0x9B
+#define MATROSKA_ID_BLOCKREFERENCE 0xFB
+#define MATROSKA_ID_CODECSTATE 0xA4
+#define MATROSKA_ID_DISCARDPADDING 0x75A2
+
+/* IDs in the attachments master */
+#define MATROSKA_ID_ATTACHEDFILE        0x61A7
+#define MATROSKA_ID_FILEDESC            0x467E
+#define MATROSKA_ID_FILENAME            0x466E
+#define MATROSKA_ID_FILEMIMETYPE        0x4660
+#define MATROSKA_ID_FILEDATA            0x465C
+#define MATROSKA_ID_FILEUID             0x46AE
+
+/* IDs in the chapters master */
+#define MATROSKA_ID_EDITIONENTRY        0x45B9
+#define MATROSKA_ID_CHAPTERATOM         0xB6
+#define MATROSKA_ID_CHAPTERTIMESTART    0x91
+#define MATROSKA_ID_CHAPTERTIMEEND      0x92
+#define MATROSKA_ID_CHAPTERDISPLAY      0x80
+#define MATROSKA_ID_CHAPSTRING          0x85
+#define MATROSKA_ID_CHAPLANG            0x437C
+#define MATROSKA_ID_CHAPCOUNTRY         0x437E
+#define MATROSKA_ID_EDITIONUID          0x45BC
+#define MATROSKA_ID_EDITIONFLAGHIDDEN   0x45BD
+#define MATROSKA_ID_EDITIONFLAGDEFAULT  0x45DB
+#define MATROSKA_ID_EDITIONFLAGORDERED  0x45DD
+#define MATROSKA_ID_CHAPTERUID          0x73C4
+#define MATROSKA_ID_CHAPTERFLAGHIDDEN   0x98
+#define MATROSKA_ID_CHAPTERFLAGENABLED  0x4598
+#define MATROSKA_ID_CHAPTERPHYSEQUIV    0x63C3
+
+typedef enum {
+  MATROSKA_TRACK_TYPE_NONE     = 0x0,
+  MATROSKA_TRACK_TYPE_VIDEO    = 0x1,
+  MATROSKA_TRACK_TYPE_AUDIO    = 0x2,
+  MATROSKA_TRACK_TYPE_COMPLEX  = 0x3,
+  MATROSKA_TRACK_TYPE_LOGO     = 0x10,
+  MATROSKA_TRACK_TYPE_SUBTITLE = 0x11,
+  MATROSKA_TRACK_TYPE_BUTTONS  = 0x12,
+  MATROSKA_TRACK_TYPE_CONTROL  = 0x20,
+  MATROSKA_TRACK_TYPE_METADATA = 0x21,
+} MatroskaTrackType;
+
+typedef enum {
+  MATROSKA_TRACK_ENCODING_COMP_ZLIB        = 0,
+  MATROSKA_TRACK_ENCODING_COMP_BZLIB       = 1,
+  MATROSKA_TRACK_ENCODING_COMP_LZO         = 2,
+  MATROSKA_TRACK_ENCODING_COMP_HEADERSTRIP = 3,
+} MatroskaTrackEncodingCompAlgo;
+
+typedef enum {
+  MATROSKA_VIDEO_INTERLACE_FLAG_UNDETERMINED = 0,
+  MATROSKA_VIDEO_INTERLACE_FLAG_INTERLACED   = 1,
+  MATROSKA_VIDEO_INTERLACE_FLAG_PROGRESSIVE  = 2,
+} MatroskaVideoInterlaceFlag;
+
+typedef enum {
+  MATROSKA_VIDEO_FIELDORDER_PROGRESSIVE  = 0,
+  MATROSKA_VIDEO_FIELDORDER_TT           = 1,
+  MATROSKA_VIDEO_FIELDORDER_UNDETERMINED = 2,
+  MATROSKA_VIDEO_FIELDORDER_BB           = 6,
+  MATROSKA_VIDEO_FIELDORDER_TB           = 9,
+  MATROSKA_VIDEO_FIELDORDER_BT           = 14,
+} MatroskaVideoFieldOrder;
+
+typedef enum {
+  MATROSKA_VIDEO_STEREOMODE_TYPE_MONO               = 0,
+  MATROSKA_VIDEO_STEREOMODE_TYPE_LEFT_RIGHT         = 1,
+  MATROSKA_VIDEO_STEREOMODE_TYPE_BOTTOM_TOP         = 2,
+  MATROSKA_VIDEO_STEREOMODE_TYPE_TOP_BOTTOM         = 3,
+  MATROSKA_VIDEO_STEREOMODE_TYPE_CHECKERBOARD_RL    = 4,
+  MATROSKA_VIDEO_STEREOMODE_TYPE_CHECKERBOARD_LR    = 5,
+  MATROSKA_VIDEO_STEREOMODE_TYPE_ROW_INTERLEAVED_RL = 6,
+  MATROSKA_VIDEO_STEREOMODE_TYPE_ROW_INTERLEAVED_LR = 7,
+  MATROSKA_VIDEO_STEREOMODE_TYPE_COL_INTERLEAVED_RL = 8,
+  MATROSKA_VIDEO_STEREOMODE_TYPE_COL_INTERLEAVED_LR = 9,
+  MATROSKA_VIDEO_STEREOMODE_TYPE_ANAGLYPH_CYAN_RED  = 10,
+  MATROSKA_VIDEO_STEREOMODE_TYPE_RIGHT_LEFT         = 11,
+  MATROSKA_VIDEO_STEREOMODE_TYPE_ANAGLYPH_GREEN_MAG = 12,
+  MATROSKA_VIDEO_STEREOMODE_TYPE_BOTH_EYES_BLOCK_LR = 13,
+  MATROSKA_VIDEO_STEREOMODE_TYPE_BOTH_EYES_BLOCK_RL = 14,
+  MATROSKA_VIDEO_STEREOMODE_TYPE_NB,
+} MatroskaVideoStereoModeType;
+
+typedef enum {
+  MATROSKA_VIDEO_DISPLAYUNIT_PIXELS      = 0,
+  MATROSKA_VIDEO_DISPLAYUNIT_CENTIMETERS = 1,
+  MATROSKA_VIDEO_DISPLAYUNIT_INCHES      = 2,
+  MATROSKA_VIDEO_DISPLAYUNIT_DAR         = 3,
+  MATROSKA_VIDEO_DISPLAYUNIT_UNKNOWN     = 4,
+} MatroskaVideoDisplayUnit;
+
+typedef enum {
+  MATROSKA_COLOUR_CHROMASITINGHORZ_UNDETERMINED     = 0,
+  MATROSKA_COLOUR_CHROMASITINGHORZ_LEFT             = 1,
+  MATROSKA_COLOUR_CHROMASITINGHORZ_HALF             = 2,
+  MATROSKA_COLOUR_CHROMASITINGHORZ_NB
+} MatroskaColourChromaSitingHorz;
+
+typedef enum {
+  MATROSKA_COLOUR_CHROMASITINGVERT_UNDETERMINED     = 0,
+  MATROSKA_COLOUR_CHROMASITINGVERT_TOP              = 1,
+  MATROSKA_COLOUR_CHROMASITINGVERT_HALF             = 2,
+  MATROSKA_COLOUR_CHROMASITINGVERT_NB
+} MatroskaColourChromaSitingVert;
+
+typedef enum {
+  MATROSKA_VIDEO_PROJECTION_TYPE_RECTANGULAR        = 0,
+  MATROSKA_VIDEO_PROJECTION_TYPE_EQUIRECTANGULAR    = 1,
+  MATROSKA_VIDEO_PROJECTION_TYPE_CUBEMAP            = 2,
+  MATROSKA_VIDEO_PROJECTION_TYPE_MESH               = 3,
+} MatroskaVideoProjectionType;
+
+
+#endif /* AVFORMAT_MATROSKA_IDS_H */
-- 
2.20.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] 13+ messages in thread

* [FFmpeg-devel] [PATCH 05/12] avformat/matroskadec: move the elements semantic in a separate file
  2022-11-06 15:08 [FFmpeg-devel] [PATCH 00/12] Use generated semantic for Matroska demuxer Steve Lhomme
                   ` (3 preceding siblings ...)
  2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 04/12] avformat/matroska: move Matroska IDs and enums in a separate header Steve Lhomme
@ 2022-11-06 15:08 ` Steve Lhomme
  2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 06/12] avformat/matroska_ids: move some IDs in separate sections Steve Lhomme
                   ` (6 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: Steve Lhomme @ 2022-11-06 15:08 UTC (permalink / raw)
  To: ffmpeg-devel

So the file can be generated from the Matroska Schema.

The EbmlSyntax structures are not shared between files.
matroska_segments and matroska_cluster_enter also have their size predefined.

No functional changes.
---
 libavformat/Makefile      |   2 +-
 libavformat/matroskadec.c | 712 +-------------------------------------
 libavformat/matroskasem.c | 397 +++++++++++++++++++++
 libavformat/matroskasem.h | 394 +++++++++++++++++++++
 4 files changed, 793 insertions(+), 712 deletions(-)
 create mode 100644 libavformat/matroskasem.c
 create mode 100644 libavformat/matroskasem.h

diff --git a/libavformat/Makefile b/libavformat/Makefile
index d7f198bf39..982fcc326f 100644
--- a/libavformat/Makefile
+++ b/libavformat/Makefile
@@ -331,7 +331,7 @@ OBJS-$(CONFIG_LVF_DEMUXER)               += lvfdec.o
 OBJS-$(CONFIG_LXF_DEMUXER)               += lxfdec.o
 OBJS-$(CONFIG_M4V_DEMUXER)               += m4vdec.o rawdec.o
 OBJS-$(CONFIG_M4V_MUXER)                 += rawenc.o
-OBJS-$(CONFIG_MATROSKA_DEMUXER)          += matroskadec.o matroska.o  \
+OBJS-$(CONFIG_MATROSKA_DEMUXER)          += matroskadec.o matroskasem.o matroska.o \
                                             flac_picture.o rmsipr.o \
                                             oggparsevorbis.o vorbiscomment.o \
                                             qtpalette.o replaygain.o dovi_isom.o
diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
index 5a083acd75..9475ff4674 100644
--- a/libavformat/matroskadec.c
+++ b/libavformat/matroskadec.c
@@ -53,7 +53,6 @@
 #include "libavcodec/bytestream.h"
 #include "libavcodec/flac.h"
 #include "libavcodec/mpeg4audio.h"
-#include "libavcodec/packet_internal.h"
 
 #include "avformat.h"
 #include "avio_internal.h"
@@ -62,6 +61,7 @@
 #include "internal.h"
 #include "isom.h"
 #include "matroska.h"
+#include "matroskasem.h"
 #include "oggdec.h"
 /* For ff_codec_get_id(). */
 #include "riff.h"
@@ -88,716 +88,6 @@
                                          * to this many bytes of unknown data for the
                                          * SKIP_THRESHOLD check. */
 
-typedef enum {
-    EBML_NONE,
-    EBML_UINT,
-    EBML_SINT,
-    EBML_FLOAT,
-    EBML_STR,
-    EBML_UTF8,
-    EBML_BIN,
-    EBML_NEST,
-    EBML_LEVEL1,
-    EBML_STOP,
-    EBML_TYPE_COUNT
-} EbmlType;
-
-typedef struct CountedElement {
-    union {
-        uint64_t  u;
-        int64_t   i;
-        double    f;
-        char     *s;
-    } el;
-    unsigned count;
-} CountedElement;
-
-typedef const struct EbmlSyntax {
-    uint32_t id;
-    uint8_t type;
-    uint8_t is_counted;
-    size_t list_elem_size;
-    size_t data_offset;
-    union {
-        int64_t     i;
-        uint64_t    u;
-        double      f;
-        const char *s;
-        const struct EbmlSyntax *n;
-    } def;
-} EbmlSyntax;
-
-typedef struct EbmlList {
-    int nb_elem;
-    unsigned int alloc_elem_size;
-    void *elem;
-} EbmlList;
-
-typedef struct EbmlBin {
-    int      size;
-    AVBufferRef *buf;
-    uint8_t *data;
-    int64_t  pos;
-} EbmlBin;
-
-typedef struct Ebml {
-    uint64_t version;
-    uint64_t max_size;
-    uint64_t id_length;
-    char    *doctype;
-    uint64_t doctype_version;
-} Ebml;
-
-typedef struct MatroskaTrackCompression {
-    uint64_t algo;
-    EbmlBin  settings;
-} MatroskaTrackCompression;
-
-typedef struct MatroskaTrackEncryption {
-    uint64_t algo;
-    EbmlBin  key_id;
-} MatroskaTrackEncryption;
-
-typedef struct MatroskaTrackEncoding {
-    uint64_t scope;
-    uint64_t type;
-    MatroskaTrackCompression compression;
-    MatroskaTrackEncryption encryption;
-} MatroskaTrackEncoding;
-
-typedef struct MatroskaMasteringMeta {
-    double r_x;
-    double r_y;
-    double g_x;
-    double g_y;
-    double b_x;
-    double b_y;
-    double white_x;
-    double white_y;
-    double max_luminance;
-    CountedElement min_luminance;
-} MatroskaMasteringMeta;
-
-typedef struct MatroskaTrackVideoColor {
-    uint64_t matrix_coefficients;
-    uint64_t bits_per_channel;
-    uint64_t chroma_sub_horz;
-    uint64_t chroma_sub_vert;
-    uint64_t cb_sub_horz;
-    uint64_t cb_sub_vert;
-    uint64_t chroma_siting_horz;
-    uint64_t chroma_siting_vert;
-    uint64_t range;
-    uint64_t transfer_characteristics;
-    uint64_t primaries;
-    uint64_t max_cll;
-    uint64_t max_fall;
-    MatroskaMasteringMeta mastering_meta;
-} MatroskaTrackVideoColor;
-
-typedef struct MatroskaTrackVideoProjection {
-    uint64_t type;
-    EbmlBin private;
-    double yaw;
-    double pitch;
-    double roll;
-} MatroskaTrackVideoProjection;
-
-typedef struct MatroskaTrackVideo {
-    double   frame_rate;
-    uint64_t display_width;
-    uint64_t display_height;
-    uint64_t pixel_width;
-    uint64_t pixel_height;
-    EbmlBin  color_space;
-    uint64_t display_unit;
-    uint64_t interlaced;
-    uint64_t field_order;
-    uint64_t stereo_mode;
-    uint64_t alpha_mode;
-    EbmlList color;
-    MatroskaTrackVideoProjection projection;
-} MatroskaTrackVideo;
-
-typedef struct MatroskaTrackAudio {
-    double   samplerate;
-    double   out_samplerate;
-    uint64_t bitdepth;
-    uint64_t channels;
-
-    /* real audio header (extracted from extradata) */
-    int      coded_framesize;
-    int      sub_packet_h;
-    int      frame_size;
-    int      sub_packet_size;
-    int      sub_packet_cnt;
-    int      pkt_cnt;
-    uint64_t buf_timecode;
-    uint8_t *buf;
-} MatroskaTrackAudio;
-
-typedef struct MatroskaTrackPlane {
-    uint64_t uid;
-    uint64_t type;
-} MatroskaTrackPlane;
-
-typedef struct MatroskaTrackOperation {
-    EbmlList combine_planes;
-} MatroskaTrackOperation;
-
-typedef struct MatroskaBlockAdditionMapping {
-    uint64_t value;
-    char *name;
-    uint64_t type;
-    EbmlBin extradata;
-} MatroskaBlockAdditionMapping;
-
-typedef struct MatroskaTrack {
-    uint64_t num;
-    uint64_t uid;
-    uint64_t type;
-    char    *name;
-    char    *codec_id;
-    EbmlBin  codec_priv;
-    char    *language;
-    double time_scale;
-    uint64_t default_duration;
-    uint64_t flag_default;
-    uint64_t flag_forced;
-    uint64_t flag_comment;
-    uint64_t flag_hearingimpaired;
-    uint64_t flag_visualimpaired;
-    uint64_t flag_textdescriptions;
-    CountedElement flag_original;
-    uint64_t seek_preroll;
-    MatroskaTrackVideo video;
-    MatroskaTrackAudio audio;
-    MatroskaTrackOperation operation;
-    EbmlList encodings;
-    uint64_t codec_delay;
-    uint64_t codec_delay_in_track_tb;
-
-    AVStream *stream;
-    int64_t end_timecode;
-    int ms_compat;
-    int needs_decoding;
-    uint64_t max_block_additional_id;
-    EbmlList block_addition_mappings;
-
-    uint32_t palette[AVPALETTE_COUNT];
-    int has_palette;
-} MatroskaTrack;
-
-typedef struct MatroskaAttachment {
-    uint64_t uid;
-    char *filename;
-    char *description;
-    char *mime;
-    EbmlBin bin;
-
-    AVStream *stream;
-} MatroskaAttachment;
-
-typedef struct MatroskaChapter {
-    uint64_t start;
-    uint64_t end;
-    uint64_t uid;
-    char    *title;
-
-    AVChapter *chapter;
-} MatroskaChapter;
-
-typedef struct MatroskaIndexPos {
-    uint64_t track;
-    uint64_t pos;
-} MatroskaIndexPos;
-
-typedef struct MatroskaIndex {
-    uint64_t time;
-    EbmlList pos;
-} MatroskaIndex;
-
-typedef struct MatroskaTag {
-    char *name;
-    char *string;
-    char *lang;
-    uint64_t def;
-    EbmlList sub;
-} MatroskaTag;
-
-typedef struct MatroskaTagTarget {
-    char    *type;
-    uint64_t typevalue;
-    uint64_t trackuid;
-    uint64_t chapteruid;
-    uint64_t attachuid;
-} MatroskaTagTarget;
-
-typedef struct MatroskaTags {
-    MatroskaTagTarget target;
-    EbmlList tag;
-} MatroskaTags;
-
-typedef struct MatroskaSeekhead {
-    uint64_t id;
-    uint64_t pos;
-} MatroskaSeekhead;
-
-typedef struct MatroskaLevel {
-    uint64_t start;
-    uint64_t length;
-} MatroskaLevel;
-
-typedef struct MatroskaBlock {
-    uint64_t duration;
-    CountedElement reference;
-    uint64_t non_simple;
-    EbmlBin  bin;
-    uint64_t additional_id;
-    EbmlBin  additional;
-    int64_t  discard_padding;
-} MatroskaBlock;
-
-typedef struct MatroskaCluster {
-    MatroskaBlock block;
-    uint64_t timecode;
-    int64_t pos;
-} MatroskaCluster;
-
-typedef struct MatroskaLevel1Element {
-    int64_t  pos;
-    uint32_t id;
-    int parsed;
-} MatroskaLevel1Element;
-
-typedef struct MatroskaDemuxContext {
-    const AVClass *class;
-    AVFormatContext *ctx;
-
-    /* EBML stuff */
-    MatroskaLevel levels[EBML_MAX_DEPTH];
-    int      num_levels;
-    uint32_t current_id;
-    int64_t  resync_pos;
-    int      unknown_count;
-
-    uint64_t time_scale;
-    double   duration;
-    char    *title;
-    char    *muxingapp;
-    EbmlBin  date_utc;
-    EbmlList tracks;
-    EbmlList attachments;
-    EbmlList chapters;
-    EbmlList index;
-    EbmlList tags;
-    EbmlList seekhead;
-
-    /* byte position of the segment inside the stream */
-    int64_t segment_start;
-
-    /* This packet coincides with FFFormatContext.parse_pkt
-     * and is not owned by us. */
-    AVPacket *pkt;
-
-    /* the packet queue */
-    PacketList queue;
-
-    int done;
-
-    /* What to skip before effectively reading a packet. */
-    int skip_to_keyframe;
-    uint64_t skip_to_timecode;
-
-    /* File has a CUES element, but we defer parsing until it is needed. */
-    int cues_parsing_deferred;
-
-    /* Level1 elements and whether they were read yet */
-    MatroskaLevel1Element level1_elems[64];
-    int num_level1_elems;
-
-    MatroskaCluster current_cluster;
-
-    /* WebM DASH Manifest live flag */
-    int is_live;
-
-    /* Bandwidth value for WebM DASH Manifest */
-    int bandwidth;
-} MatroskaDemuxContext;
-
-#define CHILD_OF(parent) { .def = { .n = parent } }
-
-// The following forward declarations need their size because
-// a tentative definition with internal linkage must not be an
-// incomplete type (6.7.2 in C90, 6.9.2 in C99).
-// Removing the sizes breaks MSVC.
-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_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];
-
-static EbmlSyntax ebml_header[] = {
-    { EBML_ID_EBMLREADVERSION,    EBML_UINT, 0, 0, offsetof(Ebml, version),         { .u = EBML_VERSION } },
-    { EBML_ID_EBMLMAXSIZELENGTH,  EBML_UINT, 0, 0, offsetof(Ebml, max_size),        { .u = 8 } },
-    { EBML_ID_EBMLMAXIDLENGTH,    EBML_UINT, 0, 0, offsetof(Ebml, id_length),       { .u = 4 } },
-    { EBML_ID_DOCTYPE,            EBML_STR,  0, 0, offsetof(Ebml, doctype),         { .s = "(none)" } },
-    { EBML_ID_DOCTYPEREADVERSION, EBML_UINT, 0, 0, offsetof(Ebml, doctype_version), { .u = 1 } },
-    { EBML_ID_EBMLVERSION,        EBML_NONE },
-    { EBML_ID_DOCTYPEVERSION,     EBML_NONE },
-    CHILD_OF(ebml_syntax)
-};
-
-static EbmlSyntax ebml_syntax[] = {
-    { EBML_ID_HEADER,      EBML_NEST, 0, 0, 0, { .n = ebml_header } },
-    { MATROSKA_ID_SEGMENT, EBML_STOP },
-    { 0 }
-};
-
-static EbmlSyntax matroska_info[] = {
-    { MATROSKA_ID_TIMECODESCALE, EBML_UINT,  0, 0, offsetof(MatroskaDemuxContext, time_scale), { .u = 1000000 } },
-    { 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 },
-    CHILD_OF(matroska_segment)
-};
-
-static EbmlSyntax matroska_mastering_meta[] = {
-    { MATROSKA_ID_VIDEOCOLOR_RX, EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, r_x) },
-    { MATROSKA_ID_VIDEOCOLOR_RY, EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, r_y) },
-    { MATROSKA_ID_VIDEOCOLOR_GX, EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, g_x) },
-    { MATROSKA_ID_VIDEOCOLOR_GY, EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, g_y) },
-    { MATROSKA_ID_VIDEOCOLOR_BX, EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, b_x) },
-    { MATROSKA_ID_VIDEOCOLOR_BY, EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, b_y) },
-    { MATROSKA_ID_VIDEOCOLOR_WHITEX, EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, white_x) },
-    { MATROSKA_ID_VIDEOCOLOR_WHITEY, EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, white_y) },
-    { MATROSKA_ID_VIDEOCOLOR_LUMINANCEMIN, EBML_FLOAT, 1, 0, offsetof(MatroskaMasteringMeta, min_luminance) },
-    { MATROSKA_ID_VIDEOCOLOR_LUMINANCEMAX, EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, max_luminance) },
-    CHILD_OF(matroska_track_video_color)
-};
-
-static EbmlSyntax matroska_track_video_color[] = {
-    { MATROSKA_ID_VIDEOCOLORMATRIXCOEFF,      EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, matrix_coefficients), { .u = AVCOL_SPC_UNSPECIFIED } },
-    { MATROSKA_ID_VIDEOCOLORBITSPERCHANNEL,   EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, bits_per_channel) },
-    { MATROSKA_ID_VIDEOCOLORCHROMASUBHORZ,    EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, chroma_sub_horz) },
-    { MATROSKA_ID_VIDEOCOLORCHROMASUBVERT,    EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, chroma_sub_vert) },
-    { MATROSKA_ID_VIDEOCOLORCBSUBHORZ,        EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, cb_sub_horz) },
-    { MATROSKA_ID_VIDEOCOLORCBSUBVERT,        EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, cb_sub_vert) },
-    { MATROSKA_ID_VIDEOCOLORCHROMASITINGHORZ, EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, chroma_siting_horz), { .u = MATROSKA_COLOUR_CHROMASITINGHORZ_UNDETERMINED } },
-    { MATROSKA_ID_VIDEOCOLORCHROMASITINGVERT, EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, chroma_siting_vert), { .u = MATROSKA_COLOUR_CHROMASITINGVERT_UNDETERMINED } },
-    { MATROSKA_ID_VIDEOCOLORRANGE,            EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, range), { .u = AVCOL_RANGE_UNSPECIFIED } },
-    { MATROSKA_ID_VIDEOCOLORTRANSFERCHARACTERISTICS, EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, transfer_characteristics), { .u = AVCOL_TRC_UNSPECIFIED } },
-    { MATROSKA_ID_VIDEOCOLORPRIMARIES,        EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, primaries), { .u = AVCOL_PRI_UNSPECIFIED } },
-    { MATROSKA_ID_VIDEOCOLORMAXCLL,           EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, max_cll) },
-    { MATROSKA_ID_VIDEOCOLORMAXFALL,          EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, max_fall) },
-    { MATROSKA_ID_VIDEOCOLORMASTERINGMETA,    EBML_NEST, 0, 0, offsetof(MatroskaTrackVideoColor, mastering_meta), { .n = matroska_mastering_meta } },
-    CHILD_OF(matroska_track_video)
-};
-
-static EbmlSyntax matroska_track_video_projection[] = {
-    { MATROSKA_ID_VIDEOPROJECTIONTYPE,        EBML_UINT,  0, 0, offsetof(MatroskaTrackVideoProjection, type), { .u = MATROSKA_VIDEO_PROJECTION_TYPE_RECTANGULAR } },
-    { MATROSKA_ID_VIDEOPROJECTIONPRIVATE,     EBML_BIN,   0, 0, offsetof(MatroskaTrackVideoProjection, private) },
-    { MATROSKA_ID_VIDEOPROJECTIONPOSEYAW,     EBML_FLOAT, 0, 0, offsetof(MatroskaTrackVideoProjection, yaw),   { .f = 0.0 } },
-    { MATROSKA_ID_VIDEOPROJECTIONPOSEPITCH,   EBML_FLOAT, 0, 0, offsetof(MatroskaTrackVideoProjection, pitch), { .f = 0.0 } },
-    { MATROSKA_ID_VIDEOPROJECTIONPOSEROLL,    EBML_FLOAT, 0, 0, offsetof(MatroskaTrackVideoProjection, roll),  { .f = 0.0 } },
-    CHILD_OF(matroska_track_video)
-};
-
-static EbmlSyntax matroska_track_video[] = {
-    { MATROSKA_ID_VIDEOFRAMERATE,      EBML_FLOAT, 0, 0, offsetof(MatroskaTrackVideo, frame_rate) },
-    { MATROSKA_ID_VIDEODISPLAYWIDTH,   EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, display_width), { .u=-1 } },
-    { MATROSKA_ID_VIDEODISPLAYHEIGHT,  EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, display_height), { .u=-1 } },
-    { MATROSKA_ID_VIDEOPIXELWIDTH,     EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, pixel_width) },
-    { MATROSKA_ID_VIDEOPIXELHEIGHT,    EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, pixel_height) },
-    { MATROSKA_ID_VIDEOCOLORSPACE,     EBML_BIN,   0, 0, offsetof(MatroskaTrackVideo, color_space) },
-    { MATROSKA_ID_VIDEOALPHAMODE,      EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, alpha_mode) },
-    { MATROSKA_ID_VIDEOCOLOR,          EBML_NEST,  0, sizeof(MatroskaTrackVideoColor), offsetof(MatroskaTrackVideo, color), { .n = matroska_track_video_color } },
-    { MATROSKA_ID_VIDEOPROJECTION,     EBML_NEST,  0, 0, offsetof(MatroskaTrackVideo, projection), { .n = matroska_track_video_projection } },
-    { MATROSKA_ID_VIDEOPIXELCROPB,     EBML_NONE },
-    { MATROSKA_ID_VIDEOPIXELCROPT,     EBML_NONE },
-    { MATROSKA_ID_VIDEOPIXELCROPL,     EBML_NONE },
-    { MATROSKA_ID_VIDEOPIXELCROPR,     EBML_NONE },
-    { MATROSKA_ID_VIDEODISPLAYUNIT,    EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, display_unit), { .u= MATROSKA_VIDEO_DISPLAYUNIT_PIXELS } },
-    { MATROSKA_ID_VIDEOFLAGINTERLACED, EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, interlaced),  { .u = MATROSKA_VIDEO_INTERLACE_FLAG_UNDETERMINED } },
-    { MATROSKA_ID_VIDEOFIELDORDER,     EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, field_order), { .u = MATROSKA_VIDEO_FIELDORDER_UNDETERMINED } },
-    { MATROSKA_ID_VIDEOSTEREOMODE,     EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, stereo_mode), { .u = MATROSKA_VIDEO_STEREOMODE_TYPE_NB } },
-    { MATROSKA_ID_VIDEOASPECTRATIO,    EBML_NONE },
-    CHILD_OF(matroska_track)
-};
-
-static EbmlSyntax matroska_track_audio[] = {
-    { MATROSKA_ID_AUDIOSAMPLINGFREQ,    EBML_FLOAT, 0, 0, offsetof(MatroskaTrackAudio, samplerate), { .f = 8000.0 } },
-    { MATROSKA_ID_AUDIOOUTSAMPLINGFREQ, EBML_FLOAT, 0, 0, offsetof(MatroskaTrackAudio, out_samplerate) },
-    { MATROSKA_ID_AUDIOBITDEPTH,        EBML_UINT,  0, 0, offsetof(MatroskaTrackAudio, bitdepth) },
-    { MATROSKA_ID_AUDIOCHANNELS,        EBML_UINT,  0, 0, offsetof(MatroskaTrackAudio, channels),   { .u = 1 } },
-    CHILD_OF(matroska_track)
-};
-
-static EbmlSyntax matroska_track_encoding_compression[] = {
-    { MATROSKA_ID_ENCODINGCOMPALGO,     EBML_UINT, 0, 0, offsetof(MatroskaTrackCompression, algo), { .u = MATROSKA_TRACK_ENCODING_COMP_ZLIB } },
-    { MATROSKA_ID_ENCODINGCOMPSETTINGS, EBML_BIN,  0, 0, offsetof(MatroskaTrackCompression, settings) },
-    CHILD_OF(matroska_track_encoding)
-};
-
-static EbmlSyntax matroska_track_encoding_encryption[] = {
-    { MATROSKA_ID_ENCODINGENCALGO,        EBML_UINT, 0, 0, offsetof(MatroskaTrackEncryption,algo) },
-    { MATROSKA_ID_ENCODINGENCKEYID,       EBML_BIN, 0, 0, offsetof(MatroskaTrackEncryption,key_id) },
-    { MATROSKA_ID_ENCODINGENCAESSETTINGS, EBML_NONE },
-    { MATROSKA_ID_ENCODINGSIGALGO,        EBML_NONE },
-    { MATROSKA_ID_ENCODINGSIGHASHALGO,    EBML_NONE },
-    { MATROSKA_ID_ENCODINGSIGKEYID,       EBML_NONE },
-    { MATROSKA_ID_ENCODINGSIGNATURE,      EBML_NONE },
-    CHILD_OF(matroska_track_encoding)
-};
-static EbmlSyntax matroska_track_encoding[] = {
-    { MATROSKA_ID_ENCODINGSCOPE,       EBML_UINT, 0, 0, offsetof(MatroskaTrackEncoding, scope),       { .u = 1 } },
-    { MATROSKA_ID_ENCODINGTYPE,        EBML_UINT, 0, 0, offsetof(MatroskaTrackEncoding, type) },
-    { MATROSKA_ID_ENCODINGCOMPRESSION, EBML_NEST, 0, 0, offsetof(MatroskaTrackEncoding, compression), { .n = matroska_track_encoding_compression } },
-    { MATROSKA_ID_ENCODINGENCRYPTION,  EBML_NEST, 0, 0, offsetof(MatroskaTrackEncoding, encryption),  { .n = matroska_track_encoding_encryption } },
-    { MATROSKA_ID_ENCODINGORDER,       EBML_NONE },
-    CHILD_OF(matroska_track_encodings)
-};
-
-static EbmlSyntax matroska_track_encodings[] = {
-    { MATROSKA_ID_TRACKCONTENTENCODING, EBML_NEST, 0, sizeof(MatroskaTrackEncoding), offsetof(MatroskaTrack, encodings), { .n = matroska_track_encoding } },
-    CHILD_OF(matroska_track)
-};
-
-static EbmlSyntax matroska_track_plane[] = {
-    { MATROSKA_ID_TRACKPLANEUID,  EBML_UINT, 0, 0, offsetof(MatroskaTrackPlane,uid) },
-    { MATROSKA_ID_TRACKPLANETYPE, EBML_UINT, 0, 0, offsetof(MatroskaTrackPlane,type) },
-    CHILD_OF(matroska_track_combine_planes)
-};
-
-static EbmlSyntax matroska_track_combine_planes[] = {
-    { MATROSKA_ID_TRACKPLANE, EBML_NEST, 0, sizeof(MatroskaTrackPlane), offsetof(MatroskaTrackOperation,combine_planes), {.n = matroska_track_plane} },
-    CHILD_OF(matroska_track_operation)
-};
-
-static EbmlSyntax matroska_track_operation[] = {
-    { MATROSKA_ID_TRACKCOMBINEPLANES, EBML_NEST, 0, 0, 0, {.n = matroska_track_combine_planes} },
-    CHILD_OF(matroska_track)
-};
-
-static EbmlSyntax matroska_block_addition_mapping[] = {
-    { MATROSKA_ID_BLKADDIDVALUE,      EBML_UINT, 0, 0, offsetof(MatroskaBlockAdditionMapping, value) },
-    { MATROSKA_ID_BLKADDIDNAME,       EBML_STR,  0, 0, offsetof(MatroskaBlockAdditionMapping, name) },
-    { MATROSKA_ID_BLKADDIDTYPE,       EBML_UINT, 0, 0, offsetof(MatroskaBlockAdditionMapping, type) },
-    { MATROSKA_ID_BLKADDIDEXTRADATA,  EBML_BIN,  0, 0, offsetof(MatroskaBlockAdditionMapping, extradata) },
-    CHILD_OF(matroska_track)
-};
-
-static EbmlSyntax matroska_track[] = {
-    { MATROSKA_ID_TRACKNUMBER,           EBML_UINT,  0, 0, offsetof(MatroskaTrack, num) },
-    { MATROSKA_ID_TRACKNAME,             EBML_UTF8,  0, 0, offsetof(MatroskaTrack, name) },
-    { MATROSKA_ID_TRACKUID,              EBML_UINT,  0, 0, offsetof(MatroskaTrack, uid) },
-    { MATROSKA_ID_TRACKTYPE,             EBML_UINT,  0, 0, offsetof(MatroskaTrack, type) },
-    { MATROSKA_ID_CODECID,               EBML_STR,   0, 0, offsetof(MatroskaTrack, codec_id) },
-    { MATROSKA_ID_CODECPRIVATE,          EBML_BIN,   0, 0, offsetof(MatroskaTrack, codec_priv) },
-    { MATROSKA_ID_CODECDELAY,            EBML_UINT,  0, 0, offsetof(MatroskaTrack, codec_delay) },
-    { MATROSKA_ID_TRACKLANGUAGE,         EBML_STR,   0, 0, offsetof(MatroskaTrack, language),     { .s = "eng" } },
-    { MATROSKA_ID_TRACKDEFAULTDURATION,  EBML_UINT,  0, 0, offsetof(MatroskaTrack, default_duration) },
-    { MATROSKA_ID_TRACKTIMECODESCALE,    EBML_FLOAT, 0, 0, offsetof(MatroskaTrack, time_scale),   { .f = 1.0 } },
-    { MATROSKA_ID_TRACKFLAGCOMMENTARY,   EBML_UINT,  0, 0, offsetof(MatroskaTrack, flag_comment) },
-    { MATROSKA_ID_TRACKFLAGDEFAULT,      EBML_UINT,  0, 0, offsetof(MatroskaTrack, flag_default), { .u = 1 } },
-    { MATROSKA_ID_TRACKFLAGFORCED,       EBML_UINT,  0, 0, offsetof(MatroskaTrack, flag_forced) },
-    { MATROSKA_ID_TRACKFLAGHEARINGIMPAIRED, EBML_UINT, 0, 0, offsetof(MatroskaTrack, flag_hearingimpaired) },
-    { MATROSKA_ID_TRACKFLAGVISUALIMPAIRED, EBML_UINT, 0, 0, offsetof(MatroskaTrack, flag_visualimpaired) },
-    { MATROSKA_ID_TRACKFLAGTEXTDESCRIPTIONS, EBML_UINT, 0, 0, offsetof(MatroskaTrack, flag_textdescriptions) },
-    { MATROSKA_ID_TRACKFLAGORIGINAL,     EBML_UINT,  1, 0, offsetof(MatroskaTrack, flag_original) },
-    { MATROSKA_ID_TRACKVIDEO,            EBML_NEST,  0, 0, offsetof(MatroskaTrack, video),        { .n = matroska_track_video } },
-    { MATROSKA_ID_TRACKAUDIO,            EBML_NEST,  0, 0, offsetof(MatroskaTrack, audio),        { .n = matroska_track_audio } },
-    { MATROSKA_ID_TRACKOPERATION,        EBML_NEST,  0, 0, offsetof(MatroskaTrack, operation),    { .n = matroska_track_operation } },
-    { MATROSKA_ID_TRACKCONTENTENCODINGS, EBML_NEST,  0, 0, 0,                                     { .n = matroska_track_encodings } },
-    { MATROSKA_ID_TRACKMAXBLKADDID,      EBML_UINT,  0, 0, offsetof(MatroskaTrack, max_block_additional_id) },
-    { MATROSKA_ID_TRACKBLKADDMAPPING,    EBML_NEST,  0, sizeof(MatroskaBlockAdditionMapping), offsetof(MatroskaTrack, block_addition_mappings), { .n = matroska_block_addition_mapping } },
-    { MATROSKA_ID_SEEKPREROLL,           EBML_UINT,  0, 0, offsetof(MatroskaTrack, seek_preroll) },
-    { MATROSKA_ID_TRACKFLAGENABLED,      EBML_NONE },
-    { MATROSKA_ID_TRACKFLAGLACING,       EBML_NONE },
-    { MATROSKA_ID_CODECNAME,             EBML_NONE },
-    { MATROSKA_ID_CODECDECODEALL,        EBML_NONE },
-    { MATROSKA_ID_CODECINFOURL,          EBML_NONE },
-    { MATROSKA_ID_CODECDOWNLOADURL,      EBML_NONE },
-    { MATROSKA_ID_TRACKMINCACHE,         EBML_NONE },
-    { MATROSKA_ID_TRACKMAXCACHE,         EBML_NONE },
-    CHILD_OF(matroska_tracks)
-};
-
-static EbmlSyntax matroska_tracks[] = {
-    { MATROSKA_ID_TRACKENTRY, EBML_NEST, 0, sizeof(MatroskaTrack), offsetof(MatroskaDemuxContext, tracks), { .n = matroska_track } },
-    CHILD_OF(matroska_segment)
-};
-
-static EbmlSyntax matroska_attachment[] = {
-    { MATROSKA_ID_FILEUID,      EBML_UINT, 0, 0, offsetof(MatroskaAttachment, uid) },
-    { MATROSKA_ID_FILENAME,     EBML_UTF8, 0, 0, offsetof(MatroskaAttachment, filename) },
-    { MATROSKA_ID_FILEMIMETYPE, EBML_STR,  0, 0, offsetof(MatroskaAttachment, mime) },
-    { MATROSKA_ID_FILEDATA,     EBML_BIN,  0, 0, offsetof(MatroskaAttachment, bin) },
-    { MATROSKA_ID_FILEDESC,     EBML_UTF8, 0, 0, offsetof(MatroskaAttachment, description) },
-    CHILD_OF(matroska_attachments)
-};
-
-static EbmlSyntax matroska_attachments[] = {
-    { MATROSKA_ID_ATTACHEDFILE, EBML_NEST, 0, sizeof(MatroskaAttachment), offsetof(MatroskaDemuxContext, attachments), { .n = matroska_attachment } },
-    CHILD_OF(matroska_segment)
-};
-
-static EbmlSyntax matroska_chapter_display[] = {
-    { MATROSKA_ID_CHAPSTRING,  EBML_UTF8, 0, 0, offsetof(MatroskaChapter, title) },
-    { MATROSKA_ID_CHAPLANG,    EBML_NONE },
-    { MATROSKA_ID_CHAPCOUNTRY, EBML_NONE },
-    CHILD_OF(matroska_chapter_entry)
-};
-
-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)
-};
-
-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 },
-    CHILD_OF(matroska_chapters)
-};
-
-static EbmlSyntax matroska_chapters[] = {
-    { MATROSKA_ID_EDITIONENTRY, EBML_NEST, 0, 0, 0, { .n = matroska_chapter } },
-    CHILD_OF(matroska_segment)
-};
-
-static EbmlSyntax matroska_index_pos[] = {
-    { MATROSKA_ID_CUETRACK,           EBML_UINT, 0, 0, offsetof(MatroskaIndexPos, track) },
-    { MATROSKA_ID_CUECLUSTERPOSITION, EBML_UINT, 0, 0, offsetof(MatroskaIndexPos, pos) },
-    { MATROSKA_ID_CUERELATIVEPOSITION,EBML_NONE },
-    { MATROSKA_ID_CUEDURATION,        EBML_NONE },
-    { MATROSKA_ID_CUEBLOCKNUMBER,     EBML_NONE },
-    CHILD_OF(matroska_index_entry)
-};
-
-static EbmlSyntax matroska_index_entry[] = {
-    { MATROSKA_ID_CUETIME,          EBML_UINT, 0, 0,                        offsetof(MatroskaIndex, time) },
-    { MATROSKA_ID_CUETRACKPOSITION, EBML_NEST, 0, sizeof(MatroskaIndexPos), offsetof(MatroskaIndex, pos), { .n = matroska_index_pos } },
-    CHILD_OF(matroska_index)
-};
-
-static EbmlSyntax matroska_index[] = {
-    { MATROSKA_ID_POINTENTRY, EBML_NEST, 0, sizeof(MatroskaIndex), offsetof(MatroskaDemuxContext, index), { .n = matroska_index_entry } },
-    CHILD_OF(matroska_segment)
-};
-
-static EbmlSyntax matroska_simpletag[] = {
-    { MATROSKA_ID_TAGNAME,        EBML_UTF8, 0, 0,                   offsetof(MatroskaTag, name) },
-    { MATROSKA_ID_TAGSTRING,      EBML_UTF8, 0, 0,                   offsetof(MatroskaTag, string) },
-    { MATROSKA_ID_TAGLANG,        EBML_STR,  0, 0,                   offsetof(MatroskaTag, lang), { .s = "und" } },
-    { MATROSKA_ID_TAGDEFAULT,     EBML_UINT, 0, 0,                   offsetof(MatroskaTag, def), { .u = 1 } },
-    { MATROSKA_ID_TAGDEFAULT_BUG, EBML_UINT, 0, 0,                   offsetof(MatroskaTag, def), { .u = 1 } },
-    { MATROSKA_ID_SIMPLETAG,      EBML_NEST, 0, sizeof(MatroskaTag), offsetof(MatroskaTag, sub),  { .n = matroska_simpletag } },
-    CHILD_OF(matroska_tag)
-};
-
-static EbmlSyntax matroska_tagtargets[] = {
-    { MATROSKA_ID_TAGTARGETS_TYPE,       EBML_STR,  0, 0, offsetof(MatroskaTagTarget, type) },
-    { MATROSKA_ID_TAGTARGETS_TYPEVALUE,  EBML_UINT, 0, 0, offsetof(MatroskaTagTarget, typevalue),  { .u = 50 } },
-    { MATROSKA_ID_TAGTARGETS_TRACKUID,   EBML_UINT, 0, 0, offsetof(MatroskaTagTarget, trackuid) },
-    { MATROSKA_ID_TAGTARGETS_CHAPTERUID, EBML_UINT, 0, 0, offsetof(MatroskaTagTarget, chapteruid) },
-    { MATROSKA_ID_TAGTARGETS_ATTACHUID,  EBML_UINT, 0, 0, offsetof(MatroskaTagTarget, attachuid) },
-    CHILD_OF(matroska_tag)
-};
-
-static EbmlSyntax matroska_tag[] = {
-    { MATROSKA_ID_SIMPLETAG,  EBML_NEST, 0, sizeof(MatroskaTag), offsetof(MatroskaTags, tag),    { .n = matroska_simpletag } },
-    { MATROSKA_ID_TAGTARGETS, EBML_NEST, 0, 0,                   offsetof(MatroskaTags, target), { .n = matroska_tagtargets } },
-    CHILD_OF(matroska_tags)
-};
-
-static EbmlSyntax matroska_tags[] = {
-    { MATROSKA_ID_TAG, EBML_NEST, 0, sizeof(MatroskaTags), offsetof(MatroskaDemuxContext, tags), { .n = matroska_tag } },
-    CHILD_OF(matroska_segment)
-};
-
-static EbmlSyntax matroska_seekhead_entry[] = {
-    { MATROSKA_ID_SEEKID,       EBML_UINT, 0, 0, offsetof(MatroskaSeekhead, id) },
-    { MATROSKA_ID_SEEKPOSITION, EBML_UINT, 0, 0, offsetof(MatroskaSeekhead, pos), { .u = -1 } },
-    CHILD_OF(matroska_seekhead)
-};
-
-static EbmlSyntax matroska_seekhead[] = {
-    { MATROSKA_ID_SEEKENTRY, EBML_NEST, 0, sizeof(MatroskaSeekhead), offsetof(MatroskaDemuxContext, seekhead), { .n = matroska_seekhead_entry } },
-    CHILD_OF(matroska_segment)
-};
-
-static EbmlSyntax matroska_segment[] = {
-    { MATROSKA_ID_CLUSTER,     EBML_STOP },
-    { MATROSKA_ID_INFO,        EBML_LEVEL1, 0, 0, 0, { .n = matroska_info } },
-    { MATROSKA_ID_TRACKS,      EBML_LEVEL1, 0, 0, 0, { .n = matroska_tracks } },
-    { MATROSKA_ID_ATTACHMENTS, EBML_LEVEL1, 0, 0, 0, { .n = matroska_attachments } },
-    { MATROSKA_ID_CHAPTERS,    EBML_LEVEL1, 0, 0, 0, { .n = matroska_chapters } },
-    { MATROSKA_ID_CUES,        EBML_LEVEL1, 0, 0, 0, { .n = matroska_index } },
-    { MATROSKA_ID_TAGS,        EBML_LEVEL1, 0, 0, 0, { .n = matroska_tags } },
-    { MATROSKA_ID_SEEKHEAD,    EBML_LEVEL1, 0, 0, 0, { .n = matroska_seekhead } },
-    { 0 }   /* We don't want to go back to level 0, so don't add the parent. */
-};
-
-static EbmlSyntax matroska_segments[] = {
-    { MATROSKA_ID_SEGMENT, EBML_NEST, 0, 0, 0, { .n = matroska_segment } },
-    { 0 }
-};
-
-static EbmlSyntax matroska_blockmore[] = {
-    { MATROSKA_ID_BLOCKADDID,      EBML_UINT, 0, 0, offsetof(MatroskaBlock,additional_id), { .u = 1 } },
-    { MATROSKA_ID_BLOCKADDITIONAL, EBML_BIN,  0, 0, offsetof(MatroskaBlock,additional) },
-    CHILD_OF(matroska_blockadditions)
-};
-
-static EbmlSyntax matroska_blockadditions[] = {
-    { MATROSKA_ID_BLOCKMORE, EBML_NEST, 0, 0, 0, {.n = matroska_blockmore} },
-    CHILD_OF(matroska_blockgroup)
-};
-
-static EbmlSyntax matroska_blockgroup[] = {
-    { MATROSKA_ID_BLOCK,          EBML_BIN,  0, 0, offsetof(MatroskaBlock, bin) },
-    { MATROSKA_ID_BLOCKADDITIONS, EBML_NEST, 0, 0, 0, { .n = matroska_blockadditions} },
-    { MATROSKA_ID_BLOCKDURATION,  EBML_UINT, 0, 0, offsetof(MatroskaBlock, duration) },
-    { MATROSKA_ID_DISCARDPADDING, EBML_SINT, 0, 0, offsetof(MatroskaBlock, discard_padding) },
-    { MATROSKA_ID_BLOCKREFERENCE, EBML_SINT, 1, 0, offsetof(MatroskaBlock, reference) },
-    { MATROSKA_ID_CODECSTATE,     EBML_NONE },
-    {                          1, EBML_UINT, 0, 0, offsetof(MatroskaBlock, non_simple), { .u = 1 } },
-    CHILD_OF(matroska_cluster_parsing)
-};
-
-// The following array contains SimpleBlock and BlockGroup twice
-// in order to reuse the other values for matroska_cluster_enter.
-static EbmlSyntax matroska_cluster_parsing[] = {
-    { MATROSKA_ID_SIMPLEBLOCK,     EBML_BIN,  0, 0, offsetof(MatroskaBlock, bin) },
-    { MATROSKA_ID_BLOCKGROUP,      EBML_NEST, 0, 0, 0, { .n = matroska_blockgroup } },
-    { MATROSKA_ID_CLUSTERTIMECODE, EBML_UINT, 0, 0, offsetof(MatroskaCluster, timecode) },
-    { MATROSKA_ID_SIMPLEBLOCK,     EBML_STOP },
-    { MATROSKA_ID_BLOCKGROUP,      EBML_STOP },
-    { MATROSKA_ID_CLUSTERPOSITION, EBML_NONE },
-    { MATROSKA_ID_CLUSTERPREVSIZE, EBML_NONE },
-    CHILD_OF(matroska_segment)
-};
-
-static EbmlSyntax matroska_cluster_enter[] = {
-    { MATROSKA_ID_CLUSTER,     EBML_NEST, 0, 0, 0, { .n = &matroska_cluster_parsing[2] } },
-    { 0 }
-};
-#undef CHILD_OF
-
 static const CodecMime mkv_image_mime_tags[] = {
     {"image/gif"                  , AV_CODEC_ID_GIF},
     {"image/jpeg"                 , AV_CODEC_ID_MJPEG},
diff --git a/libavformat/matroskasem.c b/libavformat/matroskasem.c
new file mode 100644
index 0000000000..978d7f0281
--- /dev/null
+++ b/libavformat/matroskasem.c
@@ -0,0 +1,397 @@
+/*
+ * Matroska file semantic definition
+ * Copyright (c) 2003-2022 The FFmpeg Project
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+/**
+ * @file
+ * Matroska file semantic element definitions
+ * @author Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * @author with a little help from Moritz Bunkus <moritz@bunkus.org>
+ * @author totally reworked by Aurelien Jacobs <aurel@gnuage.org>
+ * @author Split from decoder by Steve Lhomme <slhomme@matroska.org>
+ * @see specs available on the Matroska project page: http://www.matroska.org/
+ */
+
+#include "config.h"
+
+#include <inttypes.h>
+
+#include "matroskasem.h"
+
+#define CHILD_OF(parent) { .def = { .n = parent } }
+
+static EbmlSyntax ebml_header[] = {
+    { EBML_ID_EBMLREADVERSION,    EBML_UINT, 0, 0, offsetof(Ebml, version),         { .u = EBML_VERSION } },
+    { EBML_ID_EBMLMAXSIZELENGTH,  EBML_UINT, 0, 0, offsetof(Ebml, max_size),        { .u = 8 } },
+    { EBML_ID_EBMLMAXIDLENGTH,    EBML_UINT, 0, 0, offsetof(Ebml, id_length),       { .u = 4 } },
+    { EBML_ID_DOCTYPE,            EBML_STR,  0, 0, offsetof(Ebml, doctype),         { .s = "(none)" } },
+    { EBML_ID_DOCTYPEREADVERSION, EBML_UINT, 0, 0, offsetof(Ebml, doctype_version), { .u = 1 } },
+    { EBML_ID_EBMLVERSION,        EBML_NONE },
+    { EBML_ID_DOCTYPEVERSION,     EBML_NONE },
+    CHILD_OF(ebml_syntax)
+};
+
+EbmlSyntax ebml_syntax[] = {
+    { EBML_ID_HEADER,      EBML_NEST, 0, 0, 0, { .n = ebml_header } },
+    { MATROSKA_ID_SEGMENT, EBML_STOP },
+    { 0 }
+};
+
+static EbmlSyntax matroska_info[] = {
+    { MATROSKA_ID_TIMECODESCALE, EBML_UINT,  0, 0, offsetof(MatroskaDemuxContext, time_scale), { .u = 1000000 } },
+    { 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 },
+    CHILD_OF(matroska_segment)
+};
+
+static EbmlSyntax matroska_mastering_meta[] = {
+    { MATROSKA_ID_VIDEOCOLOR_RX, EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, r_x) },
+    { MATROSKA_ID_VIDEOCOLOR_RY, EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, r_y) },
+    { MATROSKA_ID_VIDEOCOLOR_GX, EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, g_x) },
+    { MATROSKA_ID_VIDEOCOLOR_GY, EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, g_y) },
+    { MATROSKA_ID_VIDEOCOLOR_BX, EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, b_x) },
+    { MATROSKA_ID_VIDEOCOLOR_BY, EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, b_y) },
+    { MATROSKA_ID_VIDEOCOLOR_WHITEX, EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, white_x) },
+    { MATROSKA_ID_VIDEOCOLOR_WHITEY, EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, white_y) },
+    { MATROSKA_ID_VIDEOCOLOR_LUMINANCEMIN, EBML_FLOAT, 1, 0, offsetof(MatroskaMasteringMeta, min_luminance) },
+    { MATROSKA_ID_VIDEOCOLOR_LUMINANCEMAX, EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, max_luminance) },
+    CHILD_OF(matroska_track_video_color)
+};
+
+EbmlSyntax matroska_track_video_color[] = {
+    { MATROSKA_ID_VIDEOCOLORMATRIXCOEFF,      EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, matrix_coefficients), { .u = AVCOL_SPC_UNSPECIFIED } },
+    { MATROSKA_ID_VIDEOCOLORBITSPERCHANNEL,   EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, bits_per_channel) },
+    { MATROSKA_ID_VIDEOCOLORCHROMASUBHORZ,    EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, chroma_sub_horz) },
+    { MATROSKA_ID_VIDEOCOLORCHROMASUBVERT,    EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, chroma_sub_vert) },
+    { MATROSKA_ID_VIDEOCOLORCBSUBHORZ,        EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, cb_sub_horz) },
+    { MATROSKA_ID_VIDEOCOLORCBSUBVERT,        EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, cb_sub_vert) },
+    { MATROSKA_ID_VIDEOCOLORCHROMASITINGHORZ, EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, chroma_siting_horz), { .u = MATROSKA_COLOUR_CHROMASITINGHORZ_UNDETERMINED } },
+    { MATROSKA_ID_VIDEOCOLORCHROMASITINGVERT, EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, chroma_siting_vert), { .u = MATROSKA_COLOUR_CHROMASITINGVERT_UNDETERMINED } },
+    { MATROSKA_ID_VIDEOCOLORRANGE,            EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, range), { .u = AVCOL_RANGE_UNSPECIFIED } },
+    { MATROSKA_ID_VIDEOCOLORTRANSFERCHARACTERISTICS, EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, transfer_characteristics), { .u = AVCOL_TRC_UNSPECIFIED } },
+    { MATROSKA_ID_VIDEOCOLORPRIMARIES,        EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, primaries), { .u = AVCOL_PRI_UNSPECIFIED } },
+    { MATROSKA_ID_VIDEOCOLORMAXCLL,           EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, max_cll) },
+    { MATROSKA_ID_VIDEOCOLORMAXFALL,          EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, max_fall) },
+    { MATROSKA_ID_VIDEOCOLORMASTERINGMETA,    EBML_NEST, 0, 0, offsetof(MatroskaTrackVideoColor, mastering_meta), { .n = matroska_mastering_meta } },
+    CHILD_OF(matroska_track_video)
+};
+
+static EbmlSyntax matroska_track_video_projection[] = {
+    { MATROSKA_ID_VIDEOPROJECTIONTYPE,        EBML_UINT,  0, 0, offsetof(MatroskaTrackVideoProjection, type), { .u = MATROSKA_VIDEO_PROJECTION_TYPE_RECTANGULAR } },
+    { MATROSKA_ID_VIDEOPROJECTIONPRIVATE,     EBML_BIN,   0, 0, offsetof(MatroskaTrackVideoProjection, private) },
+    { MATROSKA_ID_VIDEOPROJECTIONPOSEYAW,     EBML_FLOAT, 0, 0, offsetof(MatroskaTrackVideoProjection, yaw),   { .f = 0.0 } },
+    { MATROSKA_ID_VIDEOPROJECTIONPOSEPITCH,   EBML_FLOAT, 0, 0, offsetof(MatroskaTrackVideoProjection, pitch), { .f = 0.0 } },
+    { MATROSKA_ID_VIDEOPROJECTIONPOSEROLL,    EBML_FLOAT, 0, 0, offsetof(MatroskaTrackVideoProjection, roll),  { .f = 0.0 } },
+    CHILD_OF(matroska_track_video)
+};
+
+EbmlSyntax matroska_track_video[] = {
+    { MATROSKA_ID_VIDEOFRAMERATE,      EBML_FLOAT, 0, 0, offsetof(MatroskaTrackVideo, frame_rate) },
+    { MATROSKA_ID_VIDEODISPLAYWIDTH,   EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, display_width), { .u=-1 } },
+    { MATROSKA_ID_VIDEODISPLAYHEIGHT,  EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, display_height), { .u=-1 } },
+    { MATROSKA_ID_VIDEOPIXELWIDTH,     EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, pixel_width) },
+    { MATROSKA_ID_VIDEOPIXELHEIGHT,    EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, pixel_height) },
+    { MATROSKA_ID_VIDEOCOLORSPACE,     EBML_BIN,   0, 0, offsetof(MatroskaTrackVideo, color_space) },
+    { MATROSKA_ID_VIDEOALPHAMODE,      EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, alpha_mode) },
+    { MATROSKA_ID_VIDEOCOLOR,          EBML_NEST,  0, sizeof(MatroskaTrackVideoColor), offsetof(MatroskaTrackVideo, color), { .n = matroska_track_video_color } },
+    { MATROSKA_ID_VIDEOPROJECTION,     EBML_NEST,  0, 0, offsetof(MatroskaTrackVideo, projection), { .n = matroska_track_video_projection } },
+    { MATROSKA_ID_VIDEOPIXELCROPB,     EBML_NONE },
+    { MATROSKA_ID_VIDEOPIXELCROPT,     EBML_NONE },
+    { MATROSKA_ID_VIDEOPIXELCROPL,     EBML_NONE },
+    { MATROSKA_ID_VIDEOPIXELCROPR,     EBML_NONE },
+    { MATROSKA_ID_VIDEODISPLAYUNIT,    EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, display_unit), { .u= MATROSKA_VIDEO_DISPLAYUNIT_PIXELS } },
+    { MATROSKA_ID_VIDEOFLAGINTERLACED, EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, interlaced),  { .u = MATROSKA_VIDEO_INTERLACE_FLAG_UNDETERMINED } },
+    { MATROSKA_ID_VIDEOFIELDORDER,     EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, field_order), { .u = MATROSKA_VIDEO_FIELDORDER_UNDETERMINED } },
+    { MATROSKA_ID_VIDEOSTEREOMODE,     EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, stereo_mode), { .u = MATROSKA_VIDEO_STEREOMODE_TYPE_NB } },
+    { MATROSKA_ID_VIDEOASPECTRATIO,    EBML_NONE },
+    CHILD_OF(matroska_track)
+};
+
+static EbmlSyntax matroska_track_audio[] = {
+    { MATROSKA_ID_AUDIOSAMPLINGFREQ,    EBML_FLOAT, 0, 0, offsetof(MatroskaTrackAudio, samplerate), { .f = 8000.0 } },
+    { MATROSKA_ID_AUDIOOUTSAMPLINGFREQ, EBML_FLOAT, 0, 0, offsetof(MatroskaTrackAudio, out_samplerate) },
+    { MATROSKA_ID_AUDIOBITDEPTH,        EBML_UINT,  0, 0, offsetof(MatroskaTrackAudio, bitdepth) },
+    { MATROSKA_ID_AUDIOCHANNELS,        EBML_UINT,  0, 0, offsetof(MatroskaTrackAudio, channels),   { .u = 1 } },
+    CHILD_OF(matroska_track)
+};
+
+static EbmlSyntax matroska_track_encoding_compression[] = {
+    { MATROSKA_ID_ENCODINGCOMPALGO,     EBML_UINT, 0, 0, offsetof(MatroskaTrackCompression, algo), { .u = MATROSKA_TRACK_ENCODING_COMP_ZLIB } },
+    { MATROSKA_ID_ENCODINGCOMPSETTINGS, EBML_BIN,  0, 0, offsetof(MatroskaTrackCompression, settings) },
+    CHILD_OF(matroska_track_encoding)
+};
+
+static EbmlSyntax matroska_track_encoding_encryption[] = {
+    { MATROSKA_ID_ENCODINGENCALGO,        EBML_UINT, 0, 0, offsetof(MatroskaTrackEncryption,algo) },
+    { MATROSKA_ID_ENCODINGENCKEYID,       EBML_BIN, 0, 0, offsetof(MatroskaTrackEncryption,key_id) },
+    { MATROSKA_ID_ENCODINGENCAESSETTINGS, EBML_NONE },
+    { MATROSKA_ID_ENCODINGSIGALGO,        EBML_NONE },
+    { MATROSKA_ID_ENCODINGSIGHASHALGO,    EBML_NONE },
+    { MATROSKA_ID_ENCODINGSIGKEYID,       EBML_NONE },
+    { MATROSKA_ID_ENCODINGSIGNATURE,      EBML_NONE },
+    CHILD_OF(matroska_track_encoding)
+};
+EbmlSyntax matroska_track_encoding[] = {
+    { MATROSKA_ID_ENCODINGSCOPE,       EBML_UINT, 0, 0, offsetof(MatroskaTrackEncoding, scope),       { .u = 1 } },
+    { MATROSKA_ID_ENCODINGTYPE,        EBML_UINT, 0, 0, offsetof(MatroskaTrackEncoding, type) },
+    { MATROSKA_ID_ENCODINGCOMPRESSION, EBML_NEST, 0, 0, offsetof(MatroskaTrackEncoding, compression), { .n = matroska_track_encoding_compression } },
+    { MATROSKA_ID_ENCODINGENCRYPTION,  EBML_NEST, 0, 0, offsetof(MatroskaTrackEncoding, encryption),  { .n = matroska_track_encoding_encryption } },
+    { MATROSKA_ID_ENCODINGORDER,       EBML_NONE },
+    CHILD_OF(matroska_track_encodings)
+};
+
+EbmlSyntax matroska_track_encodings[] = {
+    { MATROSKA_ID_TRACKCONTENTENCODING, EBML_NEST, 0, sizeof(MatroskaTrackEncoding), offsetof(MatroskaTrack, encodings), { .n = matroska_track_encoding } },
+    CHILD_OF(matroska_track)
+};
+
+static EbmlSyntax matroska_track_plane[] = {
+    { MATROSKA_ID_TRACKPLANEUID,  EBML_UINT, 0, 0, offsetof(MatroskaTrackPlane,uid) },
+    { MATROSKA_ID_TRACKPLANETYPE, EBML_UINT, 0, 0, offsetof(MatroskaTrackPlane,type) },
+    CHILD_OF(matroska_track_combine_planes)
+};
+
+EbmlSyntax matroska_track_combine_planes[] = {
+    { MATROSKA_ID_TRACKPLANE, EBML_NEST, 0, sizeof(MatroskaTrackPlane), offsetof(MatroskaTrackOperation,combine_planes), {.n = matroska_track_plane} },
+    CHILD_OF(matroska_track_operation)
+};
+
+EbmlSyntax matroska_track_operation[] = {
+    { MATROSKA_ID_TRACKCOMBINEPLANES, EBML_NEST, 0, 0, 0, {.n = matroska_track_combine_planes} },
+    CHILD_OF(matroska_track)
+};
+
+EbmlSyntax matroska_block_addition_mapping[] = {
+    { MATROSKA_ID_BLKADDIDVALUE,      EBML_UINT, 0, 0, offsetof(MatroskaBlockAdditionMapping, value) },
+    { MATROSKA_ID_BLKADDIDNAME,       EBML_STR,  0, 0, offsetof(MatroskaBlockAdditionMapping, name) },
+    { MATROSKA_ID_BLKADDIDTYPE,       EBML_UINT, 0, 0, offsetof(MatroskaBlockAdditionMapping, type) },
+    { MATROSKA_ID_BLKADDIDEXTRADATA,  EBML_BIN,  0, 0, offsetof(MatroskaBlockAdditionMapping, extradata) },
+    CHILD_OF(matroska_track)
+};
+
+EbmlSyntax matroska_track[] = {
+    { MATROSKA_ID_TRACKNUMBER,           EBML_UINT,  0, 0, offsetof(MatroskaTrack, num) },
+    { MATROSKA_ID_TRACKNAME,             EBML_UTF8,  0, 0, offsetof(MatroskaTrack, name) },
+    { MATROSKA_ID_TRACKUID,              EBML_UINT,  0, 0, offsetof(MatroskaTrack, uid) },
+    { MATROSKA_ID_TRACKTYPE,             EBML_UINT,  0, 0, offsetof(MatroskaTrack, type) },
+    { MATROSKA_ID_CODECID,               EBML_STR,   0, 0, offsetof(MatroskaTrack, codec_id) },
+    { MATROSKA_ID_CODECPRIVATE,          EBML_BIN,   0, 0, offsetof(MatroskaTrack, codec_priv) },
+    { MATROSKA_ID_CODECDELAY,            EBML_UINT,  0, 0, offsetof(MatroskaTrack, codec_delay) },
+    { MATROSKA_ID_TRACKLANGUAGE,         EBML_STR,   0, 0, offsetof(MatroskaTrack, language),     { .s = "eng" } },
+    { MATROSKA_ID_TRACKDEFAULTDURATION,  EBML_UINT,  0, 0, offsetof(MatroskaTrack, default_duration) },
+    { MATROSKA_ID_TRACKTIMECODESCALE,    EBML_FLOAT, 0, 0, offsetof(MatroskaTrack, time_scale),   { .f = 1.0 } },
+    { MATROSKA_ID_TRACKFLAGCOMMENTARY,   EBML_UINT,  0, 0, offsetof(MatroskaTrack, flag_comment) },
+    { MATROSKA_ID_TRACKFLAGDEFAULT,      EBML_UINT,  0, 0, offsetof(MatroskaTrack, flag_default), { .u = 1 } },
+    { MATROSKA_ID_TRACKFLAGFORCED,       EBML_UINT,  0, 0, offsetof(MatroskaTrack, flag_forced) },
+    { MATROSKA_ID_TRACKFLAGHEARINGIMPAIRED, EBML_UINT, 0, 0, offsetof(MatroskaTrack, flag_hearingimpaired) },
+    { MATROSKA_ID_TRACKFLAGVISUALIMPAIRED, EBML_UINT, 0, 0, offsetof(MatroskaTrack, flag_visualimpaired) },
+    { MATROSKA_ID_TRACKFLAGTEXTDESCRIPTIONS, EBML_UINT, 0, 0, offsetof(MatroskaTrack, flag_textdescriptions) },
+    { MATROSKA_ID_TRACKFLAGORIGINAL,     EBML_UINT,  1, 0, offsetof(MatroskaTrack, flag_original) },
+    { MATROSKA_ID_TRACKVIDEO,            EBML_NEST,  0, 0, offsetof(MatroskaTrack, video),        { .n = matroska_track_video } },
+    { MATROSKA_ID_TRACKAUDIO,            EBML_NEST,  0, 0, offsetof(MatroskaTrack, audio),        { .n = matroska_track_audio } },
+    { MATROSKA_ID_TRACKOPERATION,        EBML_NEST,  0, 0, offsetof(MatroskaTrack, operation),    { .n = matroska_track_operation } },
+    { MATROSKA_ID_TRACKCONTENTENCODINGS, EBML_NEST,  0, 0, 0,                                     { .n = matroska_track_encodings } },
+    { MATROSKA_ID_TRACKMAXBLKADDID,      EBML_UINT,  0, 0, offsetof(MatroskaTrack, max_block_additional_id) },
+    { MATROSKA_ID_TRACKBLKADDMAPPING,    EBML_NEST,  0, sizeof(MatroskaBlockAdditionMapping), offsetof(MatroskaTrack, block_addition_mappings), { .n = matroska_block_addition_mapping } },
+    { MATROSKA_ID_SEEKPREROLL,           EBML_UINT,  0, 0, offsetof(MatroskaTrack, seek_preroll) },
+    { MATROSKA_ID_TRACKFLAGENABLED,      EBML_NONE },
+    { MATROSKA_ID_TRACKFLAGLACING,       EBML_NONE },
+    { MATROSKA_ID_CODECNAME,             EBML_NONE },
+    { MATROSKA_ID_CODECDECODEALL,        EBML_NONE },
+    { MATROSKA_ID_CODECINFOURL,          EBML_NONE },
+    { MATROSKA_ID_CODECDOWNLOADURL,      EBML_NONE },
+    { MATROSKA_ID_TRACKMINCACHE,         EBML_NONE },
+    { MATROSKA_ID_TRACKMAXCACHE,         EBML_NONE },
+    CHILD_OF(matroska_tracks)
+};
+
+EbmlSyntax matroska_tracks[] = {
+    { MATROSKA_ID_TRACKENTRY, EBML_NEST, 0, sizeof(MatroskaTrack), offsetof(MatroskaDemuxContext, tracks), { .n = matroska_track } },
+    CHILD_OF(matroska_segment)
+};
+
+static EbmlSyntax matroska_attachment[] = {
+    { MATROSKA_ID_FILEUID,      EBML_UINT, 0, 0, offsetof(MatroskaAttachment, uid) },
+    { MATROSKA_ID_FILENAME,     EBML_UTF8, 0, 0, offsetof(MatroskaAttachment, filename) },
+    { MATROSKA_ID_FILEMIMETYPE, EBML_STR,  0, 0, offsetof(MatroskaAttachment, mime) },
+    { MATROSKA_ID_FILEDATA,     EBML_BIN,  0, 0, offsetof(MatroskaAttachment, bin) },
+    { MATROSKA_ID_FILEDESC,     EBML_UTF8, 0, 0, offsetof(MatroskaAttachment, description) },
+    CHILD_OF(matroska_attachments)
+};
+
+EbmlSyntax matroska_attachments[] = {
+    { MATROSKA_ID_ATTACHEDFILE, EBML_NEST, 0, sizeof(MatroskaAttachment), offsetof(MatroskaDemuxContext, attachments), { .n = matroska_attachment } },
+    CHILD_OF(matroska_segment)
+};
+
+static EbmlSyntax matroska_chapter_display[] = {
+    { MATROSKA_ID_CHAPSTRING,  EBML_UTF8, 0, 0, offsetof(MatroskaChapter, title) },
+    { MATROSKA_ID_CHAPLANG,    EBML_NONE },
+    { MATROSKA_ID_CHAPCOUNTRY, EBML_NONE },
+    CHILD_OF(matroska_chapter_entry)
+};
+
+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)
+};
+
+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 },
+    CHILD_OF(matroska_chapters)
+};
+
+EbmlSyntax matroska_chapters[] = {
+    { MATROSKA_ID_EDITIONENTRY, EBML_NEST, 0, 0, 0, { .n = matroska_chapter } },
+    CHILD_OF(matroska_segment)
+};
+
+static EbmlSyntax matroska_index_pos[] = {
+    { MATROSKA_ID_CUETRACK,           EBML_UINT, 0, 0, offsetof(MatroskaIndexPos, track) },
+    { MATROSKA_ID_CUECLUSTERPOSITION, EBML_UINT, 0, 0, offsetof(MatroskaIndexPos, pos) },
+    { MATROSKA_ID_CUERELATIVEPOSITION,EBML_NONE },
+    { MATROSKA_ID_CUEDURATION,        EBML_NONE },
+    { MATROSKA_ID_CUEBLOCKNUMBER,     EBML_NONE },
+    CHILD_OF(matroska_index_entry)
+};
+
+EbmlSyntax matroska_index_entry[] = {
+    { MATROSKA_ID_CUETIME,          EBML_UINT, 0, 0,                        offsetof(MatroskaIndex, time) },
+    { MATROSKA_ID_CUETRACKPOSITION, EBML_NEST, 0, sizeof(MatroskaIndexPos), offsetof(MatroskaIndex, pos), { .n = matroska_index_pos } },
+    CHILD_OF(matroska_index)
+};
+
+EbmlSyntax matroska_index[] = {
+    { MATROSKA_ID_POINTENTRY, EBML_NEST, 0, sizeof(MatroskaIndex), offsetof(MatroskaDemuxContext, index), { .n = matroska_index_entry } },
+    CHILD_OF(matroska_segment)
+};
+
+static EbmlSyntax matroska_simpletag[] = {
+    { MATROSKA_ID_TAGNAME,        EBML_UTF8, 0, 0,                   offsetof(MatroskaTag, name) },
+    { MATROSKA_ID_TAGSTRING,      EBML_UTF8, 0, 0,                   offsetof(MatroskaTag, string) },
+    { MATROSKA_ID_TAGLANG,        EBML_STR,  0, 0,                   offsetof(MatroskaTag, lang), { .s = "und" } },
+    { MATROSKA_ID_TAGDEFAULT,     EBML_UINT, 0, 0,                   offsetof(MatroskaTag, def), { .u = 1 } },
+    { MATROSKA_ID_TAGDEFAULT_BUG, EBML_UINT, 0, 0,                   offsetof(MatroskaTag, def), { .u = 1 } },
+    { MATROSKA_ID_SIMPLETAG,      EBML_NEST, 0, sizeof(MatroskaTag), offsetof(MatroskaTag, sub),  { .n = matroska_simpletag } },
+    CHILD_OF(matroska_tag)
+};
+
+static EbmlSyntax matroska_tagtargets[] = {
+    { MATROSKA_ID_TAGTARGETS_TYPE,       EBML_STR,  0, 0, offsetof(MatroskaTagTarget, type) },
+    { MATROSKA_ID_TAGTARGETS_TYPEVALUE,  EBML_UINT, 0, 0, offsetof(MatroskaTagTarget, typevalue),  { .u = 50 } },
+    { MATROSKA_ID_TAGTARGETS_TRACKUID,   EBML_UINT, 0, 0, offsetof(MatroskaTagTarget, trackuid) },
+    { MATROSKA_ID_TAGTARGETS_CHAPTERUID, EBML_UINT, 0, 0, offsetof(MatroskaTagTarget, chapteruid) },
+    { MATROSKA_ID_TAGTARGETS_ATTACHUID,  EBML_UINT, 0, 0, offsetof(MatroskaTagTarget, attachuid) },
+    CHILD_OF(matroska_tag)
+};
+
+EbmlSyntax matroska_tag[] = {
+    { MATROSKA_ID_SIMPLETAG,  EBML_NEST, 0, sizeof(MatroskaTag), offsetof(MatroskaTags, tag),    { .n = matroska_simpletag } },
+    { MATROSKA_ID_TAGTARGETS, EBML_NEST, 0, 0,                   offsetof(MatroskaTags, target), { .n = matroska_tagtargets } },
+    CHILD_OF(matroska_tags)
+};
+
+EbmlSyntax matroska_tags[] = {
+    { MATROSKA_ID_TAG, EBML_NEST, 0, sizeof(MatroskaTags), offsetof(MatroskaDemuxContext, tags), { .n = matroska_tag } },
+    CHILD_OF(matroska_segment)
+};
+
+static EbmlSyntax matroska_seekhead_entry[] = {
+    { MATROSKA_ID_SEEKID,       EBML_UINT, 0, 0, offsetof(MatroskaSeekhead, id) },
+    { MATROSKA_ID_SEEKPOSITION, EBML_UINT, 0, 0, offsetof(MatroskaSeekhead, pos), { .u = -1 } },
+    CHILD_OF(matroska_seekhead)
+};
+
+EbmlSyntax matroska_seekhead[] = {
+    { MATROSKA_ID_SEEKENTRY, EBML_NEST, 0, sizeof(MatroskaSeekhead), offsetof(MatroskaDemuxContext, seekhead), { .n = matroska_seekhead_entry } },
+    CHILD_OF(matroska_segment)
+};
+
+EbmlSyntax matroska_segment[] = {
+    { MATROSKA_ID_CLUSTER,     EBML_STOP },
+    { MATROSKA_ID_INFO,        EBML_LEVEL1, 0, 0, 0, { .n = matroska_info } },
+    { MATROSKA_ID_TRACKS,      EBML_LEVEL1, 0, 0, 0, { .n = matroska_tracks } },
+    { MATROSKA_ID_ATTACHMENTS, EBML_LEVEL1, 0, 0, 0, { .n = matroska_attachments } },
+    { MATROSKA_ID_CHAPTERS,    EBML_LEVEL1, 0, 0, 0, { .n = matroska_chapters } },
+    { MATROSKA_ID_CUES,        EBML_LEVEL1, 0, 0, 0, { .n = matroska_index } },
+    { MATROSKA_ID_TAGS,        EBML_LEVEL1, 0, 0, 0, { .n = matroska_tags } },
+    { MATROSKA_ID_SEEKHEAD,    EBML_LEVEL1, 0, 0, 0, { .n = matroska_seekhead } },
+    { 0 }   /* We don't want to go back to level 0, so don't add the parent. */
+};
+
+EbmlSyntax matroska_segments[] = {
+    { MATROSKA_ID_SEGMENT, EBML_NEST, 0, 0, 0, { .n = matroska_segment } },
+    { 0 }
+};
+
+static EbmlSyntax matroska_blockmore[] = {
+    { MATROSKA_ID_BLOCKADDID,      EBML_UINT, 0, 0, offsetof(MatroskaBlock,additional_id), { .u = 1 } },
+    { MATROSKA_ID_BLOCKADDITIONAL, EBML_BIN,  0, 0, offsetof(MatroskaBlock,additional) },
+    CHILD_OF(matroska_blockadditions)
+};
+
+EbmlSyntax matroska_blockadditions[] = {
+    { MATROSKA_ID_BLOCKMORE, EBML_NEST, 0, 0, 0, {.n = matroska_blockmore} },
+    CHILD_OF(matroska_blockgroup)
+};
+
+EbmlSyntax matroska_blockgroup[] = {
+    { MATROSKA_ID_BLOCK,          EBML_BIN,  0, 0, offsetof(MatroskaBlock, bin) },
+    { MATROSKA_ID_BLOCKADDITIONS, EBML_NEST, 0, 0, 0, { .n = matroska_blockadditions} },
+    { MATROSKA_ID_BLOCKDURATION,  EBML_UINT, 0, 0, offsetof(MatroskaBlock, duration) },
+    { MATROSKA_ID_DISCARDPADDING, EBML_SINT, 0, 0, offsetof(MatroskaBlock, discard_padding) },
+    { MATROSKA_ID_BLOCKREFERENCE, EBML_SINT, 1, 0, offsetof(MatroskaBlock, reference) },
+    { MATROSKA_ID_CODECSTATE,     EBML_NONE },
+    {                          1, EBML_UINT, 0, 0, offsetof(MatroskaBlock, non_simple), { .u = 1 } },
+    CHILD_OF(matroska_cluster_parsing)
+};
+
+// The following array contains SimpleBlock and BlockGroup twice
+// in order to reuse the other values for matroska_cluster_enter.
+EbmlSyntax matroska_cluster_parsing[] = {
+    { MATROSKA_ID_SIMPLEBLOCK,     EBML_BIN,  0, 0, offsetof(MatroskaBlock, bin) },
+    { MATROSKA_ID_BLOCKGROUP,      EBML_NEST, 0, 0, 0, { .n = matroska_blockgroup } },
+    { MATROSKA_ID_CLUSTERTIMECODE, EBML_UINT, 0, 0, offsetof(MatroskaCluster, timecode) },
+    { MATROSKA_ID_SIMPLEBLOCK,     EBML_STOP },
+    { MATROSKA_ID_BLOCKGROUP,      EBML_STOP },
+    { MATROSKA_ID_CLUSTERPOSITION, EBML_NONE },
+    { MATROSKA_ID_CLUSTERPREVSIZE, EBML_NONE },
+    CHILD_OF(matroska_segment)
+};
+
+EbmlSyntax matroska_cluster_enter[] = {
+    { MATROSKA_ID_CLUSTER,     EBML_NEST, 0, 0, 0, { .n = &matroska_cluster_parsing[2] } },
+    { 0 }
+};
diff --git a/libavformat/matroskasem.h b/libavformat/matroskasem.h
new file mode 100644
index 0000000000..01008b00bb
--- /dev/null
+++ b/libavformat/matroskasem.h
@@ -0,0 +1,394 @@
+/*
+ * Matroska file semantic definition
+ * Copyright (c) 2003-2022 The FFmpeg project
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+/**
+ * @file
+ * Matroska file demuxer
+ * @author Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * @author with a little help from Moritz Bunkus <moritz@bunkus.org>
+ * @author totally reworked by Aurelien Jacobs <aurel@gnuage.org>
+ * @see specs available on the Matroska project page: http://www.matroska.org/
+ */
+
+#ifndef AVFORMAT_MATROSKASEM_H
+#define AVFORMAT_MATROSKASEM_H
+
+#include <inttypes.h>
+
+#include "matroska.h"
+#include "avformat.h"
+#include "libavutil/frame.h"
+#include "libavcodec/packet_internal.h"
+
+typedef enum {
+    EBML_NONE,
+    EBML_UINT,
+    EBML_SINT,
+    EBML_FLOAT,
+    EBML_STR,
+    EBML_UTF8,
+    EBML_BIN,
+    EBML_NEST,
+    EBML_LEVEL1,
+    EBML_STOP,
+    EBML_TYPE_COUNT
+} EbmlType;
+
+typedef struct CountedElement {
+    union {
+        uint64_t  u;
+        int64_t   i;
+        double    f;
+        char     *s;
+    } el;
+    unsigned count;
+} CountedElement;
+
+typedef const struct EbmlSyntax {
+    uint32_t id;
+    uint8_t type;
+    uint8_t is_counted;
+    size_t list_elem_size;
+    size_t data_offset;
+    union {
+        int64_t     i;
+        uint64_t    u;
+        double      f;
+        const char *s;
+        const struct EbmlSyntax *n;
+    } def;
+} EbmlSyntax;
+
+typedef struct EbmlList {
+    int nb_elem;
+    unsigned int alloc_elem_size;
+    void *elem;
+} EbmlList;
+
+typedef struct EbmlBin {
+    int      size;
+    AVBufferRef *buf;
+    uint8_t *data;
+    int64_t  pos;
+} EbmlBin;
+
+typedef struct Ebml {
+    uint64_t version;
+    uint64_t max_size;
+    uint64_t id_length;
+    char    *doctype;
+    uint64_t doctype_version;
+} Ebml;
+
+typedef struct MatroskaTrackCompression {
+    uint64_t algo;
+    EbmlBin  settings;
+} MatroskaTrackCompression;
+
+typedef struct MatroskaTrackEncryption {
+    uint64_t algo;
+    EbmlBin  key_id;
+} MatroskaTrackEncryption;
+
+typedef struct MatroskaTrackEncoding {
+    uint64_t scope;
+    uint64_t type;
+    MatroskaTrackCompression compression;
+    MatroskaTrackEncryption encryption;
+} MatroskaTrackEncoding;
+
+typedef struct MatroskaMasteringMeta {
+    double r_x;
+    double r_y;
+    double g_x;
+    double g_y;
+    double b_x;
+    double b_y;
+    double white_x;
+    double white_y;
+    double max_luminance;
+    CountedElement min_luminance;
+} MatroskaMasteringMeta;
+
+typedef struct MatroskaTrackVideoColor {
+    uint64_t matrix_coefficients;
+    uint64_t bits_per_channel;
+    uint64_t chroma_sub_horz;
+    uint64_t chroma_sub_vert;
+    uint64_t cb_sub_horz;
+    uint64_t cb_sub_vert;
+    uint64_t chroma_siting_horz;
+    uint64_t chroma_siting_vert;
+    uint64_t range;
+    uint64_t transfer_characteristics;
+    uint64_t primaries;
+    uint64_t max_cll;
+    uint64_t max_fall;
+    MatroskaMasteringMeta mastering_meta;
+} MatroskaTrackVideoColor;
+
+typedef struct MatroskaTrackVideoProjection {
+    uint64_t type;
+    EbmlBin private;
+    double yaw;
+    double pitch;
+    double roll;
+} MatroskaTrackVideoProjection;
+
+typedef struct MatroskaTrackVideo {
+    double   frame_rate;
+    uint64_t display_width;
+    uint64_t display_height;
+    uint64_t pixel_width;
+    uint64_t pixel_height;
+    EbmlBin  color_space;
+    uint64_t display_unit;
+    uint64_t interlaced;
+    uint64_t field_order;
+    uint64_t stereo_mode;
+    uint64_t alpha_mode;
+    EbmlList color;
+    MatroskaTrackVideoProjection projection;
+} MatroskaTrackVideo;
+
+typedef struct MatroskaTrackAudio {
+    double   samplerate;
+    double   out_samplerate;
+    uint64_t bitdepth;
+    uint64_t channels;
+
+    /* real audio header (extracted from extradata) */
+    int      coded_framesize;
+    int      sub_packet_h;
+    int      frame_size;
+    int      sub_packet_size;
+    int      sub_packet_cnt;
+    int      pkt_cnt;
+    uint64_t buf_timecode;
+    uint8_t *buf;
+} MatroskaTrackAudio;
+
+typedef struct MatroskaTrackPlane {
+    uint64_t uid;
+    uint64_t type;
+} MatroskaTrackPlane;
+
+typedef struct MatroskaTrackOperation {
+    EbmlList combine_planes;
+} MatroskaTrackOperation;
+
+typedef struct MatroskaBlockAdditionMapping {
+    uint64_t value;
+    char *name;
+    uint64_t type;
+    EbmlBin extradata;
+} MatroskaBlockAdditionMapping;
+
+typedef struct MatroskaTrack {
+    uint64_t num;
+    uint64_t uid;
+    uint64_t type;
+    char    *name;
+    char    *codec_id;
+    EbmlBin  codec_priv;
+    char    *language;
+    double time_scale;
+    uint64_t default_duration;
+    uint64_t flag_default;
+    uint64_t flag_forced;
+    uint64_t flag_comment;
+    uint64_t flag_hearingimpaired;
+    uint64_t flag_visualimpaired;
+    uint64_t flag_textdescriptions;
+    CountedElement flag_original;
+    uint64_t seek_preroll;
+    MatroskaTrackVideo video;
+    MatroskaTrackAudio audio;
+    MatroskaTrackOperation operation;
+    EbmlList encodings;
+    uint64_t codec_delay;
+    uint64_t codec_delay_in_track_tb;
+
+    AVStream *stream;
+    int64_t end_timecode;
+    int ms_compat;
+    int needs_decoding;
+    uint64_t max_block_additional_id;
+    EbmlList block_addition_mappings;
+
+    uint32_t palette[AVPALETTE_COUNT];
+    int has_palette;
+} MatroskaTrack;
+
+typedef struct MatroskaAttachment {
+    uint64_t uid;
+    char *filename;
+    char *description;
+    char *mime;
+    EbmlBin bin;
+
+    AVStream *stream;
+} MatroskaAttachment;
+
+typedef struct MatroskaChapter {
+    uint64_t start;
+    uint64_t end;
+    uint64_t uid;
+    char    *title;
+
+    AVChapter *chapter;
+} MatroskaChapter;
+
+typedef struct MatroskaIndexPos {
+    uint64_t track;
+    uint64_t pos;
+} MatroskaIndexPos;
+
+typedef struct MatroskaIndex {
+    uint64_t time;
+    EbmlList pos;
+} MatroskaIndex;
+
+typedef struct MatroskaTag {
+    char *name;
+    char *string;
+    char *lang;
+    uint64_t def;
+    EbmlList sub;
+} MatroskaTag;
+
+typedef struct MatroskaTagTarget {
+    char    *type;
+    uint64_t typevalue;
+    uint64_t trackuid;
+    uint64_t chapteruid;
+    uint64_t attachuid;
+} MatroskaTagTarget;
+
+typedef struct MatroskaTags {
+    MatroskaTagTarget target;
+    EbmlList tag;
+} MatroskaTags;
+
+typedef struct MatroskaSeekhead {
+    uint64_t id;
+    uint64_t pos;
+} MatroskaSeekhead;
+
+typedef struct MatroskaLevel {
+    uint64_t start;
+    uint64_t length;
+} MatroskaLevel;
+
+typedef struct MatroskaBlock {
+    uint64_t duration;
+    CountedElement reference;
+    uint64_t non_simple;
+    EbmlBin  bin;
+    uint64_t additional_id;
+    EbmlBin  additional;
+    int64_t  discard_padding;
+} MatroskaBlock;
+
+typedef struct MatroskaCluster {
+    MatroskaBlock block;
+    uint64_t timecode;
+    int64_t pos;
+} MatroskaCluster;
+
+typedef struct MatroskaLevel1Element {
+    int64_t  pos;
+    uint32_t id;
+    int parsed;
+} MatroskaLevel1Element;
+
+typedef struct MatroskaDemuxContext {
+    const AVClass *class;
+    AVFormatContext *ctx;
+
+    /* EBML stuff */
+    MatroskaLevel levels[EBML_MAX_DEPTH];
+    int      num_levels;
+    uint32_t current_id;
+    int64_t  resync_pos;
+    int      unknown_count;
+
+    uint64_t time_scale;
+    double   duration;
+    char    *title;
+    char    *muxingapp;
+    EbmlBin  date_utc;
+    EbmlList tracks;
+    EbmlList attachments;
+    EbmlList chapters;
+    EbmlList index;
+    EbmlList tags;
+    EbmlList seekhead;
+
+    /* byte position of the segment inside the stream */
+    int64_t segment_start;
+
+    /* This packet coincides with FFFormatContext.parse_pkt
+     * and is not owned by us. */
+    AVPacket *pkt;
+
+    /* the packet queue */
+    PacketList queue;
+
+    int done;
+
+    /* What to skip before effectively reading a packet. */
+    int skip_to_keyframe;
+    uint64_t skip_to_timecode;
+
+    /* File has a CUES element, but we defer parsing until it is needed. */
+    int cues_parsing_deferred;
+
+    /* Level1 elements and whether they were read yet */
+    MatroskaLevel1Element level1_elems[64];
+    int num_level1_elems;
+
+    MatroskaCluster current_cluster;
+
+    /* WebM DASH Manifest live flag */
+    int is_live;
+
+    /* Bandwidth value for WebM DASH Manifest */
+    int bandwidth;
+} MatroskaDemuxContext;
+
+#define CHILD_OF(parent) { .def = { .n = parent } }
+
+// The following forward declarations need their size because
+// a tentative definition with internal linkage must not be an
+// incomplete type (6.7.2 in C90, 6.9.2 in C99).
+// Removing the sizes breaks MSVC.
+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_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];
+
+EbmlSyntax matroska_segments[2];
+EbmlSyntax matroska_cluster_enter[2];
+
+#endif /* AVFORMAT_MATROSKASEM_H */
-- 
2.20.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] 13+ messages in thread

* [FFmpeg-devel] [PATCH 06/12] avformat/matroska_ids: move some IDs in separate sections
  2022-11-06 15:08 [FFmpeg-devel] [PATCH 00/12] Use generated semantic for Matroska demuxer Steve Lhomme
                   ` (4 preceding siblings ...)
  2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 05/12] avformat/matroskadec: move the elements semantic in a separate file Steve Lhomme
@ 2022-11-06 15:08 ` Steve Lhomme
  2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 07/12] avformat/matroska_ids: reorder some IDs to match the generated order Steve Lhomme
                   ` (5 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: Steve Lhomme @ 2022-11-06 15:08 UTC (permalink / raw)
  To: ffmpeg-devel

According grouped with their parent's elements.

No value added/removed.

Some IDs have been moved to match their parent section.

Use a consistent wording in all sections.
---
 libavformat/matroska_ids.h | 83 ++++++++++++++++++++++++++------------
 1 file changed, 58 insertions(+), 25 deletions(-)

diff --git a/libavformat/matroska_ids.h b/libavformat/matroska_ids.h
index ddd20d6036..09579052c4 100644
--- a/libavformat/matroska_ids.h
+++ b/libavformat/matroska_ids.h
@@ -48,7 +48,7 @@
 #define MATROSKA_ID_DATEUTC    0x4461
 #define MATROSKA_ID_SEGMENTUID 0x73A4
 
-/* ID in the tracks master */
+/* IDs in the tracks master */
 #define MATROSKA_ID_TRACKENTRY 0xAE
 
 /* IDs in the trackentry master */
@@ -58,10 +58,9 @@
 #define MATROSKA_ID_TRACKVIDEO     0xE0
 #define MATROSKA_ID_TRACKAUDIO     0xE1
 #define MATROSKA_ID_TRACKOPERATION 0xE2
-#define MATROSKA_ID_TRACKCOMBINEPLANES 0xE3
-#define MATROSKA_ID_TRACKPLANE         0xE4
-#define MATROSKA_ID_TRACKPLANEUID      0xE5
-#define MATROSKA_ID_TRACKPLANETYPE     0xE6
+#define MATROSKA_ID_TRACKTIMECODESCALE 0x23314F
+#define MATROSKA_ID_TRACKMAXBLKADDID 0x55EE
+#define MATROSKA_ID_TRACKBLKADDMAPPING 0x41E4
 #define MATROSKA_ID_CODECID    0x86
 #define MATROSKA_ID_CODECPRIVATE 0x63A2
 #define MATROSKA_ID_CODECNAME  0x258688
@@ -85,10 +84,19 @@
 #define MATROSKA_ID_TRACKMAXCACHE 0x6DF8
 #define MATROSKA_ID_TRACKDEFAULTDURATION 0x23E383
 #define MATROSKA_ID_TRACKCONTENTENCODINGS 0x6D80
+
+/* IDs in the contentencodings master */
 #define MATROSKA_ID_TRACKCONTENTENCODING 0x6240
-#define MATROSKA_ID_TRACKTIMECODESCALE 0x23314F
-#define MATROSKA_ID_TRACKMAXBLKADDID 0x55EE
-#define MATROSKA_ID_TRACKBLKADDMAPPING 0x41E4
+
+/* IDs in the trackoperation master */
+#define MATROSKA_ID_TRACKCOMBINEPLANES 0xE3
+
+/* IDs in the trackcombineplanes master */
+#define MATROSKA_ID_TRACKPLANE         0xE4
+
+/* IDs in the trackplane master */
+#define MATROSKA_ID_TRACKPLANEUID      0xE5
+#define MATROSKA_ID_TRACKPLANETYPE     0xE6
 
 /* IDs in the trackvideo master */
 #define MATROSKA_ID_VIDEOFRAMERATE 0x2383E3
@@ -108,7 +116,9 @@
 #define MATROSKA_ID_VIDEOASPECTRATIO 0x54B3
 #define MATROSKA_ID_VIDEOCOLORSPACE 0x2EB524
 #define MATROSKA_ID_VIDEOCOLOR 0x55B0
+#define MATROSKA_ID_VIDEOPROJECTION 0x7670
 
+/* IDs in the colour master */
 #define MATROSKA_ID_VIDEOCOLORMATRIXCOEFF 0x55B1
 #define MATROSKA_ID_VIDEOCOLORBITSPERCHANNEL 0x55B2
 #define MATROSKA_ID_VIDEOCOLORCHROMASUBHORZ 0x55B3
@@ -125,6 +135,8 @@
 #define MATROSKA_ID_VIDEOCOLORMAXFALL 0x55BD
 
 #define MATROSKA_ID_VIDEOCOLORMASTERINGMETA 0x55D0
+
+/* IDs in the masteringmetadata master */
 #define MATROSKA_ID_VIDEOCOLOR_RX 0x55D1
 #define MATROSKA_ID_VIDEOCOLOR_RY 0x55D2
 #define MATROSKA_ID_VIDEOCOLOR_GX 0x55D3
@@ -136,7 +148,7 @@
 #define MATROSKA_ID_VIDEOCOLOR_LUMINANCEMAX 0x55D9
 #define MATROSKA_ID_VIDEOCOLOR_LUMINANCEMIN 0x55DA
 
-#define MATROSKA_ID_VIDEOPROJECTION 0x7670
+/* IDs in the projection master */
 #define MATROSKA_ID_VIDEOPROJECTIONTYPE 0x7671
 #define MATROSKA_ID_VIDEOPROJECTIONPRIVATE 0x7672
 #define MATROSKA_ID_VIDEOPROJECTIONPOSEYAW 0x7673
@@ -155,10 +167,13 @@
 #define MATROSKA_ID_ENCODINGSCOPE 0x5032
 #define MATROSKA_ID_ENCODINGTYPE 0x5033
 #define MATROSKA_ID_ENCODINGCOMPRESSION 0x5034
+#define MATROSKA_ID_ENCODINGENCRYPTION 0x5035
+
+/* IDs in the contentcompression master */
 #define MATROSKA_ID_ENCODINGCOMPALGO 0x4254
 #define MATROSKA_ID_ENCODINGCOMPSETTINGS 0x4255
 
-#define MATROSKA_ID_ENCODINGENCRYPTION 0x5035
+/* IDs in the contentencryption master */
 #define MATROSKA_ID_ENCODINGENCAESSETTINGS 0x47E7
 #define MATROSKA_ID_ENCODINGENCALGO 0x47E1
 #define MATROSKA_ID_ENCODINGENCKEYID 0x47E2
@@ -173,7 +188,7 @@
 #define MATROSKA_ID_BLKADDIDTYPE 0x41E7
 #define MATROSKA_ID_BLKADDIDEXTRADATA 0x41ED
 
-/* ID in the cues master */
+/* IDs in the cues master */
 #define MATROSKA_ID_POINTENTRY 0xBB
 
 /* IDs in the pointentry master */
@@ -189,19 +204,32 @@
 
 /* IDs in the tags master */
 #define MATROSKA_ID_TAG                 0x7373
+
+/* IDs in the tag master */
 #define MATROSKA_ID_SIMPLETAG           0x67C8
-#define MATROSKA_ID_TAGNAME             0x45A3
-#define MATROSKA_ID_TAGSTRING           0x4487
+#define MATROSKA_ID_TAGTARGETS          0x63C0
+
+/* IDs in the simpletag master */
 #define MATROSKA_ID_TAGLANG             0x447A
 #define MATROSKA_ID_TAGDEFAULT          0x4484
+#define MATROSKA_ID_TAGSTRING           0x4487
 #define MATROSKA_ID_TAGDEFAULT_BUG      0x44B4
-#define MATROSKA_ID_TAGTARGETS          0x63C0
+#define MATROSKA_ID_TAGNAME             0x45A3
+
+/* IDs in the targets master */
 #define MATROSKA_ID_TAGTARGETS_TYPE       0x63CA
 #define MATROSKA_ID_TAGTARGETS_TYPEVALUE  0x68CA
 #define MATROSKA_ID_TAGTARGETS_TRACKUID   0x63C5
 #define MATROSKA_ID_TAGTARGETS_CHAPTERUID 0x63C4
 #define MATROSKA_ID_TAGTARGETS_ATTACHUID  0x63C6
 
+/* IDs in the blockadditions master */
+#define MATROSKA_ID_BLOCKMORE 0xA6
+
+/* IDs in the blockmore master */
+#define MATROSKA_ID_BLOCKADDID 0xEE
+#define MATROSKA_ID_BLOCKADDITIONAL 0xA5
+
 /* IDs in the seekhead master */
 #define MATROSKA_ID_SEEKENTRY  0x4DBB
 
@@ -214,14 +242,11 @@
 #define MATROSKA_ID_CLUSTERPOSITION 0xA7
 #define MATROSKA_ID_CLUSTERPREVSIZE 0xAB
 #define MATROSKA_ID_BLOCKGROUP 0xA0
-#define MATROSKA_ID_BLOCKADDITIONS 0x75A1
-#define MATROSKA_ID_BLOCKMORE 0xA6
-#define MATROSKA_ID_BLOCKADDID 0xEE
-#define MATROSKA_ID_BLOCKADDITIONAL 0xA5
 #define MATROSKA_ID_SIMPLEBLOCK 0xA3
 
 /* IDs in the blockgroup master */
 #define MATROSKA_ID_BLOCK      0xA1
+#define MATROSKA_ID_BLOCKADDITIONS 0x75A1
 #define MATROSKA_ID_BLOCKDURATION 0x9B
 #define MATROSKA_ID_BLOCKREFERENCE 0xFB
 #define MATROSKA_ID_CODECSTATE 0xA4
@@ -229,6 +254,8 @@
 
 /* IDs in the attachments master */
 #define MATROSKA_ID_ATTACHEDFILE        0x61A7
+
+/* IDs in the attachedfile master */
 #define MATROSKA_ID_FILEDESC            0x467E
 #define MATROSKA_ID_FILENAME            0x466E
 #define MATROSKA_ID_FILEMIMETYPE        0x4660
@@ -237,21 +264,27 @@
 
 /* IDs in the chapters master */
 #define MATROSKA_ID_EDITIONENTRY        0x45B9
+
+/* IDs in the editionentry master */
 #define MATROSKA_ID_CHAPTERATOM         0xB6
-#define MATROSKA_ID_CHAPTERTIMESTART    0x91
-#define MATROSKA_ID_CHAPTERTIMEEND      0x92
-#define MATROSKA_ID_CHAPTERDISPLAY      0x80
-#define MATROSKA_ID_CHAPSTRING          0x85
-#define MATROSKA_ID_CHAPLANG            0x437C
-#define MATROSKA_ID_CHAPCOUNTRY         0x437E
 #define MATROSKA_ID_EDITIONUID          0x45BC
 #define MATROSKA_ID_EDITIONFLAGHIDDEN   0x45BD
 #define MATROSKA_ID_EDITIONFLAGDEFAULT  0x45DB
 #define MATROSKA_ID_EDITIONFLAGORDERED  0x45DD
+
+/* IDs in the chapteratom master */
 #define MATROSKA_ID_CHAPTERUID          0x73C4
+#define MATROSKA_ID_CHAPTERTIMESTART    0x91
+#define MATROSKA_ID_CHAPTERTIMEEND      0x92
 #define MATROSKA_ID_CHAPTERFLAGHIDDEN   0x98
-#define MATROSKA_ID_CHAPTERFLAGENABLED  0x4598
 #define MATROSKA_ID_CHAPTERPHYSEQUIV    0x63C3
+#define MATROSKA_ID_CHAPTERDISPLAY      0x80
+#define MATROSKA_ID_CHAPTERFLAGENABLED  0x4598
+
+/* IDs in the chapterdisplay master */
+#define MATROSKA_ID_CHAPSTRING          0x85
+#define MATROSKA_ID_CHAPLANG            0x437C
+#define MATROSKA_ID_CHAPCOUNTRY         0x437E
 
 typedef enum {
   MATROSKA_TRACK_TYPE_NONE     = 0x0,
-- 
2.20.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] 13+ messages in thread

* [FFmpeg-devel] [PATCH 07/12] avformat/matroska_ids: reorder some IDs to match the generated order
  2022-11-06 15:08 [FFmpeg-devel] [PATCH 00/12] Use generated semantic for Matroska demuxer Steve Lhomme
                   ` (5 preceding siblings ...)
  2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 06/12] avformat/matroska_ids: move some IDs in separate sections Steve Lhomme
@ 2022-11-06 15:08 ` Steve Lhomme
  2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 08/12] avformat/matroskasem: reorder EbmlSyntax tables Steve Lhomme
                   ` (4 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: Steve Lhomme @ 2022-11-06 15:08 UTC (permalink / raw)
  To: ffmpeg-devel

The XSLT scripts produces a similar file to this one, minus some spacing
differences.

No value added/removed.
---
 libavformat/matroska_ids.h | 106 ++++++++++++++++++-------------------
 1 file changed, 53 insertions(+), 53 deletions(-)

diff --git a/libavformat/matroska_ids.h b/libavformat/matroska_ids.h
index 09579052c4..ab1d84337a 100644
--- a/libavformat/matroska_ids.h
+++ b/libavformat/matroska_ids.h
@@ -58,9 +58,16 @@
 #define MATROSKA_ID_TRACKVIDEO     0xE0
 #define MATROSKA_ID_TRACKAUDIO     0xE1
 #define MATROSKA_ID_TRACKOPERATION 0xE2
+#define MATROSKA_ID_TRACKFLAGHEARINGIMPAIRED  0x55AB
+#define MATROSKA_ID_TRACKFLAGVISUALIMPAIRED   0x55AC
+#define MATROSKA_ID_TRACKFLAGTEXTDESCRIPTIONS 0x55AD
+#define MATROSKA_ID_TRACKFLAGORIGINAL         0x55AE
+#define MATROSKA_ID_TRACKFLAGCOMMENTARY       0x55AF
 #define MATROSKA_ID_TRACKTIMECODESCALE 0x23314F
 #define MATROSKA_ID_TRACKMAXBLKADDID 0x55EE
 #define MATROSKA_ID_TRACKBLKADDMAPPING 0x41E4
+#define MATROSKA_ID_TRACKNAME  0x536E
+#define MATROSKA_ID_TRACKLANGUAGE 0x22B59C
 #define MATROSKA_ID_CODECID    0x86
 #define MATROSKA_ID_CODECPRIVATE 0x63A2
 #define MATROSKA_ID_CODECNAME  0x258688
@@ -69,25 +76,44 @@
 #define MATROSKA_ID_CODECDECODEALL 0xAA
 #define MATROSKA_ID_CODECDELAY 0x56AA
 #define MATROSKA_ID_SEEKPREROLL 0x56BB
-#define MATROSKA_ID_TRACKNAME  0x536E
-#define MATROSKA_ID_TRACKLANGUAGE 0x22B59C
 #define MATROSKA_ID_TRACKFLAGENABLED 0xB9
 #define MATROSKA_ID_TRACKFLAGDEFAULT 0x88
 #define MATROSKA_ID_TRACKFLAGFORCED 0x55AA
-#define MATROSKA_ID_TRACKFLAGHEARINGIMPAIRED  0x55AB
-#define MATROSKA_ID_TRACKFLAGVISUALIMPAIRED   0x55AC
-#define MATROSKA_ID_TRACKFLAGTEXTDESCRIPTIONS 0x55AD
-#define MATROSKA_ID_TRACKFLAGORIGINAL         0x55AE
-#define MATROSKA_ID_TRACKFLAGCOMMENTARY       0x55AF
 #define MATROSKA_ID_TRACKFLAGLACING 0x9C
 #define MATROSKA_ID_TRACKMINCACHE 0x6DE7
 #define MATROSKA_ID_TRACKMAXCACHE 0x6DF8
 #define MATROSKA_ID_TRACKDEFAULTDURATION 0x23E383
 #define MATROSKA_ID_TRACKCONTENTENCODINGS 0x6D80
 
+/* IDs in the block addition mapping master */
+#define MATROSKA_ID_BLKADDIDNAME 0x41A4
+#define MATROSKA_ID_BLKADDIDTYPE 0x41E7
+#define MATROSKA_ID_BLKADDIDEXTRADATA 0x41ED
+#define MATROSKA_ID_BLKADDIDVALUE 0x41F0
+
 /* IDs in the contentencodings master */
 #define MATROSKA_ID_TRACKCONTENTENCODING 0x6240
 
+/* IDs in the content encoding master */
+#define MATROSKA_ID_ENCODINGORDER 0x5031
+#define MATROSKA_ID_ENCODINGSCOPE 0x5032
+#define MATROSKA_ID_ENCODINGTYPE 0x5033
+#define MATROSKA_ID_ENCODINGCOMPRESSION 0x5034
+#define MATROSKA_ID_ENCODINGENCRYPTION 0x5035
+
+/* IDs in the contentcompression master */
+#define MATROSKA_ID_ENCODINGCOMPALGO 0x4254
+#define MATROSKA_ID_ENCODINGCOMPSETTINGS 0x4255
+
+/* IDs in the contentencryption master */
+#define MATROSKA_ID_ENCODINGENCAESSETTINGS 0x47E7
+#define MATROSKA_ID_ENCODINGENCALGO 0x47E1
+#define MATROSKA_ID_ENCODINGENCKEYID 0x47E2
+#define MATROSKA_ID_ENCODINGSIGALGO 0x47E5
+#define MATROSKA_ID_ENCODINGSIGHASHALGO 0x47E6
+#define MATROSKA_ID_ENCODINGSIGKEYID 0x47E4
+#define MATROSKA_ID_ENCODINGSIGNATURE 0x47E3
+
 /* IDs in the trackoperation master */
 #define MATROSKA_ID_TRACKCOMBINEPLANES 0xE3
 
@@ -162,32 +188,6 @@
 #define MATROSKA_ID_AUDIOBITDEPTH 0x6264
 #define MATROSKA_ID_AUDIOCHANNELS 0x9F
 
-/* IDs in the content encoding master */
-#define MATROSKA_ID_ENCODINGORDER 0x5031
-#define MATROSKA_ID_ENCODINGSCOPE 0x5032
-#define MATROSKA_ID_ENCODINGTYPE 0x5033
-#define MATROSKA_ID_ENCODINGCOMPRESSION 0x5034
-#define MATROSKA_ID_ENCODINGENCRYPTION 0x5035
-
-/* IDs in the contentcompression master */
-#define MATROSKA_ID_ENCODINGCOMPALGO 0x4254
-#define MATROSKA_ID_ENCODINGCOMPSETTINGS 0x4255
-
-/* IDs in the contentencryption master */
-#define MATROSKA_ID_ENCODINGENCAESSETTINGS 0x47E7
-#define MATROSKA_ID_ENCODINGENCALGO 0x47E1
-#define MATROSKA_ID_ENCODINGENCKEYID 0x47E2
-#define MATROSKA_ID_ENCODINGSIGALGO 0x47E5
-#define MATROSKA_ID_ENCODINGSIGHASHALGO 0x47E6
-#define MATROSKA_ID_ENCODINGSIGKEYID 0x47E4
-#define MATROSKA_ID_ENCODINGSIGNATURE 0x47E3
-
-/* IDs in the block addition mapping master */
-#define MATROSKA_ID_BLKADDIDVALUE 0x41F0
-#define MATROSKA_ID_BLKADDIDNAME 0x41A4
-#define MATROSKA_ID_BLKADDIDTYPE 0x41E7
-#define MATROSKA_ID_BLKADDIDEXTRADATA 0x41ED
-
 /* IDs in the cues master */
 #define MATROSKA_ID_POINTENTRY 0xBB
 
@@ -223,19 +223,15 @@
 #define MATROSKA_ID_TAGTARGETS_CHAPTERUID 0x63C4
 #define MATROSKA_ID_TAGTARGETS_ATTACHUID  0x63C6
 
-/* IDs in the blockadditions master */
-#define MATROSKA_ID_BLOCKMORE 0xA6
-
-/* IDs in the blockmore master */
-#define MATROSKA_ID_BLOCKADDID 0xEE
-#define MATROSKA_ID_BLOCKADDITIONAL 0xA5
-
-/* IDs in the seekhead master */
-#define MATROSKA_ID_SEEKENTRY  0x4DBB
+/* IDs in the attachments master */
+#define MATROSKA_ID_ATTACHEDFILE        0x61A7
 
-/* IDs in the seekpoint master */
-#define MATROSKA_ID_SEEKID     0x53AB
-#define MATROSKA_ID_SEEKPOSITION 0x53AC
+/* IDs in the attachedfile master */
+#define MATROSKA_ID_FILEDESC            0x467E
+#define MATROSKA_ID_FILENAME            0x466E
+#define MATROSKA_ID_FILEMIMETYPE        0x4660
+#define MATROSKA_ID_FILEDATA            0x465C
+#define MATROSKA_ID_FILEUID             0x46AE
 
 /* IDs in the cluster master */
 #define MATROSKA_ID_CLUSTERTIMECODE 0xE7
@@ -252,15 +248,19 @@
 #define MATROSKA_ID_CODECSTATE 0xA4
 #define MATROSKA_ID_DISCARDPADDING 0x75A2
 
-/* IDs in the attachments master */
-#define MATROSKA_ID_ATTACHEDFILE        0x61A7
+/* IDs in the blockadditions master */
+#define MATROSKA_ID_BLOCKMORE 0xA6
 
-/* IDs in the attachedfile master */
-#define MATROSKA_ID_FILEDESC            0x467E
-#define MATROSKA_ID_FILENAME            0x466E
-#define MATROSKA_ID_FILEMIMETYPE        0x4660
-#define MATROSKA_ID_FILEDATA            0x465C
-#define MATROSKA_ID_FILEUID             0x46AE
+/* IDs in the blockmore master */
+#define MATROSKA_ID_BLOCKADDID 0xEE
+#define MATROSKA_ID_BLOCKADDITIONAL 0xA5
+
+/* IDs in the seekhead master */
+#define MATROSKA_ID_SEEKENTRY  0x4DBB
+
+/* IDs in the seekpoint master */
+#define MATROSKA_ID_SEEKID     0x53AB
+#define MATROSKA_ID_SEEKPOSITION 0x53AC
 
 /* IDs in the chapters master */
 #define MATROSKA_ID_EDITIONENTRY        0x45B9
-- 
2.20.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] 13+ messages in thread

* [FFmpeg-devel] [PATCH 08/12] avformat/matroskasem: reorder EbmlSyntax tables
  2022-11-06 15:08 [FFmpeg-devel] [PATCH 00/12] Use generated semantic for Matroska demuxer Steve Lhomme
                   ` (6 preceding siblings ...)
  2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 07/12] avformat/matroska_ids: reorder some IDs to match the generated order Steve Lhomme
@ 2022-11-06 15:08 ` Steve Lhomme
  2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 09/12] avformat/matroskasem: reorder some EbmlSyntax elements Steve Lhomme
                   ` (3 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: Steve Lhomme @ 2022-11-06 15:08 UTC (permalink / raw)
  To: ffmpeg-devel

So they are sorted by their EBML path, in reverse order so we don't extra
declarations.

No functional changes.
---
 libavformat/matroskasem.c | 263 +++++++++++++++++++-------------------
 1 file changed, 132 insertions(+), 131 deletions(-)

diff --git a/libavformat/matroskasem.c b/libavformat/matroskasem.c
index 978d7f0281..f1afe4d570 100644
--- a/libavformat/matroskasem.c
+++ b/libavformat/matroskasem.c
@@ -54,15 +54,13 @@ EbmlSyntax ebml_syntax[] = {
     { 0 }
 };
 
-static EbmlSyntax matroska_info[] = {
-    { MATROSKA_ID_TIMECODESCALE, EBML_UINT,  0, 0, offsetof(MatroskaDemuxContext, time_scale), { .u = 1000000 } },
-    { 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 },
-    CHILD_OF(matroska_segment)
+static EbmlSyntax matroska_track_video_projection[] = {
+    { MATROSKA_ID_VIDEOPROJECTIONTYPE,        EBML_UINT,  0, 0, offsetof(MatroskaTrackVideoProjection, type), { .u = MATROSKA_VIDEO_PROJECTION_TYPE_RECTANGULAR } },
+    { MATROSKA_ID_VIDEOPROJECTIONPRIVATE,     EBML_BIN,   0, 0, offsetof(MatroskaTrackVideoProjection, private) },
+    { MATROSKA_ID_VIDEOPROJECTIONPOSEYAW,     EBML_FLOAT, 0, 0, offsetof(MatroskaTrackVideoProjection, yaw),   { .f = 0.0 } },
+    { MATROSKA_ID_VIDEOPROJECTIONPOSEPITCH,   EBML_FLOAT, 0, 0, offsetof(MatroskaTrackVideoProjection, pitch), { .f = 0.0 } },
+    { MATROSKA_ID_VIDEOPROJECTIONPOSEROLL,    EBML_FLOAT, 0, 0, offsetof(MatroskaTrackVideoProjection, roll),  { .f = 0.0 } },
+    CHILD_OF(matroska_track_video)
 };
 
 static EbmlSyntax matroska_mastering_meta[] = {
@@ -97,15 +95,6 @@ EbmlSyntax matroska_track_video_color[] = {
     CHILD_OF(matroska_track_video)
 };
 
-static EbmlSyntax matroska_track_video_projection[] = {
-    { MATROSKA_ID_VIDEOPROJECTIONTYPE,        EBML_UINT,  0, 0, offsetof(MatroskaTrackVideoProjection, type), { .u = MATROSKA_VIDEO_PROJECTION_TYPE_RECTANGULAR } },
-    { MATROSKA_ID_VIDEOPROJECTIONPRIVATE,     EBML_BIN,   0, 0, offsetof(MatroskaTrackVideoProjection, private) },
-    { MATROSKA_ID_VIDEOPROJECTIONPOSEYAW,     EBML_FLOAT, 0, 0, offsetof(MatroskaTrackVideoProjection, yaw),   { .f = 0.0 } },
-    { MATROSKA_ID_VIDEOPROJECTIONPOSEPITCH,   EBML_FLOAT, 0, 0, offsetof(MatroskaTrackVideoProjection, pitch), { .f = 0.0 } },
-    { MATROSKA_ID_VIDEOPROJECTIONPOSEROLL,    EBML_FLOAT, 0, 0, offsetof(MatroskaTrackVideoProjection, roll),  { .f = 0.0 } },
-    CHILD_OF(matroska_track_video)
-};
-
 EbmlSyntax matroska_track_video[] = {
     { MATROSKA_ID_VIDEOFRAMERATE,      EBML_FLOAT, 0, 0, offsetof(MatroskaTrackVideo, frame_rate) },
     { MATROSKA_ID_VIDEODISPLAYWIDTH,   EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, display_width), { .u=-1 } },
@@ -128,18 +117,20 @@ EbmlSyntax matroska_track_video[] = {
     CHILD_OF(matroska_track)
 };
 
-static EbmlSyntax matroska_track_audio[] = {
-    { MATROSKA_ID_AUDIOSAMPLINGFREQ,    EBML_FLOAT, 0, 0, offsetof(MatroskaTrackAudio, samplerate), { .f = 8000.0 } },
-    { MATROSKA_ID_AUDIOOUTSAMPLINGFREQ, EBML_FLOAT, 0, 0, offsetof(MatroskaTrackAudio, out_samplerate) },
-    { MATROSKA_ID_AUDIOBITDEPTH,        EBML_UINT,  0, 0, offsetof(MatroskaTrackAudio, bitdepth) },
-    { MATROSKA_ID_AUDIOCHANNELS,        EBML_UINT,  0, 0, offsetof(MatroskaTrackAudio, channels),   { .u = 1 } },
-    CHILD_OF(matroska_track)
+static EbmlSyntax matroska_track_plane[] = {
+    { MATROSKA_ID_TRACKPLANEUID,  EBML_UINT, 0, 0, offsetof(MatroskaTrackPlane,uid) },
+    { MATROSKA_ID_TRACKPLANETYPE, EBML_UINT, 0, 0, offsetof(MatroskaTrackPlane,type) },
+    CHILD_OF(matroska_track_combine_planes)
 };
 
-static EbmlSyntax matroska_track_encoding_compression[] = {
-    { MATROSKA_ID_ENCODINGCOMPALGO,     EBML_UINT, 0, 0, offsetof(MatroskaTrackCompression, algo), { .u = MATROSKA_TRACK_ENCODING_COMP_ZLIB } },
-    { MATROSKA_ID_ENCODINGCOMPSETTINGS, EBML_BIN,  0, 0, offsetof(MatroskaTrackCompression, settings) },
-    CHILD_OF(matroska_track_encoding)
+EbmlSyntax matroska_track_combine_planes[] = {
+    { MATROSKA_ID_TRACKPLANE, EBML_NEST, 0, sizeof(MatroskaTrackPlane), offsetof(MatroskaTrackOperation,combine_planes), {.n = matroska_track_plane} },
+    CHILD_OF(matroska_track_operation)
+};
+
+EbmlSyntax matroska_track_operation[] = {
+    { MATROSKA_ID_TRACKCOMBINEPLANES, EBML_NEST, 0, 0, 0, {.n = matroska_track_combine_planes} },
+    CHILD_OF(matroska_track)
 };
 
 static EbmlSyntax matroska_track_encoding_encryption[] = {
@@ -152,6 +143,13 @@ static EbmlSyntax matroska_track_encoding_encryption[] = {
     { MATROSKA_ID_ENCODINGSIGNATURE,      EBML_NONE },
     CHILD_OF(matroska_track_encoding)
 };
+
+static EbmlSyntax matroska_track_encoding_compression[] = {
+    { MATROSKA_ID_ENCODINGCOMPALGO,     EBML_UINT, 0, 0, offsetof(MatroskaTrackCompression, algo), { .u = MATROSKA_TRACK_ENCODING_COMP_ZLIB } },
+    { MATROSKA_ID_ENCODINGCOMPSETTINGS, EBML_BIN,  0, 0, offsetof(MatroskaTrackCompression, settings) },
+    CHILD_OF(matroska_track_encoding)
+};
+
 EbmlSyntax matroska_track_encoding[] = {
     { MATROSKA_ID_ENCODINGSCOPE,       EBML_UINT, 0, 0, offsetof(MatroskaTrackEncoding, scope),       { .u = 1 } },
     { MATROSKA_ID_ENCODINGTYPE,        EBML_UINT, 0, 0, offsetof(MatroskaTrackEncoding, type) },
@@ -166,22 +164,6 @@ EbmlSyntax matroska_track_encodings[] = {
     CHILD_OF(matroska_track)
 };
 
-static EbmlSyntax matroska_track_plane[] = {
-    { MATROSKA_ID_TRACKPLANEUID,  EBML_UINT, 0, 0, offsetof(MatroskaTrackPlane,uid) },
-    { MATROSKA_ID_TRACKPLANETYPE, EBML_UINT, 0, 0, offsetof(MatroskaTrackPlane,type) },
-    CHILD_OF(matroska_track_combine_planes)
-};
-
-EbmlSyntax matroska_track_combine_planes[] = {
-    { MATROSKA_ID_TRACKPLANE, EBML_NEST, 0, sizeof(MatroskaTrackPlane), offsetof(MatroskaTrackOperation,combine_planes), {.n = matroska_track_plane} },
-    CHILD_OF(matroska_track_operation)
-};
-
-EbmlSyntax matroska_track_operation[] = {
-    { MATROSKA_ID_TRACKCOMBINEPLANES, EBML_NEST, 0, 0, 0, {.n = matroska_track_combine_planes} },
-    CHILD_OF(matroska_track)
-};
-
 EbmlSyntax matroska_block_addition_mapping[] = {
     { MATROSKA_ID_BLKADDIDVALUE,      EBML_UINT, 0, 0, offsetof(MatroskaBlockAdditionMapping, value) },
     { MATROSKA_ID_BLKADDIDNAME,       EBML_STR,  0, 0, offsetof(MatroskaBlockAdditionMapping, name) },
@@ -190,6 +172,14 @@ EbmlSyntax matroska_block_addition_mapping[] = {
     CHILD_OF(matroska_track)
 };
 
+static EbmlSyntax matroska_track_audio[] = {
+    { MATROSKA_ID_AUDIOSAMPLINGFREQ,    EBML_FLOAT, 0, 0, offsetof(MatroskaTrackAudio, samplerate), { .f = 8000.0 } },
+    { MATROSKA_ID_AUDIOOUTSAMPLINGFREQ, EBML_FLOAT, 0, 0, offsetof(MatroskaTrackAudio, out_samplerate) },
+    { MATROSKA_ID_AUDIOBITDEPTH,        EBML_UINT,  0, 0, offsetof(MatroskaTrackAudio, bitdepth) },
+    { MATROSKA_ID_AUDIOCHANNELS,        EBML_UINT,  0, 0, offsetof(MatroskaTrackAudio, channels),   { .u = 1 } },
+    CHILD_OF(matroska_track)
+};
+
 EbmlSyntax matroska_track[] = {
     { MATROSKA_ID_TRACKNUMBER,           EBML_UINT,  0, 0, offsetof(MatroskaTrack, num) },
     { MATROSKA_ID_TRACKNAME,             EBML_UTF8,  0, 0, offsetof(MatroskaTrack, name) },
@@ -231,71 +221,13 @@ EbmlSyntax matroska_tracks[] = {
     CHILD_OF(matroska_segment)
 };
 
-static EbmlSyntax matroska_attachment[] = {
-    { MATROSKA_ID_FILEUID,      EBML_UINT, 0, 0, offsetof(MatroskaAttachment, uid) },
-    { MATROSKA_ID_FILENAME,     EBML_UTF8, 0, 0, offsetof(MatroskaAttachment, filename) },
-    { MATROSKA_ID_FILEMIMETYPE, EBML_STR,  0, 0, offsetof(MatroskaAttachment, mime) },
-    { MATROSKA_ID_FILEDATA,     EBML_BIN,  0, 0, offsetof(MatroskaAttachment, bin) },
-    { MATROSKA_ID_FILEDESC,     EBML_UTF8, 0, 0, offsetof(MatroskaAttachment, description) },
-    CHILD_OF(matroska_attachments)
-};
-
-EbmlSyntax matroska_attachments[] = {
-    { MATROSKA_ID_ATTACHEDFILE, EBML_NEST, 0, sizeof(MatroskaAttachment), offsetof(MatroskaDemuxContext, attachments), { .n = matroska_attachment } },
-    CHILD_OF(matroska_segment)
-};
-
-static EbmlSyntax matroska_chapter_display[] = {
-    { MATROSKA_ID_CHAPSTRING,  EBML_UTF8, 0, 0, offsetof(MatroskaChapter, title) },
-    { MATROSKA_ID_CHAPLANG,    EBML_NONE },
-    { MATROSKA_ID_CHAPCOUNTRY, EBML_NONE },
-    CHILD_OF(matroska_chapter_entry)
-};
-
-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)
-};
-
-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 },
-    CHILD_OF(matroska_chapters)
-};
-
-EbmlSyntax matroska_chapters[] = {
-    { MATROSKA_ID_EDITIONENTRY, EBML_NEST, 0, 0, 0, { .n = matroska_chapter } },
-    CHILD_OF(matroska_segment)
-};
-
-static EbmlSyntax matroska_index_pos[] = {
-    { MATROSKA_ID_CUETRACK,           EBML_UINT, 0, 0, offsetof(MatroskaIndexPos, track) },
-    { MATROSKA_ID_CUECLUSTERPOSITION, EBML_UINT, 0, 0, offsetof(MatroskaIndexPos, pos) },
-    { MATROSKA_ID_CUERELATIVEPOSITION,EBML_NONE },
-    { MATROSKA_ID_CUEDURATION,        EBML_NONE },
-    { MATROSKA_ID_CUEBLOCKNUMBER,     EBML_NONE },
-    CHILD_OF(matroska_index_entry)
-};
-
-EbmlSyntax matroska_index_entry[] = {
-    { MATROSKA_ID_CUETIME,          EBML_UINT, 0, 0,                        offsetof(MatroskaIndex, time) },
-    { MATROSKA_ID_CUETRACKPOSITION, EBML_NEST, 0, sizeof(MatroskaIndexPos), offsetof(MatroskaIndex, pos), { .n = matroska_index_pos } },
-    CHILD_OF(matroska_index)
-};
-
-EbmlSyntax matroska_index[] = {
-    { MATROSKA_ID_POINTENTRY, EBML_NEST, 0, sizeof(MatroskaIndex), offsetof(MatroskaDemuxContext, index), { .n = matroska_index_entry } },
-    CHILD_OF(matroska_segment)
+static EbmlSyntax matroska_tagtargets[] = {
+    { MATROSKA_ID_TAGTARGETS_TYPE,       EBML_STR,  0, 0, offsetof(MatroskaTagTarget, type) },
+    { MATROSKA_ID_TAGTARGETS_TYPEVALUE,  EBML_UINT, 0, 0, offsetof(MatroskaTagTarget, typevalue),  { .u = 50 } },
+    { MATROSKA_ID_TAGTARGETS_TRACKUID,   EBML_UINT, 0, 0, offsetof(MatroskaTagTarget, trackuid) },
+    { MATROSKA_ID_TAGTARGETS_CHAPTERUID, EBML_UINT, 0, 0, offsetof(MatroskaTagTarget, chapteruid) },
+    { MATROSKA_ID_TAGTARGETS_ATTACHUID,  EBML_UINT, 0, 0, offsetof(MatroskaTagTarget, attachuid) },
+    CHILD_OF(matroska_tag)
 };
 
 static EbmlSyntax matroska_simpletag[] = {
@@ -308,15 +240,6 @@ static EbmlSyntax matroska_simpletag[] = {
     CHILD_OF(matroska_tag)
 };
 
-static EbmlSyntax matroska_tagtargets[] = {
-    { MATROSKA_ID_TAGTARGETS_TYPE,       EBML_STR,  0, 0, offsetof(MatroskaTagTarget, type) },
-    { MATROSKA_ID_TAGTARGETS_TYPEVALUE,  EBML_UINT, 0, 0, offsetof(MatroskaTagTarget, typevalue),  { .u = 50 } },
-    { MATROSKA_ID_TAGTARGETS_TRACKUID,   EBML_UINT, 0, 0, offsetof(MatroskaTagTarget, trackuid) },
-    { MATROSKA_ID_TAGTARGETS_CHAPTERUID, EBML_UINT, 0, 0, offsetof(MatroskaTagTarget, chapteruid) },
-    { MATROSKA_ID_TAGTARGETS_ATTACHUID,  EBML_UINT, 0, 0, offsetof(MatroskaTagTarget, attachuid) },
-    CHILD_OF(matroska_tag)
-};
-
 EbmlSyntax matroska_tag[] = {
     { MATROSKA_ID_SIMPLETAG,  EBML_NEST, 0, sizeof(MatroskaTag), offsetof(MatroskaTags, tag),    { .n = matroska_simpletag } },
     { MATROSKA_ID_TAGTARGETS, EBML_NEST, 0, 0,                   offsetof(MatroskaTags, target), { .n = matroska_tagtargets } },
@@ -339,21 +262,35 @@ EbmlSyntax matroska_seekhead[] = {
     CHILD_OF(matroska_segment)
 };
 
-EbmlSyntax matroska_segment[] = {
-    { MATROSKA_ID_CLUSTER,     EBML_STOP },
-    { MATROSKA_ID_INFO,        EBML_LEVEL1, 0, 0, 0, { .n = matroska_info } },
-    { MATROSKA_ID_TRACKS,      EBML_LEVEL1, 0, 0, 0, { .n = matroska_tracks } },
-    { MATROSKA_ID_ATTACHMENTS, EBML_LEVEL1, 0, 0, 0, { .n = matroska_attachments } },
-    { MATROSKA_ID_CHAPTERS,    EBML_LEVEL1, 0, 0, 0, { .n = matroska_chapters } },
-    { MATROSKA_ID_CUES,        EBML_LEVEL1, 0, 0, 0, { .n = matroska_index } },
-    { MATROSKA_ID_TAGS,        EBML_LEVEL1, 0, 0, 0, { .n = matroska_tags } },
-    { MATROSKA_ID_SEEKHEAD,    EBML_LEVEL1, 0, 0, 0, { .n = matroska_seekhead } },
-    { 0 }   /* We don't want to go back to level 0, so don't add the parent. */
+static EbmlSyntax matroska_info[] = {
+    { MATROSKA_ID_TIMECODESCALE, EBML_UINT,  0, 0, offsetof(MatroskaDemuxContext, time_scale), { .u = 1000000 } },
+    { 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 },
+    CHILD_OF(matroska_segment)
 };
 
-EbmlSyntax matroska_segments[] = {
-    { MATROSKA_ID_SEGMENT, EBML_NEST, 0, 0, 0, { .n = matroska_segment } },
-    { 0 }
+static EbmlSyntax matroska_index_pos[] = {
+    { MATROSKA_ID_CUETRACK,           EBML_UINT, 0, 0, offsetof(MatroskaIndexPos, track) },
+    { MATROSKA_ID_CUECLUSTERPOSITION, EBML_UINT, 0, 0, offsetof(MatroskaIndexPos, pos) },
+    { MATROSKA_ID_CUERELATIVEPOSITION,EBML_NONE },
+    { MATROSKA_ID_CUEDURATION,        EBML_NONE },
+    { MATROSKA_ID_CUEBLOCKNUMBER,     EBML_NONE },
+    CHILD_OF(matroska_index_entry)
+};
+
+EbmlSyntax matroska_index_entry[] = {
+    { MATROSKA_ID_CUETIME,          EBML_UINT, 0, 0,                        offsetof(MatroskaIndex, time) },
+    { MATROSKA_ID_CUETRACKPOSITION, EBML_NEST, 0, sizeof(MatroskaIndexPos), offsetof(MatroskaIndex, pos), { .n = matroska_index_pos } },
+    CHILD_OF(matroska_index)
+};
+
+EbmlSyntax matroska_index[] = {
+    { MATROSKA_ID_POINTENTRY, EBML_NEST, 0, sizeof(MatroskaIndex), offsetof(MatroskaDemuxContext, index), { .n = matroska_index_entry } },
+    CHILD_OF(matroska_segment)
 };
 
 static EbmlSyntax matroska_blockmore[] = {
@@ -391,6 +328,70 @@ EbmlSyntax matroska_cluster_parsing[] = {
     CHILD_OF(matroska_segment)
 };
 
+static EbmlSyntax matroska_chapter_display[] = {
+    { MATROSKA_ID_CHAPSTRING,  EBML_UTF8, 0, 0, offsetof(MatroskaChapter, title) },
+    { MATROSKA_ID_CHAPLANG,    EBML_NONE },
+    { MATROSKA_ID_CHAPCOUNTRY, EBML_NONE },
+    CHILD_OF(matroska_chapter_entry)
+};
+
+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)
+};
+
+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 },
+    CHILD_OF(matroska_chapters)
+};
+
+EbmlSyntax matroska_chapters[] = {
+    { MATROSKA_ID_EDITIONENTRY, EBML_NEST, 0, 0, 0, { .n = matroska_chapter } },
+    CHILD_OF(matroska_segment)
+};
+
+static EbmlSyntax matroska_attachment[] = {
+    { MATROSKA_ID_FILEUID,      EBML_UINT, 0, 0, offsetof(MatroskaAttachment, uid) },
+    { MATROSKA_ID_FILENAME,     EBML_UTF8, 0, 0, offsetof(MatroskaAttachment, filename) },
+    { MATROSKA_ID_FILEMIMETYPE, EBML_STR,  0, 0, offsetof(MatroskaAttachment, mime) },
+    { MATROSKA_ID_FILEDATA,     EBML_BIN,  0, 0, offsetof(MatroskaAttachment, bin) },
+    { MATROSKA_ID_FILEDESC,     EBML_UTF8, 0, 0, offsetof(MatroskaAttachment, description) },
+    CHILD_OF(matroska_attachments)
+};
+
+EbmlSyntax matroska_attachments[] = {
+    { MATROSKA_ID_ATTACHEDFILE, EBML_NEST, 0, sizeof(MatroskaAttachment), offsetof(MatroskaDemuxContext, attachments), { .n = matroska_attachment } },
+    CHILD_OF(matroska_segment)
+};
+
+EbmlSyntax matroska_segment[] = {
+    { MATROSKA_ID_CLUSTER,     EBML_STOP },
+    { MATROSKA_ID_INFO,        EBML_LEVEL1, 0, 0, 0, { .n = matroska_info } },
+    { MATROSKA_ID_TRACKS,      EBML_LEVEL1, 0, 0, 0, { .n = matroska_tracks } },
+    { MATROSKA_ID_ATTACHMENTS, EBML_LEVEL1, 0, 0, 0, { .n = matroska_attachments } },
+    { MATROSKA_ID_CHAPTERS,    EBML_LEVEL1, 0, 0, 0, { .n = matroska_chapters } },
+    { MATROSKA_ID_CUES,        EBML_LEVEL1, 0, 0, 0, { .n = matroska_index } },
+    { MATROSKA_ID_TAGS,        EBML_LEVEL1, 0, 0, 0, { .n = matroska_tags } },
+    { MATROSKA_ID_SEEKHEAD,    EBML_LEVEL1, 0, 0, 0, { .n = matroska_seekhead } },
+    { 0 }   /* We don't want to go back to level 0, so don't add the parent. */
+};
+
+EbmlSyntax matroska_segments[] = {
+    { MATROSKA_ID_SEGMENT, EBML_NEST, 0, 0, 0, { .n = matroska_segment } },
+    { 0 }
+};
+
 EbmlSyntax matroska_cluster_enter[] = {
     { MATROSKA_ID_CLUSTER,     EBML_NEST, 0, 0, 0, { .n = &matroska_cluster_parsing[2] } },
     { 0 }
-- 
2.20.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] 13+ messages in thread

* [FFmpeg-devel] [PATCH 09/12] avformat/matroskasem: reorder some EbmlSyntax elements
  2022-11-06 15:08 [FFmpeg-devel] [PATCH 00/12] Use generated semantic for Matroska demuxer Steve Lhomme
                   ` (7 preceding siblings ...)
  2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 08/12] avformat/matroskasem: reorder EbmlSyntax tables Steve Lhomme
@ 2022-11-06 15:08 ` Steve Lhomme
  2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 10/12] avformat/matroska: use the generated semantic files Steve Lhomme
                   ` (2 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: Steve Lhomme @ 2022-11-06 15:08 UTC (permalink / raw)
  To: ffmpeg-devel

So it's easier to match with the XSLT ordering which has limited possibilities
(15 max criteria for all the syntax tables).

No functional changes.
---
 libavformat/matroskasem.c | 40 +++++++++++++++++++--------------------
 1 file changed, 20 insertions(+), 20 deletions(-)

diff --git a/libavformat/matroskasem.c b/libavformat/matroskasem.c
index f1afe4d570..b54328796d 100644
--- a/libavformat/matroskasem.c
+++ b/libavformat/matroskasem.c
@@ -101,10 +101,6 @@ EbmlSyntax matroska_track_video[] = {
     { MATROSKA_ID_VIDEODISPLAYHEIGHT,  EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, display_height), { .u=-1 } },
     { MATROSKA_ID_VIDEOPIXELWIDTH,     EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, pixel_width) },
     { MATROSKA_ID_VIDEOPIXELHEIGHT,    EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, pixel_height) },
-    { MATROSKA_ID_VIDEOCOLORSPACE,     EBML_BIN,   0, 0, offsetof(MatroskaTrackVideo, color_space) },
-    { MATROSKA_ID_VIDEOALPHAMODE,      EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, alpha_mode) },
-    { MATROSKA_ID_VIDEOCOLOR,          EBML_NEST,  0, sizeof(MatroskaTrackVideoColor), offsetof(MatroskaTrackVideo, color), { .n = matroska_track_video_color } },
-    { MATROSKA_ID_VIDEOPROJECTION,     EBML_NEST,  0, 0, offsetof(MatroskaTrackVideo, projection), { .n = matroska_track_video_projection } },
     { MATROSKA_ID_VIDEOPIXELCROPB,     EBML_NONE },
     { MATROSKA_ID_VIDEOPIXELCROPT,     EBML_NONE },
     { MATROSKA_ID_VIDEOPIXELCROPL,     EBML_NONE },
@@ -112,6 +108,10 @@ EbmlSyntax matroska_track_video[] = {
     { MATROSKA_ID_VIDEODISPLAYUNIT,    EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, display_unit), { .u= MATROSKA_VIDEO_DISPLAYUNIT_PIXELS } },
     { MATROSKA_ID_VIDEOFLAGINTERLACED, EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, interlaced),  { .u = MATROSKA_VIDEO_INTERLACE_FLAG_UNDETERMINED } },
     { MATROSKA_ID_VIDEOFIELDORDER,     EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, field_order), { .u = MATROSKA_VIDEO_FIELDORDER_UNDETERMINED } },
+    { MATROSKA_ID_VIDEOALPHAMODE,      EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, alpha_mode) },
+    { MATROSKA_ID_VIDEOCOLORSPACE,     EBML_BIN,   0, 0, offsetof(MatroskaTrackVideo, color_space) },
+    { MATROSKA_ID_VIDEOCOLOR,          EBML_NEST,  0, sizeof(MatroskaTrackVideoColor), offsetof(MatroskaTrackVideo, color), { .n = matroska_track_video_color } },
+    { MATROSKA_ID_VIDEOPROJECTION,     EBML_NEST,  0, 0, offsetof(MatroskaTrackVideo, projection), { .n = matroska_track_video_projection } },
     { MATROSKA_ID_VIDEOSTEREOMODE,     EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, stereo_mode), { .u = MATROSKA_VIDEO_STEREOMODE_TYPE_NB } },
     { MATROSKA_ID_VIDEOASPECTRATIO,    EBML_NONE },
     CHILD_OF(matroska_track)
@@ -165,10 +165,10 @@ EbmlSyntax matroska_track_encodings[] = {
 };
 
 EbmlSyntax matroska_block_addition_mapping[] = {
-    { MATROSKA_ID_BLKADDIDVALUE,      EBML_UINT, 0, 0, offsetof(MatroskaBlockAdditionMapping, value) },
     { MATROSKA_ID_BLKADDIDNAME,       EBML_STR,  0, 0, offsetof(MatroskaBlockAdditionMapping, name) },
     { MATROSKA_ID_BLKADDIDTYPE,       EBML_UINT, 0, 0, offsetof(MatroskaBlockAdditionMapping, type) },
     { MATROSKA_ID_BLKADDIDEXTRADATA,  EBML_BIN,  0, 0, offsetof(MatroskaBlockAdditionMapping, extradata) },
+    { MATROSKA_ID_BLKADDIDVALUE,      EBML_UINT, 0, 0, offsetof(MatroskaBlockAdditionMapping, value) },
     CHILD_OF(matroska_track)
 };
 
@@ -191,28 +191,28 @@ EbmlSyntax matroska_track[] = {
     { MATROSKA_ID_TRACKLANGUAGE,         EBML_STR,   0, 0, offsetof(MatroskaTrack, language),     { .s = "eng" } },
     { MATROSKA_ID_TRACKDEFAULTDURATION,  EBML_UINT,  0, 0, offsetof(MatroskaTrack, default_duration) },
     { MATROSKA_ID_TRACKTIMECODESCALE,    EBML_FLOAT, 0, 0, offsetof(MatroskaTrack, time_scale),   { .f = 1.0 } },
-    { MATROSKA_ID_TRACKFLAGCOMMENTARY,   EBML_UINT,  0, 0, offsetof(MatroskaTrack, flag_comment) },
     { MATROSKA_ID_TRACKFLAGDEFAULT,      EBML_UINT,  0, 0, offsetof(MatroskaTrack, flag_default), { .u = 1 } },
     { MATROSKA_ID_TRACKFLAGFORCED,       EBML_UINT,  0, 0, offsetof(MatroskaTrack, flag_forced) },
+    { MATROSKA_ID_TRACKVIDEO,            EBML_NEST,  0, 0, offsetof(MatroskaTrack, video),        { .n = matroska_track_video } },
+    { MATROSKA_ID_TRACKAUDIO,            EBML_NEST,  0, 0, offsetof(MatroskaTrack, audio),        { .n = matroska_track_audio } },
+    { MATROSKA_ID_TRACKFLAGENABLED,      EBML_NONE },
     { MATROSKA_ID_TRACKFLAGHEARINGIMPAIRED, EBML_UINT, 0, 0, offsetof(MatroskaTrack, flag_hearingimpaired) },
     { MATROSKA_ID_TRACKFLAGVISUALIMPAIRED, EBML_UINT, 0, 0, offsetof(MatroskaTrack, flag_visualimpaired) },
     { MATROSKA_ID_TRACKFLAGTEXTDESCRIPTIONS, EBML_UINT, 0, 0, offsetof(MatroskaTrack, flag_textdescriptions) },
     { MATROSKA_ID_TRACKFLAGORIGINAL,     EBML_UINT,  1, 0, offsetof(MatroskaTrack, flag_original) },
-    { MATROSKA_ID_TRACKVIDEO,            EBML_NEST,  0, 0, offsetof(MatroskaTrack, video),        { .n = matroska_track_video } },
-    { MATROSKA_ID_TRACKAUDIO,            EBML_NEST,  0, 0, offsetof(MatroskaTrack, audio),        { .n = matroska_track_audio } },
-    { MATROSKA_ID_TRACKOPERATION,        EBML_NEST,  0, 0, offsetof(MatroskaTrack, operation),    { .n = matroska_track_operation } },
-    { MATROSKA_ID_TRACKCONTENTENCODINGS, EBML_NEST,  0, 0, 0,                                     { .n = matroska_track_encodings } },
+    { MATROSKA_ID_TRACKFLAGCOMMENTARY,   EBML_UINT,  0, 0, offsetof(MatroskaTrack, flag_comment) },
+    { MATROSKA_ID_TRACKFLAGLACING,       EBML_NONE },
+    { MATROSKA_ID_TRACKMINCACHE,         EBML_NONE },
+    { MATROSKA_ID_TRACKMAXCACHE,         EBML_NONE },
     { MATROSKA_ID_TRACKMAXBLKADDID,      EBML_UINT,  0, 0, offsetof(MatroskaTrack, max_block_additional_id) },
     { MATROSKA_ID_TRACKBLKADDMAPPING,    EBML_NEST,  0, sizeof(MatroskaBlockAdditionMapping), offsetof(MatroskaTrack, block_addition_mappings), { .n = matroska_block_addition_mapping } },
-    { MATROSKA_ID_SEEKPREROLL,           EBML_UINT,  0, 0, offsetof(MatroskaTrack, seek_preroll) },
-    { MATROSKA_ID_TRACKFLAGENABLED,      EBML_NONE },
-    { MATROSKA_ID_TRACKFLAGLACING,       EBML_NONE },
     { MATROSKA_ID_CODECNAME,             EBML_NONE },
-    { MATROSKA_ID_CODECDECODEALL,        EBML_NONE },
     { MATROSKA_ID_CODECINFOURL,          EBML_NONE },
     { MATROSKA_ID_CODECDOWNLOADURL,      EBML_NONE },
-    { MATROSKA_ID_TRACKMINCACHE,         EBML_NONE },
-    { MATROSKA_ID_TRACKMAXCACHE,         EBML_NONE },
+    { MATROSKA_ID_CODECDECODEALL,        EBML_NONE },
+    { MATROSKA_ID_SEEKPREROLL,           EBML_UINT,  0, 0, offsetof(MatroskaTrack, seek_preroll) },
+    { MATROSKA_ID_TRACKOPERATION,        EBML_NEST,  0, 0, offsetof(MatroskaTrack, operation),    { .n = matroska_track_operation } },
+    { MATROSKA_ID_TRACKCONTENTENCODINGS, EBML_NEST,  0, 0, 0,                                     { .n = matroska_track_encodings } },
     CHILD_OF(matroska_tracks)
 };
 
@@ -321,10 +321,10 @@ EbmlSyntax matroska_cluster_parsing[] = {
     { MATROSKA_ID_SIMPLEBLOCK,     EBML_BIN,  0, 0, offsetof(MatroskaBlock, bin) },
     { MATROSKA_ID_BLOCKGROUP,      EBML_NEST, 0, 0, 0, { .n = matroska_blockgroup } },
     { MATROSKA_ID_CLUSTERTIMECODE, EBML_UINT, 0, 0, offsetof(MatroskaCluster, timecode) },
-    { MATROSKA_ID_SIMPLEBLOCK,     EBML_STOP },
-    { MATROSKA_ID_BLOCKGROUP,      EBML_STOP },
     { MATROSKA_ID_CLUSTERPOSITION, EBML_NONE },
     { MATROSKA_ID_CLUSTERPREVSIZE, EBML_NONE },
+    { MATROSKA_ID_SIMPLEBLOCK,     EBML_STOP },
+    { MATROSKA_ID_BLOCKGROUP,      EBML_STOP },
     CHILD_OF(matroska_segment)
 };
 
@@ -341,8 +341,8 @@ EbmlSyntax matroska_chapter_entry[] = {
     { 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_CHAPTERFLAGENABLED, EBML_NONE },
     { MATROSKA_ID_CHAPTERATOM,        EBML_NONE },
     CHILD_OF(matroska_chapter)
 };
@@ -350,9 +350,9 @@ EbmlSyntax matroska_chapter_entry[] = {
 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 },
+    { MATROSKA_ID_EDITIONFLAGHIDDEN,  EBML_NONE },
     CHILD_OF(matroska_chapters)
 };
 
-- 
2.20.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] 13+ messages in thread

* [FFmpeg-devel] [PATCH 10/12] avformat/matroska: use the generated semantic files
  2022-11-06 15:08 [FFmpeg-devel] [PATCH 00/12] Use generated semantic for Matroska demuxer Steve Lhomme
                   ` (8 preceding siblings ...)
  2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 09/12] avformat/matroskasem: reorder some EbmlSyntax elements Steve Lhomme
@ 2022-11-06 15:08 ` Steve Lhomme
  2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 11/12] avformat/matroska: only export a few elements Steve Lhomme
  2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 12/12] avformat/matroska: add missing elements Steve Lhomme
  11 siblings, 0 replies; 13+ messages in thread
From: Steve Lhomme @ 2022-11-06 15:08 UTC (permalink / raw)
  To: ffmpeg-devel

No functional value/added removed, only more regular spacing.
---
 libavformat/matroska_ids.h | 303 +++++++++++++++---------------
 libavformat/matroskasem.c  | 370 ++++++++++++++++++-------------------
 2 files changed, 336 insertions(+), 337 deletions(-)

diff --git a/libavformat/matroska_ids.h b/libavformat/matroska_ids.h
index ab1d84337a..59dda4da9d 100644
--- a/libavformat/matroska_ids.h
+++ b/libavformat/matroska_ids.h
@@ -30,177 +30,176 @@
 #define MATROSKA_ID_SEGMENT    0x18538067
 
 /* Matroska top-level master IDs */
-#define MATROSKA_ID_INFO       0x1549A966
-#define MATROSKA_ID_TRACKS     0x1654AE6B
-#define MATROSKA_ID_CUES       0x1C53BB6B
-#define MATROSKA_ID_TAGS       0x1254C367
-#define MATROSKA_ID_SEEKHEAD   0x114D9B74
-#define MATROSKA_ID_ATTACHMENTS 0x1941A469
-#define MATROSKA_ID_CLUSTER    0x1F43B675
-#define MATROSKA_ID_CHAPTERS   0x1043A770
+#define MATROSKA_ID_INFO                0x1549A966
+#define MATROSKA_ID_TRACKS              0x1654AE6B
+#define MATROSKA_ID_CUES                0x1C53BB6B
+#define MATROSKA_ID_TAGS                0x1254C367
+#define MATROSKA_ID_SEEKHEAD            0x114D9B74
+#define MATROSKA_ID_ATTACHMENTS         0x1941A469
+#define MATROSKA_ID_CLUSTER             0x1F43B675
+#define MATROSKA_ID_CHAPTERS            0x1043A770
 
 /* IDs in the info master */
-#define MATROSKA_ID_TIMECODESCALE 0x2AD7B1
-#define MATROSKA_ID_DURATION   0x4489
-#define MATROSKA_ID_TITLE      0x7BA9
-#define MATROSKA_ID_WRITINGAPP 0x5741
-#define MATROSKA_ID_MUXINGAPP  0x4D80
-#define MATROSKA_ID_DATEUTC    0x4461
-#define MATROSKA_ID_SEGMENTUID 0x73A4
+#define MATROSKA_ID_TIMECODESCALE       0x2AD7B1
+#define MATROSKA_ID_DURATION            0x4489
+#define MATROSKA_ID_TITLE               0x7BA9
+#define MATROSKA_ID_WRITINGAPP          0x5741
+#define MATROSKA_ID_MUXINGAPP           0x4D80
+#define MATROSKA_ID_DATEUTC             0x4461
+#define MATROSKA_ID_SEGMENTUID          0x73A4
 
 /* IDs in the tracks master */
-#define MATROSKA_ID_TRACKENTRY 0xAE
+#define MATROSKA_ID_TRACKENTRY          0xAE
 
 /* IDs in the trackentry master */
-#define MATROSKA_ID_TRACKNUMBER 0xD7
-#define MATROSKA_ID_TRACKUID   0x73C5
-#define MATROSKA_ID_TRACKTYPE  0x83
-#define MATROSKA_ID_TRACKVIDEO     0xE0
-#define MATROSKA_ID_TRACKAUDIO     0xE1
-#define MATROSKA_ID_TRACKOPERATION 0xE2
+#define MATROSKA_ID_TRACKNUMBER         0xD7
+#define MATROSKA_ID_TRACKUID            0x73C5
+#define MATROSKA_ID_TRACKTYPE           0x83
+#define MATROSKA_ID_TRACKVIDEO          0xE0
+#define MATROSKA_ID_TRACKAUDIO          0xE1
+#define MATROSKA_ID_TRACKOPERATION      0xE2
 #define MATROSKA_ID_TRACKFLAGHEARINGIMPAIRED  0x55AB
-#define MATROSKA_ID_TRACKFLAGVISUALIMPAIRED   0x55AC
-#define MATROSKA_ID_TRACKFLAGTEXTDESCRIPTIONS 0x55AD
-#define MATROSKA_ID_TRACKFLAGORIGINAL         0x55AE
-#define MATROSKA_ID_TRACKFLAGCOMMENTARY       0x55AF
-#define MATROSKA_ID_TRACKTIMECODESCALE 0x23314F
-#define MATROSKA_ID_TRACKMAXBLKADDID 0x55EE
-#define MATROSKA_ID_TRACKBLKADDMAPPING 0x41E4
-#define MATROSKA_ID_TRACKNAME  0x536E
-#define MATROSKA_ID_TRACKLANGUAGE 0x22B59C
-#define MATROSKA_ID_CODECID    0x86
-#define MATROSKA_ID_CODECPRIVATE 0x63A2
-#define MATROSKA_ID_CODECNAME  0x258688
-#define MATROSKA_ID_CODECINFOURL 0x3B4040
-#define MATROSKA_ID_CODECDOWNLOADURL 0x26B240
-#define MATROSKA_ID_CODECDECODEALL 0xAA
-#define MATROSKA_ID_CODECDELAY 0x56AA
-#define MATROSKA_ID_SEEKPREROLL 0x56BB
-#define MATROSKA_ID_TRACKFLAGENABLED 0xB9
-#define MATROSKA_ID_TRACKFLAGDEFAULT 0x88
-#define MATROSKA_ID_TRACKFLAGFORCED 0x55AA
-#define MATROSKA_ID_TRACKFLAGLACING 0x9C
-#define MATROSKA_ID_TRACKMINCACHE 0x6DE7
-#define MATROSKA_ID_TRACKMAXCACHE 0x6DF8
-#define MATROSKA_ID_TRACKDEFAULTDURATION 0x23E383
-#define MATROSKA_ID_TRACKCONTENTENCODINGS 0x6D80
+#define MATROSKA_ID_TRACKFLAGVISUALIMPAIRED  0x55AC
+#define MATROSKA_ID_TRACKFLAGTEXTDESCRIPTIONS  0x55AD
+#define MATROSKA_ID_TRACKFLAGORIGINAL   0x55AE
+#define MATROSKA_ID_TRACKFLAGCOMMENTARY  0x55AF
+#define MATROSKA_ID_TRACKTIMECODESCALE  0x23314F
+#define MATROSKA_ID_TRACKMAXBLKADDID    0x55EE
+#define MATROSKA_ID_TRACKBLKADDMAPPING  0x41E4
+#define MATROSKA_ID_TRACKNAME           0x536E
+#define MATROSKA_ID_TRACKLANGUAGE       0x22B59C
+#define MATROSKA_ID_CODECID             0x86
+#define MATROSKA_ID_CODECPRIVATE        0x63A2
+#define MATROSKA_ID_CODECNAME           0x258688
+#define MATROSKA_ID_CODECINFOURL        0x3B4040
+#define MATROSKA_ID_CODECDOWNLOADURL    0x26B240
+#define MATROSKA_ID_CODECDECODEALL      0xAA
+#define MATROSKA_ID_CODECDELAY          0x56AA
+#define MATROSKA_ID_SEEKPREROLL         0x56BB
+#define MATROSKA_ID_TRACKFLAGENABLED    0xB9
+#define MATROSKA_ID_TRACKFLAGDEFAULT    0x88
+#define MATROSKA_ID_TRACKFLAGFORCED     0x55AA
+#define MATROSKA_ID_TRACKFLAGLACING     0x9C
+#define MATROSKA_ID_TRACKMINCACHE       0x6DE7
+#define MATROSKA_ID_TRACKMAXCACHE       0x6DF8
+#define MATROSKA_ID_TRACKDEFAULTDURATION  0x23E383
+#define MATROSKA_ID_TRACKCONTENTENCODINGS  0x6D80
 
 /* IDs in the block addition mapping master */
-#define MATROSKA_ID_BLKADDIDNAME 0x41A4
-#define MATROSKA_ID_BLKADDIDTYPE 0x41E7
-#define MATROSKA_ID_BLKADDIDEXTRADATA 0x41ED
-#define MATROSKA_ID_BLKADDIDVALUE 0x41F0
+#define MATROSKA_ID_BLKADDIDNAME        0x41A4
+#define MATROSKA_ID_BLKADDIDTYPE        0x41E7
+#define MATROSKA_ID_BLKADDIDEXTRADATA   0x41ED
+#define MATROSKA_ID_BLKADDIDVALUE       0x41F0
 
 /* IDs in the contentencodings master */
-#define MATROSKA_ID_TRACKCONTENTENCODING 0x6240
+#define MATROSKA_ID_TRACKCONTENTENCODING  0x6240
 
 /* IDs in the content encoding master */
-#define MATROSKA_ID_ENCODINGORDER 0x5031
-#define MATROSKA_ID_ENCODINGSCOPE 0x5032
-#define MATROSKA_ID_ENCODINGTYPE 0x5033
-#define MATROSKA_ID_ENCODINGCOMPRESSION 0x5034
-#define MATROSKA_ID_ENCODINGENCRYPTION 0x5035
+#define MATROSKA_ID_ENCODINGORDER       0x5031
+#define MATROSKA_ID_ENCODINGSCOPE       0x5032
+#define MATROSKA_ID_ENCODINGTYPE        0x5033
+#define MATROSKA_ID_ENCODINGCOMPRESSION  0x5034
+#define MATROSKA_ID_ENCODINGENCRYPTION  0x5035
 
 /* IDs in the contentcompression master */
-#define MATROSKA_ID_ENCODINGCOMPALGO 0x4254
-#define MATROSKA_ID_ENCODINGCOMPSETTINGS 0x4255
+#define MATROSKA_ID_ENCODINGCOMPALGO    0x4254
+#define MATROSKA_ID_ENCODINGCOMPSETTINGS  0x4255
 
 /* IDs in the contentencryption master */
-#define MATROSKA_ID_ENCODINGENCAESSETTINGS 0x47E7
-#define MATROSKA_ID_ENCODINGENCALGO 0x47E1
-#define MATROSKA_ID_ENCODINGENCKEYID 0x47E2
-#define MATROSKA_ID_ENCODINGSIGALGO 0x47E5
-#define MATROSKA_ID_ENCODINGSIGHASHALGO 0x47E6
-#define MATROSKA_ID_ENCODINGSIGKEYID 0x47E4
-#define MATROSKA_ID_ENCODINGSIGNATURE 0x47E3
+#define MATROSKA_ID_ENCODINGENCAESSETTINGS  0x47E7
+#define MATROSKA_ID_ENCODINGENCALGO     0x47E1
+#define MATROSKA_ID_ENCODINGENCKEYID    0x47E2
+#define MATROSKA_ID_ENCODINGSIGALGO     0x47E5
+#define MATROSKA_ID_ENCODINGSIGHASHALGO  0x47E6
+#define MATROSKA_ID_ENCODINGSIGKEYID    0x47E4
+#define MATROSKA_ID_ENCODINGSIGNATURE   0x47E3
+
+/* IDs in the contentencaessettings master */
 
 /* IDs in the trackoperation master */
-#define MATROSKA_ID_TRACKCOMBINEPLANES 0xE3
+#define MATROSKA_ID_TRACKCOMBINEPLANES  0xE3
 
 /* IDs in the trackcombineplanes master */
-#define MATROSKA_ID_TRACKPLANE         0xE4
+#define MATROSKA_ID_TRACKPLANE          0xE4
 
 /* IDs in the trackplane master */
-#define MATROSKA_ID_TRACKPLANEUID      0xE5
-#define MATROSKA_ID_TRACKPLANETYPE     0xE6
+#define MATROSKA_ID_TRACKPLANEUID       0xE5
+#define MATROSKA_ID_TRACKPLANETYPE      0xE6
 
 /* IDs in the trackvideo master */
-#define MATROSKA_ID_VIDEOFRAMERATE 0x2383E3
-#define MATROSKA_ID_VIDEODISPLAYWIDTH 0x54B0
-#define MATROSKA_ID_VIDEODISPLAYHEIGHT 0x54BA
-#define MATROSKA_ID_VIDEOPIXELWIDTH 0xB0
-#define MATROSKA_ID_VIDEOPIXELHEIGHT 0xBA
-#define MATROSKA_ID_VIDEOPIXELCROPB 0x54AA
-#define MATROSKA_ID_VIDEOPIXELCROPT 0x54BB
-#define MATROSKA_ID_VIDEOPIXELCROPL 0x54CC
-#define MATROSKA_ID_VIDEOPIXELCROPR 0x54DD
-#define MATROSKA_ID_VIDEODISPLAYUNIT 0x54B2
-#define MATROSKA_ID_VIDEOFLAGINTERLACED 0x9A
-#define MATROSKA_ID_VIDEOFIELDORDER 0x9D
-#define MATROSKA_ID_VIDEOSTEREOMODE 0x53B8
-#define MATROSKA_ID_VIDEOALPHAMODE 0x53C0
-#define MATROSKA_ID_VIDEOASPECTRATIO 0x54B3
-#define MATROSKA_ID_VIDEOCOLORSPACE 0x2EB524
-#define MATROSKA_ID_VIDEOCOLOR 0x55B0
-#define MATROSKA_ID_VIDEOPROJECTION 0x7670
+#define MATROSKA_ID_VIDEOFRAMERATE      0x2383E3
+#define MATROSKA_ID_VIDEODISPLAYWIDTH   0x54B0
+#define MATROSKA_ID_VIDEODISPLAYHEIGHT  0x54BA
+#define MATROSKA_ID_VIDEOPIXELWIDTH     0xB0
+#define MATROSKA_ID_VIDEOPIXELHEIGHT    0xBA
+#define MATROSKA_ID_VIDEOPIXELCROPB     0x54AA
+#define MATROSKA_ID_VIDEOPIXELCROPT     0x54BB
+#define MATROSKA_ID_VIDEOPIXELCROPL     0x54CC
+#define MATROSKA_ID_VIDEOPIXELCROPR     0x54DD
+#define MATROSKA_ID_VIDEODISPLAYUNIT    0x54B2
+#define MATROSKA_ID_VIDEOFLAGINTERLACED  0x9A
+#define MATROSKA_ID_VIDEOFIELDORDER     0x9D
+#define MATROSKA_ID_VIDEOSTEREOMODE     0x53B8
+#define MATROSKA_ID_VIDEOALPHAMODE      0x53C0
+#define MATROSKA_ID_VIDEOASPECTRATIO    0x54B3
+#define MATROSKA_ID_VIDEOCOLORSPACE     0x2EB524
+#define MATROSKA_ID_VIDEOCOLOR          0x55B0
+#define MATROSKA_ID_VIDEOPROJECTION     0x7670
 
 /* IDs in the colour master */
-#define MATROSKA_ID_VIDEOCOLORMATRIXCOEFF 0x55B1
-#define MATROSKA_ID_VIDEOCOLORBITSPERCHANNEL 0x55B2
-#define MATROSKA_ID_VIDEOCOLORCHROMASUBHORZ 0x55B3
-#define MATROSKA_ID_VIDEOCOLORCHROMASUBVERT 0x55B4
-#define MATROSKA_ID_VIDEOCOLORCBSUBHORZ 0x55B5
-#define MATROSKA_ID_VIDEOCOLORCBSUBVERT 0x55B6
-#define MATROSKA_ID_VIDEOCOLORCHROMASITINGHORZ 0x55B7
-#define MATROSKA_ID_VIDEOCOLORCHROMASITINGVERT 0x55B8
-#define MATROSKA_ID_VIDEOCOLORRANGE 0x55B9
-#define MATROSKA_ID_VIDEOCOLORTRANSFERCHARACTERISTICS 0x55BA
-
-#define MATROSKA_ID_VIDEOCOLORPRIMARIES 0x55BB
-#define MATROSKA_ID_VIDEOCOLORMAXCLL 0x55BC
-#define MATROSKA_ID_VIDEOCOLORMAXFALL 0x55BD
-
-#define MATROSKA_ID_VIDEOCOLORMASTERINGMETA 0x55D0
+#define MATROSKA_ID_VIDEOCOLORMATRIXCOEFF  0x55B1
+#define MATROSKA_ID_VIDEOCOLORBITSPERCHANNEL  0x55B2
+#define MATROSKA_ID_VIDEOCOLORCHROMASUBHORZ  0x55B3
+#define MATROSKA_ID_VIDEOCOLORCHROMASUBVERT  0x55B4
+#define MATROSKA_ID_VIDEOCOLORCBSUBHORZ  0x55B5
+#define MATROSKA_ID_VIDEOCOLORCBSUBVERT  0x55B6
+#define MATROSKA_ID_VIDEOCOLORCHROMASITINGHORZ  0x55B7
+#define MATROSKA_ID_VIDEOCOLORCHROMASITINGVERT  0x55B8
+#define MATROSKA_ID_VIDEOCOLORRANGE     0x55B9
+#define MATROSKA_ID_VIDEOCOLORTRANSFERCHARACTERISTICS  0x55BA
+#define MATROSKA_ID_VIDEOCOLORPRIMARIES  0x55BB
+#define MATROSKA_ID_VIDEOCOLORMAXCLL    0x55BC
+#define MATROSKA_ID_VIDEOCOLORMAXFALL   0x55BD
+#define MATROSKA_ID_VIDEOCOLORMASTERINGMETA  0x55D0
 
 /* IDs in the masteringmetadata master */
-#define MATROSKA_ID_VIDEOCOLOR_RX 0x55D1
-#define MATROSKA_ID_VIDEOCOLOR_RY 0x55D2
-#define MATROSKA_ID_VIDEOCOLOR_GX 0x55D3
-#define MATROSKA_ID_VIDEOCOLOR_GY 0x55D4
-#define MATROSKA_ID_VIDEOCOLOR_BX 0x55D5
-#define MATROSKA_ID_VIDEOCOLOR_BY 0x55D6
-#define MATROSKA_ID_VIDEOCOLOR_WHITEX 0x55D7
-#define MATROSKA_ID_VIDEOCOLOR_WHITEY 0x55D8
-#define MATROSKA_ID_VIDEOCOLOR_LUMINANCEMAX 0x55D9
-#define MATROSKA_ID_VIDEOCOLOR_LUMINANCEMIN 0x55DA
+#define MATROSKA_ID_VIDEOCOLOR_RX       0x55D1
+#define MATROSKA_ID_VIDEOCOLOR_RY       0x55D2
+#define MATROSKA_ID_VIDEOCOLOR_GX       0x55D3
+#define MATROSKA_ID_VIDEOCOLOR_GY       0x55D4
+#define MATROSKA_ID_VIDEOCOLOR_BX       0x55D5
+#define MATROSKA_ID_VIDEOCOLOR_BY       0x55D6
+#define MATROSKA_ID_VIDEOCOLOR_WHITEX   0x55D7
+#define MATROSKA_ID_VIDEOCOLOR_WHITEY   0x55D8
+#define MATROSKA_ID_VIDEOCOLOR_LUMINANCEMAX  0x55D9
+#define MATROSKA_ID_VIDEOCOLOR_LUMINANCEMIN  0x55DA
 
 /* IDs in the projection master */
-#define MATROSKA_ID_VIDEOPROJECTIONTYPE 0x7671
-#define MATROSKA_ID_VIDEOPROJECTIONPRIVATE 0x7672
-#define MATROSKA_ID_VIDEOPROJECTIONPOSEYAW 0x7673
-#define MATROSKA_ID_VIDEOPROJECTIONPOSEPITCH 0x7674
-#define MATROSKA_ID_VIDEOPROJECTIONPOSEROLL 0x7675
+#define MATROSKA_ID_VIDEOPROJECTIONTYPE  0x7671
+#define MATROSKA_ID_VIDEOPROJECTIONPRIVATE  0x7672
+#define MATROSKA_ID_VIDEOPROJECTIONPOSEYAW  0x7673
+#define MATROSKA_ID_VIDEOPROJECTIONPOSEPITCH  0x7674
+#define MATROSKA_ID_VIDEOPROJECTIONPOSEROLL  0x7675
 
 /* IDs in the trackaudio master */
-#define MATROSKA_ID_AUDIOSAMPLINGFREQ 0xB5
-#define MATROSKA_ID_AUDIOOUTSAMPLINGFREQ 0x78B5
-
-#define MATROSKA_ID_AUDIOBITDEPTH 0x6264
-#define MATROSKA_ID_AUDIOCHANNELS 0x9F
+#define MATROSKA_ID_AUDIOSAMPLINGFREQ   0xB5
+#define MATROSKA_ID_AUDIOOUTSAMPLINGFREQ  0x78B5
+#define MATROSKA_ID_AUDIOBITDEPTH       0x6264
+#define MATROSKA_ID_AUDIOCHANNELS       0x9F
 
 /* IDs in the cues master */
-#define MATROSKA_ID_POINTENTRY 0xBB
+#define MATROSKA_ID_POINTENTRY          0xBB
 
 /* IDs in the pointentry master */
-#define MATROSKA_ID_CUETIME    0xB3
-#define MATROSKA_ID_CUETRACKPOSITION 0xB7
+#define MATROSKA_ID_CUETIME             0xB3
+#define MATROSKA_ID_CUETRACKPOSITION    0xB7
 
 /* IDs in the cuetrackposition master */
-#define MATROSKA_ID_CUETRACK   0xF7
-#define MATROSKA_ID_CUECLUSTERPOSITION 0xF1
-#define MATROSKA_ID_CUERELATIVEPOSITION 0xF0
-#define MATROSKA_ID_CUEDURATION 0xB2
-#define MATROSKA_ID_CUEBLOCKNUMBER 0x5378
+#define MATROSKA_ID_CUETRACK            0xF7
+#define MATROSKA_ID_CUECLUSTERPOSITION  0xF1
+#define MATROSKA_ID_CUERELATIVEPOSITION  0xF0
+#define MATROSKA_ID_CUEDURATION         0xB2
+#define MATROSKA_ID_CUEBLOCKNUMBER      0x5378
 
 /* IDs in the tags master */
 #define MATROSKA_ID_TAG                 0x7373
@@ -217,10 +216,10 @@
 #define MATROSKA_ID_TAGNAME             0x45A3
 
 /* IDs in the targets master */
-#define MATROSKA_ID_TAGTARGETS_TYPE       0x63CA
+#define MATROSKA_ID_TAGTARGETS_TYPE     0x63CA
 #define MATROSKA_ID_TAGTARGETS_TYPEVALUE  0x68CA
-#define MATROSKA_ID_TAGTARGETS_TRACKUID   0x63C5
-#define MATROSKA_ID_TAGTARGETS_CHAPTERUID 0x63C4
+#define MATROSKA_ID_TAGTARGETS_TRACKUID  0x63C5
+#define MATROSKA_ID_TAGTARGETS_CHAPTERUID  0x63C4
 #define MATROSKA_ID_TAGTARGETS_ATTACHUID  0x63C6
 
 /* IDs in the attachments master */
@@ -234,33 +233,33 @@
 #define MATROSKA_ID_FILEUID             0x46AE
 
 /* IDs in the cluster master */
-#define MATROSKA_ID_CLUSTERTIMECODE 0xE7
-#define MATROSKA_ID_CLUSTERPOSITION 0xA7
-#define MATROSKA_ID_CLUSTERPREVSIZE 0xAB
-#define MATROSKA_ID_BLOCKGROUP 0xA0
-#define MATROSKA_ID_SIMPLEBLOCK 0xA3
+#define MATROSKA_ID_CLUSTERTIMECODE     0xE7
+#define MATROSKA_ID_CLUSTERPOSITION     0xA7
+#define MATROSKA_ID_CLUSTERPREVSIZE     0xAB
+#define MATROSKA_ID_BLOCKGROUP          0xA0
+#define MATROSKA_ID_SIMPLEBLOCK         0xA3
 
 /* IDs in the blockgroup master */
-#define MATROSKA_ID_BLOCK      0xA1
-#define MATROSKA_ID_BLOCKADDITIONS 0x75A1
-#define MATROSKA_ID_BLOCKDURATION 0x9B
-#define MATROSKA_ID_BLOCKREFERENCE 0xFB
-#define MATROSKA_ID_CODECSTATE 0xA4
-#define MATROSKA_ID_DISCARDPADDING 0x75A2
+#define MATROSKA_ID_BLOCK               0xA1
+#define MATROSKA_ID_BLOCKADDITIONS      0x75A1
+#define MATROSKA_ID_BLOCKDURATION       0x9B
+#define MATROSKA_ID_BLOCKREFERENCE      0xFB
+#define MATROSKA_ID_CODECSTATE          0xA4
+#define MATROSKA_ID_DISCARDPADDING      0x75A2
 
 /* IDs in the blockadditions master */
-#define MATROSKA_ID_BLOCKMORE 0xA6
+#define MATROSKA_ID_BLOCKMORE           0xA6
 
 /* IDs in the blockmore master */
-#define MATROSKA_ID_BLOCKADDID 0xEE
-#define MATROSKA_ID_BLOCKADDITIONAL 0xA5
+#define MATROSKA_ID_BLOCKADDID          0xEE
+#define MATROSKA_ID_BLOCKADDITIONAL     0xA5
 
 /* IDs in the seekhead master */
-#define MATROSKA_ID_SEEKENTRY  0x4DBB
+#define MATROSKA_ID_SEEKENTRY           0x4DBB
 
 /* IDs in the seekpoint master */
-#define MATROSKA_ID_SEEKID     0x53AB
-#define MATROSKA_ID_SEEKPOSITION 0x53AC
+#define MATROSKA_ID_SEEKID              0x53AB
+#define MATROSKA_ID_SEEKPOSITION        0x53AC
 
 /* IDs in the chapters master */
 #define MATROSKA_ID_EDITIONENTRY        0x45B9
diff --git a/libavformat/matroskasem.c b/libavformat/matroskasem.c
index b54328796d..0f4455058a 100644
--- a/libavformat/matroskasem.c
+++ b/libavformat/matroskasem.c
@@ -57,333 +57,333 @@ EbmlSyntax ebml_syntax[] = {
 static EbmlSyntax matroska_track_video_projection[] = {
     { MATROSKA_ID_VIDEOPROJECTIONTYPE,        EBML_UINT,  0, 0, offsetof(MatroskaTrackVideoProjection, type), { .u = MATROSKA_VIDEO_PROJECTION_TYPE_RECTANGULAR } },
     { MATROSKA_ID_VIDEOPROJECTIONPRIVATE,     EBML_BIN,   0, 0, offsetof(MatroskaTrackVideoProjection, private) },
-    { MATROSKA_ID_VIDEOPROJECTIONPOSEYAW,     EBML_FLOAT, 0, 0, offsetof(MatroskaTrackVideoProjection, yaw),   { .f = 0.0 } },
+    { MATROSKA_ID_VIDEOPROJECTIONPOSEYAW,     EBML_FLOAT, 0, 0, offsetof(MatroskaTrackVideoProjection, yaw), { .f = 0.0 } },
     { MATROSKA_ID_VIDEOPROJECTIONPOSEPITCH,   EBML_FLOAT, 0, 0, offsetof(MatroskaTrackVideoProjection, pitch), { .f = 0.0 } },
-    { MATROSKA_ID_VIDEOPROJECTIONPOSEROLL,    EBML_FLOAT, 0, 0, offsetof(MatroskaTrackVideoProjection, roll),  { .f = 0.0 } },
+    { MATROSKA_ID_VIDEOPROJECTIONPOSEROLL,    EBML_FLOAT, 0, 0, offsetof(MatroskaTrackVideoProjection, roll), { .f = 0.0 } },
     CHILD_OF(matroska_track_video)
 };
 
 static EbmlSyntax matroska_mastering_meta[] = {
-    { MATROSKA_ID_VIDEOCOLOR_RX, EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, r_x) },
-    { MATROSKA_ID_VIDEOCOLOR_RY, EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, r_y) },
-    { MATROSKA_ID_VIDEOCOLOR_GX, EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, g_x) },
-    { MATROSKA_ID_VIDEOCOLOR_GY, EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, g_y) },
-    { MATROSKA_ID_VIDEOCOLOR_BX, EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, b_x) },
-    { MATROSKA_ID_VIDEOCOLOR_BY, EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, b_y) },
-    { MATROSKA_ID_VIDEOCOLOR_WHITEX, EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, white_x) },
-    { MATROSKA_ID_VIDEOCOLOR_WHITEY, EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, white_y) },
-    { MATROSKA_ID_VIDEOCOLOR_LUMINANCEMIN, EBML_FLOAT, 1, 0, offsetof(MatroskaMasteringMeta, min_luminance) },
-    { MATROSKA_ID_VIDEOCOLOR_LUMINANCEMAX, EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, max_luminance) },
+    { MATROSKA_ID_VIDEOCOLOR_RX,              EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, r_x) },
+    { MATROSKA_ID_VIDEOCOLOR_RY,              EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, r_y) },
+    { MATROSKA_ID_VIDEOCOLOR_GX,              EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, g_x) },
+    { MATROSKA_ID_VIDEOCOLOR_GY,              EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, g_y) },
+    { MATROSKA_ID_VIDEOCOLOR_BX,              EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, b_x) },
+    { MATROSKA_ID_VIDEOCOLOR_BY,              EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, b_y) },
+    { MATROSKA_ID_VIDEOCOLOR_WHITEX,          EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, white_x) },
+    { MATROSKA_ID_VIDEOCOLOR_WHITEY,          EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, white_y) },
+    { MATROSKA_ID_VIDEOCOLOR_LUMINANCEMIN,    EBML_FLOAT, 1, 0, offsetof(MatroskaMasteringMeta, min_luminance) },
+    { MATROSKA_ID_VIDEOCOLOR_LUMINANCEMAX,    EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, max_luminance) },
     CHILD_OF(matroska_track_video_color)
 };
 
 EbmlSyntax matroska_track_video_color[] = {
-    { MATROSKA_ID_VIDEOCOLORMATRIXCOEFF,      EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, matrix_coefficients), { .u = AVCOL_SPC_UNSPECIFIED } },
-    { MATROSKA_ID_VIDEOCOLORBITSPERCHANNEL,   EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, bits_per_channel) },
-    { MATROSKA_ID_VIDEOCOLORCHROMASUBHORZ,    EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, chroma_sub_horz) },
-    { MATROSKA_ID_VIDEOCOLORCHROMASUBVERT,    EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, chroma_sub_vert) },
-    { MATROSKA_ID_VIDEOCOLORCBSUBHORZ,        EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, cb_sub_horz) },
-    { MATROSKA_ID_VIDEOCOLORCBSUBVERT,        EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, cb_sub_vert) },
-    { MATROSKA_ID_VIDEOCOLORCHROMASITINGHORZ, EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, chroma_siting_horz), { .u = MATROSKA_COLOUR_CHROMASITINGHORZ_UNDETERMINED } },
-    { MATROSKA_ID_VIDEOCOLORCHROMASITINGVERT, EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, chroma_siting_vert), { .u = MATROSKA_COLOUR_CHROMASITINGVERT_UNDETERMINED } },
-    { MATROSKA_ID_VIDEOCOLORRANGE,            EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, range), { .u = AVCOL_RANGE_UNSPECIFIED } },
-    { MATROSKA_ID_VIDEOCOLORTRANSFERCHARACTERISTICS, EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, transfer_characteristics), { .u = AVCOL_TRC_UNSPECIFIED } },
-    { MATROSKA_ID_VIDEOCOLORPRIMARIES,        EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, primaries), { .u = AVCOL_PRI_UNSPECIFIED } },
-    { MATROSKA_ID_VIDEOCOLORMAXCLL,           EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, max_cll) },
-    { MATROSKA_ID_VIDEOCOLORMAXFALL,          EBML_UINT, 0, 0, offsetof(MatroskaTrackVideoColor, max_fall) },
-    { MATROSKA_ID_VIDEOCOLORMASTERINGMETA,    EBML_NEST, 0, 0, offsetof(MatroskaTrackVideoColor, mastering_meta), { .n = matroska_mastering_meta } },
+    { MATROSKA_ID_VIDEOCOLORMATRIXCOEFF,      EBML_UINT,  0, 0, offsetof(MatroskaTrackVideoColor, matrix_coefficients), { .u = AVCOL_SPC_UNSPECIFIED } },
+    { MATROSKA_ID_VIDEOCOLORBITSPERCHANNEL,   EBML_UINT,  0, 0, offsetof(MatroskaTrackVideoColor, bits_per_channel) },
+    { MATROSKA_ID_VIDEOCOLORCHROMASUBHORZ,    EBML_UINT,  0, 0, offsetof(MatroskaTrackVideoColor, chroma_sub_horz) },
+    { MATROSKA_ID_VIDEOCOLORCHROMASUBVERT,    EBML_UINT,  0, 0, offsetof(MatroskaTrackVideoColor, chroma_sub_vert) },
+    { MATROSKA_ID_VIDEOCOLORCBSUBHORZ,        EBML_UINT,  0, 0, offsetof(MatroskaTrackVideoColor, cb_sub_horz) },
+    { MATROSKA_ID_VIDEOCOLORCBSUBVERT,        EBML_UINT,  0, 0, offsetof(MatroskaTrackVideoColor, cb_sub_vert) },
+    { MATROSKA_ID_VIDEOCOLORCHROMASITINGHORZ, EBML_UINT,  0, 0, offsetof(MatroskaTrackVideoColor, chroma_siting_horz), { .u = MATROSKA_COLOUR_CHROMASITINGHORZ_UNDETERMINED } },
+    { MATROSKA_ID_VIDEOCOLORCHROMASITINGVERT, EBML_UINT,  0, 0, offsetof(MatroskaTrackVideoColor, chroma_siting_vert), { .u = MATROSKA_COLOUR_CHROMASITINGVERT_UNDETERMINED } },
+    { MATROSKA_ID_VIDEOCOLORRANGE,            EBML_UINT,  0, 0, offsetof(MatroskaTrackVideoColor, range), { .u = AVCOL_RANGE_UNSPECIFIED } },
+    { MATROSKA_ID_VIDEOCOLORTRANSFERCHARACTERISTICS, EBML_UINT,  0, 0, offsetof(MatroskaTrackVideoColor, transfer_characteristics), { .u = AVCOL_TRC_UNSPECIFIED } },
+    { MATROSKA_ID_VIDEOCOLORPRIMARIES,        EBML_UINT,  0, 0, offsetof(MatroskaTrackVideoColor, primaries), { .u = AVCOL_PRI_UNSPECIFIED } },
+    { MATROSKA_ID_VIDEOCOLORMAXCLL,           EBML_UINT,  0, 0, offsetof(MatroskaTrackVideoColor, max_cll) },
+    { MATROSKA_ID_VIDEOCOLORMAXFALL,          EBML_UINT,  0, 0, offsetof(MatroskaTrackVideoColor, max_fall) },
+    { MATROSKA_ID_VIDEOCOLORMASTERINGMETA,    EBML_NEST,  0, 0, offsetof(MatroskaTrackVideoColor, mastering_meta), { .n = matroska_mastering_meta } },
     CHILD_OF(matroska_track_video)
 };
 
 EbmlSyntax matroska_track_video[] = {
-    { MATROSKA_ID_VIDEOFRAMERATE,      EBML_FLOAT, 0, 0, offsetof(MatroskaTrackVideo, frame_rate) },
-    { MATROSKA_ID_VIDEODISPLAYWIDTH,   EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, display_width), { .u=-1 } },
-    { MATROSKA_ID_VIDEODISPLAYHEIGHT,  EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, display_height), { .u=-1 } },
-    { MATROSKA_ID_VIDEOPIXELWIDTH,     EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, pixel_width) },
-    { MATROSKA_ID_VIDEOPIXELHEIGHT,    EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, pixel_height) },
-    { MATROSKA_ID_VIDEOPIXELCROPB,     EBML_NONE },
-    { MATROSKA_ID_VIDEOPIXELCROPT,     EBML_NONE },
-    { MATROSKA_ID_VIDEOPIXELCROPL,     EBML_NONE },
-    { MATROSKA_ID_VIDEOPIXELCROPR,     EBML_NONE },
-    { MATROSKA_ID_VIDEODISPLAYUNIT,    EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, display_unit), { .u= MATROSKA_VIDEO_DISPLAYUNIT_PIXELS } },
-    { MATROSKA_ID_VIDEOFLAGINTERLACED, EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, interlaced),  { .u = MATROSKA_VIDEO_INTERLACE_FLAG_UNDETERMINED } },
-    { MATROSKA_ID_VIDEOFIELDORDER,     EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, field_order), { .u = MATROSKA_VIDEO_FIELDORDER_UNDETERMINED } },
-    { MATROSKA_ID_VIDEOALPHAMODE,      EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, alpha_mode) },
-    { MATROSKA_ID_VIDEOCOLORSPACE,     EBML_BIN,   0, 0, offsetof(MatroskaTrackVideo, color_space) },
-    { MATROSKA_ID_VIDEOCOLOR,          EBML_NEST,  0, sizeof(MatroskaTrackVideoColor), offsetof(MatroskaTrackVideo, color), { .n = matroska_track_video_color } },
-    { MATROSKA_ID_VIDEOPROJECTION,     EBML_NEST,  0, 0, offsetof(MatroskaTrackVideo, projection), { .n = matroska_track_video_projection } },
-    { MATROSKA_ID_VIDEOSTEREOMODE,     EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, stereo_mode), { .u = MATROSKA_VIDEO_STEREOMODE_TYPE_NB } },
-    { MATROSKA_ID_VIDEOASPECTRATIO,    EBML_NONE },
+    { MATROSKA_ID_VIDEOFRAMERATE,             EBML_FLOAT, 0, 0, offsetof(MatroskaTrackVideo, frame_rate) },
+    { MATROSKA_ID_VIDEODISPLAYWIDTH,          EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, display_width), { .u = -1 } },
+    { MATROSKA_ID_VIDEODISPLAYHEIGHT,         EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, display_height), { .u = -1 } },
+    { MATROSKA_ID_VIDEOPIXELWIDTH,            EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, pixel_width) },
+    { MATROSKA_ID_VIDEOPIXELHEIGHT,           EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, pixel_height) },
+    { MATROSKA_ID_VIDEOPIXELCROPB,            EBML_NONE },
+    { MATROSKA_ID_VIDEOPIXELCROPT,            EBML_NONE },
+    { MATROSKA_ID_VIDEOPIXELCROPL,            EBML_NONE },
+    { MATROSKA_ID_VIDEOPIXELCROPR,            EBML_NONE },
+    { MATROSKA_ID_VIDEODISPLAYUNIT,           EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, display_unit), { .u = MATROSKA_VIDEO_DISPLAYUNIT_PIXELS } },
+    { MATROSKA_ID_VIDEOFLAGINTERLACED,        EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, interlaced), { .u = MATROSKA_VIDEO_INTERLACE_FLAG_UNDETERMINED } },
+    { MATROSKA_ID_VIDEOFIELDORDER,            EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, field_order), { .u = MATROSKA_VIDEO_FIELDORDER_UNDETERMINED } },
+    { MATROSKA_ID_VIDEOALPHAMODE,             EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, alpha_mode) },
+    { MATROSKA_ID_VIDEOCOLORSPACE,            EBML_BIN,   0, 0, offsetof(MatroskaTrackVideo, color_space) },
+    { MATROSKA_ID_VIDEOCOLOR,                 EBML_NEST,  0, sizeof(MatroskaTrackVideoColor), offsetof(MatroskaTrackVideo, color), { .n = matroska_track_video_color } },
+    { MATROSKA_ID_VIDEOPROJECTION,            EBML_NEST,  0, 0, offsetof(MatroskaTrackVideo, projection), { .n = matroska_track_video_projection } },
+    { MATROSKA_ID_VIDEOSTEREOMODE,            EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, stereo_mode), { .u = MATROSKA_VIDEO_STEREOMODE_TYPE_NB } },
+    { MATROSKA_ID_VIDEOASPECTRATIO,           EBML_NONE },
     CHILD_OF(matroska_track)
 };
 
-static EbmlSyntax matroska_track_plane[] = {
-    { MATROSKA_ID_TRACKPLANEUID,  EBML_UINT, 0, 0, offsetof(MatroskaTrackPlane,uid) },
-    { MATROSKA_ID_TRACKPLANETYPE, EBML_UINT, 0, 0, offsetof(MatroskaTrackPlane,type) },
+EbmlSyntax matroska_track_plane[] = {
+    { MATROSKA_ID_TRACKPLANEUID,              EBML_UINT,  0, 0, offsetof(MatroskaTrackPlane, uid) },
+    { MATROSKA_ID_TRACKPLANETYPE,             EBML_UINT,  0, 0, offsetof(MatroskaTrackPlane, type) },
     CHILD_OF(matroska_track_combine_planes)
 };
 
 EbmlSyntax matroska_track_combine_planes[] = {
-    { MATROSKA_ID_TRACKPLANE, EBML_NEST, 0, sizeof(MatroskaTrackPlane), offsetof(MatroskaTrackOperation,combine_planes), {.n = matroska_track_plane} },
+    { MATROSKA_ID_TRACKPLANE,                 EBML_NEST,  0, sizeof(MatroskaTrackPlane), offsetof(MatroskaTrackOperation, combine_planes), { .n = matroska_track_plane } },
     CHILD_OF(matroska_track_operation)
 };
 
 EbmlSyntax matroska_track_operation[] = {
-    { MATROSKA_ID_TRACKCOMBINEPLANES, EBML_NEST, 0, 0, 0, {.n = matroska_track_combine_planes} },
+    { MATROSKA_ID_TRACKCOMBINEPLANES,         EBML_NEST,  0, 0, 0, { .n = matroska_track_combine_planes } },
     CHILD_OF(matroska_track)
 };
 
 static EbmlSyntax matroska_track_encoding_encryption[] = {
-    { MATROSKA_ID_ENCODINGENCALGO,        EBML_UINT, 0, 0, offsetof(MatroskaTrackEncryption,algo) },
-    { MATROSKA_ID_ENCODINGENCKEYID,       EBML_BIN, 0, 0, offsetof(MatroskaTrackEncryption,key_id) },
-    { MATROSKA_ID_ENCODINGENCAESSETTINGS, EBML_NONE },
-    { MATROSKA_ID_ENCODINGSIGALGO,        EBML_NONE },
-    { MATROSKA_ID_ENCODINGSIGHASHALGO,    EBML_NONE },
-    { MATROSKA_ID_ENCODINGSIGKEYID,       EBML_NONE },
-    { MATROSKA_ID_ENCODINGSIGNATURE,      EBML_NONE },
+    { MATROSKA_ID_ENCODINGENCALGO,            EBML_UINT,  0, 0, offsetof(MatroskaTrackEncryption, algo) },
+    { MATROSKA_ID_ENCODINGENCKEYID,           EBML_BIN,   0, 0, offsetof(MatroskaTrackEncryption, key_id) },
+    { MATROSKA_ID_ENCODINGENCAESSETTINGS,     EBML_NONE },
+    { MATROSKA_ID_ENCODINGSIGALGO,            EBML_NONE },
+    { MATROSKA_ID_ENCODINGSIGHASHALGO,        EBML_NONE },
+    { MATROSKA_ID_ENCODINGSIGKEYID,           EBML_NONE },
+    { MATROSKA_ID_ENCODINGSIGNATURE,          EBML_NONE },
     CHILD_OF(matroska_track_encoding)
 };
 
 static EbmlSyntax matroska_track_encoding_compression[] = {
-    { MATROSKA_ID_ENCODINGCOMPALGO,     EBML_UINT, 0, 0, offsetof(MatroskaTrackCompression, algo), { .u = MATROSKA_TRACK_ENCODING_COMP_ZLIB } },
-    { MATROSKA_ID_ENCODINGCOMPSETTINGS, EBML_BIN,  0, 0, offsetof(MatroskaTrackCompression, settings) },
+    { MATROSKA_ID_ENCODINGCOMPALGO,           EBML_UINT,  0, 0, offsetof(MatroskaTrackCompression, algo), { .u = MATROSKA_TRACK_ENCODING_COMP_ZLIB } },
+    { MATROSKA_ID_ENCODINGCOMPSETTINGS,       EBML_BIN,   0, 0, offsetof(MatroskaTrackCompression, settings) },
     CHILD_OF(matroska_track_encoding)
 };
 
 EbmlSyntax matroska_track_encoding[] = {
-    { MATROSKA_ID_ENCODINGSCOPE,       EBML_UINT, 0, 0, offsetof(MatroskaTrackEncoding, scope),       { .u = 1 } },
-    { MATROSKA_ID_ENCODINGTYPE,        EBML_UINT, 0, 0, offsetof(MatroskaTrackEncoding, type) },
-    { MATROSKA_ID_ENCODINGCOMPRESSION, EBML_NEST, 0, 0, offsetof(MatroskaTrackEncoding, compression), { .n = matroska_track_encoding_compression } },
-    { MATROSKA_ID_ENCODINGENCRYPTION,  EBML_NEST, 0, 0, offsetof(MatroskaTrackEncoding, encryption),  { .n = matroska_track_encoding_encryption } },
-    { MATROSKA_ID_ENCODINGORDER,       EBML_NONE },
+    { MATROSKA_ID_ENCODINGSCOPE,              EBML_UINT,  0, 0, offsetof(MatroskaTrackEncoding, scope), { .u = 1 } },
+    { MATROSKA_ID_ENCODINGTYPE,               EBML_UINT,  0, 0, offsetof(MatroskaTrackEncoding, type) },
+    { MATROSKA_ID_ENCODINGCOMPRESSION,        EBML_NEST,  0, 0, offsetof(MatroskaTrackEncoding, compression), { .n = matroska_track_encoding_compression } },
+    { MATROSKA_ID_ENCODINGENCRYPTION,         EBML_NEST,  0, 0, offsetof(MatroskaTrackEncoding, encryption), { .n = matroska_track_encoding_encryption } },
+    { MATROSKA_ID_ENCODINGORDER,              EBML_NONE },
     CHILD_OF(matroska_track_encodings)
 };
 
 EbmlSyntax matroska_track_encodings[] = {
-    { MATROSKA_ID_TRACKCONTENTENCODING, EBML_NEST, 0, sizeof(MatroskaTrackEncoding), offsetof(MatroskaTrack, encodings), { .n = matroska_track_encoding } },
+    { MATROSKA_ID_TRACKCONTENTENCODING,       EBML_NEST,  0, sizeof(MatroskaTrackEncoding), offsetof(MatroskaTrack, encodings), { .n = matroska_track_encoding } },
     CHILD_OF(matroska_track)
 };
 
 EbmlSyntax matroska_block_addition_mapping[] = {
-    { MATROSKA_ID_BLKADDIDNAME,       EBML_STR,  0, 0, offsetof(MatroskaBlockAdditionMapping, name) },
-    { MATROSKA_ID_BLKADDIDTYPE,       EBML_UINT, 0, 0, offsetof(MatroskaBlockAdditionMapping, type) },
-    { MATROSKA_ID_BLKADDIDEXTRADATA,  EBML_BIN,  0, 0, offsetof(MatroskaBlockAdditionMapping, extradata) },
-    { MATROSKA_ID_BLKADDIDVALUE,      EBML_UINT, 0, 0, offsetof(MatroskaBlockAdditionMapping, value) },
+    { MATROSKA_ID_BLKADDIDNAME,               EBML_STR,   0, 0, offsetof(MatroskaBlockAdditionMapping, name) },
+    { MATROSKA_ID_BLKADDIDTYPE,               EBML_UINT,  0, 0, offsetof(MatroskaBlockAdditionMapping, type) },
+    { MATROSKA_ID_BLKADDIDEXTRADATA,          EBML_BIN,   0, 0, offsetof(MatroskaBlockAdditionMapping, extradata) },
+    { MATROSKA_ID_BLKADDIDVALUE,              EBML_UINT,  0, 0, offsetof(MatroskaBlockAdditionMapping, value) },
     CHILD_OF(matroska_track)
 };
 
 static EbmlSyntax matroska_track_audio[] = {
-    { MATROSKA_ID_AUDIOSAMPLINGFREQ,    EBML_FLOAT, 0, 0, offsetof(MatroskaTrackAudio, samplerate), { .f = 8000.0 } },
-    { MATROSKA_ID_AUDIOOUTSAMPLINGFREQ, EBML_FLOAT, 0, 0, offsetof(MatroskaTrackAudio, out_samplerate) },
-    { MATROSKA_ID_AUDIOBITDEPTH,        EBML_UINT,  0, 0, offsetof(MatroskaTrackAudio, bitdepth) },
-    { MATROSKA_ID_AUDIOCHANNELS,        EBML_UINT,  0, 0, offsetof(MatroskaTrackAudio, channels),   { .u = 1 } },
+    { MATROSKA_ID_AUDIOSAMPLINGFREQ,          EBML_FLOAT, 0, 0, offsetof(MatroskaTrackAudio, samplerate), { .f = 8000.0 } },
+    { MATROSKA_ID_AUDIOOUTSAMPLINGFREQ,       EBML_FLOAT, 0, 0, offsetof(MatroskaTrackAudio, out_samplerate) },
+    { MATROSKA_ID_AUDIOBITDEPTH,              EBML_UINT,  0, 0, offsetof(MatroskaTrackAudio, bitdepth) },
+    { MATROSKA_ID_AUDIOCHANNELS,              EBML_UINT,  0, 0, offsetof(MatroskaTrackAudio, channels), { .u = 1 } },
     CHILD_OF(matroska_track)
 };
 
 EbmlSyntax matroska_track[] = {
-    { MATROSKA_ID_TRACKNUMBER,           EBML_UINT,  0, 0, offsetof(MatroskaTrack, num) },
-    { MATROSKA_ID_TRACKNAME,             EBML_UTF8,  0, 0, offsetof(MatroskaTrack, name) },
-    { MATROSKA_ID_TRACKUID,              EBML_UINT,  0, 0, offsetof(MatroskaTrack, uid) },
-    { MATROSKA_ID_TRACKTYPE,             EBML_UINT,  0, 0, offsetof(MatroskaTrack, type) },
-    { MATROSKA_ID_CODECID,               EBML_STR,   0, 0, offsetof(MatroskaTrack, codec_id) },
-    { MATROSKA_ID_CODECPRIVATE,          EBML_BIN,   0, 0, offsetof(MatroskaTrack, codec_priv) },
-    { MATROSKA_ID_CODECDELAY,            EBML_UINT,  0, 0, offsetof(MatroskaTrack, codec_delay) },
-    { MATROSKA_ID_TRACKLANGUAGE,         EBML_STR,   0, 0, offsetof(MatroskaTrack, language),     { .s = "eng" } },
-    { MATROSKA_ID_TRACKDEFAULTDURATION,  EBML_UINT,  0, 0, offsetof(MatroskaTrack, default_duration) },
-    { MATROSKA_ID_TRACKTIMECODESCALE,    EBML_FLOAT, 0, 0, offsetof(MatroskaTrack, time_scale),   { .f = 1.0 } },
-    { MATROSKA_ID_TRACKFLAGDEFAULT,      EBML_UINT,  0, 0, offsetof(MatroskaTrack, flag_default), { .u = 1 } },
-    { MATROSKA_ID_TRACKFLAGFORCED,       EBML_UINT,  0, 0, offsetof(MatroskaTrack, flag_forced) },
-    { MATROSKA_ID_TRACKVIDEO,            EBML_NEST,  0, 0, offsetof(MatroskaTrack, video),        { .n = matroska_track_video } },
-    { MATROSKA_ID_TRACKAUDIO,            EBML_NEST,  0, 0, offsetof(MatroskaTrack, audio),        { .n = matroska_track_audio } },
-    { MATROSKA_ID_TRACKFLAGENABLED,      EBML_NONE },
-    { MATROSKA_ID_TRACKFLAGHEARINGIMPAIRED, EBML_UINT, 0, 0, offsetof(MatroskaTrack, flag_hearingimpaired) },
-    { MATROSKA_ID_TRACKFLAGVISUALIMPAIRED, EBML_UINT, 0, 0, offsetof(MatroskaTrack, flag_visualimpaired) },
-    { MATROSKA_ID_TRACKFLAGTEXTDESCRIPTIONS, EBML_UINT, 0, 0, offsetof(MatroskaTrack, flag_textdescriptions) },
-    { MATROSKA_ID_TRACKFLAGORIGINAL,     EBML_UINT,  1, 0, offsetof(MatroskaTrack, flag_original) },
-    { MATROSKA_ID_TRACKFLAGCOMMENTARY,   EBML_UINT,  0, 0, offsetof(MatroskaTrack, flag_comment) },
-    { MATROSKA_ID_TRACKFLAGLACING,       EBML_NONE },
-    { MATROSKA_ID_TRACKMINCACHE,         EBML_NONE },
-    { MATROSKA_ID_TRACKMAXCACHE,         EBML_NONE },
-    { MATROSKA_ID_TRACKMAXBLKADDID,      EBML_UINT,  0, 0, offsetof(MatroskaTrack, max_block_additional_id) },
-    { MATROSKA_ID_TRACKBLKADDMAPPING,    EBML_NEST,  0, sizeof(MatroskaBlockAdditionMapping), offsetof(MatroskaTrack, block_addition_mappings), { .n = matroska_block_addition_mapping } },
-    { MATROSKA_ID_CODECNAME,             EBML_NONE },
-    { MATROSKA_ID_CODECINFOURL,          EBML_NONE },
-    { MATROSKA_ID_CODECDOWNLOADURL,      EBML_NONE },
-    { MATROSKA_ID_CODECDECODEALL,        EBML_NONE },
-    { MATROSKA_ID_SEEKPREROLL,           EBML_UINT,  0, 0, offsetof(MatroskaTrack, seek_preroll) },
-    { MATROSKA_ID_TRACKOPERATION,        EBML_NEST,  0, 0, offsetof(MatroskaTrack, operation),    { .n = matroska_track_operation } },
-    { MATROSKA_ID_TRACKCONTENTENCODINGS, EBML_NEST,  0, 0, 0,                                     { .n = matroska_track_encodings } },
+    { MATROSKA_ID_TRACKNUMBER,                EBML_UINT,  0, 0, offsetof(MatroskaTrack, num) },
+    { MATROSKA_ID_TRACKNAME,                  EBML_UTF8,  0, 0, offsetof(MatroskaTrack, name) },
+    { MATROSKA_ID_TRACKUID,                   EBML_UINT,  0, 0, offsetof(MatroskaTrack, uid) },
+    { MATROSKA_ID_TRACKTYPE,                  EBML_UINT,  0, 0, offsetof(MatroskaTrack, type) },
+    { MATROSKA_ID_CODECID,                    EBML_STR,   0, 0, offsetof(MatroskaTrack, codec_id) },
+    { MATROSKA_ID_CODECPRIVATE,               EBML_BIN,   0, 0, offsetof(MatroskaTrack, codec_priv) },
+    { MATROSKA_ID_CODECDELAY,                 EBML_UINT,  0, 0, offsetof(MatroskaTrack, codec_delay) },
+    { MATROSKA_ID_TRACKLANGUAGE,              EBML_STR,   0, 0, offsetof(MatroskaTrack, language), { .s = "eng" } },
+    { MATROSKA_ID_TRACKDEFAULTDURATION,       EBML_UINT,  0, 0, offsetof(MatroskaTrack, default_duration) },
+    { MATROSKA_ID_TRACKTIMECODESCALE,         EBML_FLOAT, 0, 0, offsetof(MatroskaTrack, time_scale), { .f = 1.0 } },
+    { MATROSKA_ID_TRACKFLAGDEFAULT,           EBML_UINT,  0, 0, offsetof(MatroskaTrack, flag_default), { .u = 1 } },
+    { MATROSKA_ID_TRACKFLAGFORCED,            EBML_UINT,  0, 0, offsetof(MatroskaTrack, flag_forced) },
+    { MATROSKA_ID_TRACKVIDEO,                 EBML_NEST,  0, 0, offsetof(MatroskaTrack, video), { .n = matroska_track_video } },
+    { MATROSKA_ID_TRACKAUDIO,                 EBML_NEST,  0, 0, offsetof(MatroskaTrack, audio), { .n = matroska_track_audio } },
+    { MATROSKA_ID_TRACKFLAGENABLED,           EBML_NONE },
+    { MATROSKA_ID_TRACKFLAGHEARINGIMPAIRED,   EBML_UINT,  0, 0, offsetof(MatroskaTrack, flag_hearingimpaired) },
+    { MATROSKA_ID_TRACKFLAGVISUALIMPAIRED,    EBML_UINT,  0, 0, offsetof(MatroskaTrack, flag_visualimpaired) },
+    { MATROSKA_ID_TRACKFLAGTEXTDESCRIPTIONS,  EBML_UINT,  0, 0, offsetof(MatroskaTrack, flag_textdescriptions) },
+    { MATROSKA_ID_TRACKFLAGORIGINAL,          EBML_UINT,  1, 0, offsetof(MatroskaTrack, flag_original) },
+    { MATROSKA_ID_TRACKFLAGCOMMENTARY,        EBML_UINT,  0, 0, offsetof(MatroskaTrack, flag_comment) },
+    { MATROSKA_ID_TRACKFLAGLACING,            EBML_NONE },
+    { MATROSKA_ID_TRACKMINCACHE,              EBML_NONE },
+    { MATROSKA_ID_TRACKMAXCACHE,              EBML_NONE },
+    { MATROSKA_ID_TRACKMAXBLKADDID,           EBML_UINT,  0, 0, offsetof(MatroskaTrack, max_block_additional_id) },
+    { MATROSKA_ID_TRACKBLKADDMAPPING,         EBML_NEST,  0, sizeof(MatroskaBlockAdditionMapping), offsetof(MatroskaTrack, block_addition_mappings), { .n = matroska_block_addition_mapping } },
+    { MATROSKA_ID_CODECNAME,                  EBML_NONE },
+    { MATROSKA_ID_CODECINFOURL,               EBML_NONE },
+    { MATROSKA_ID_CODECDOWNLOADURL,           EBML_NONE },
+    { MATROSKA_ID_CODECDECODEALL,             EBML_NONE },
+    { MATROSKA_ID_SEEKPREROLL,                EBML_UINT,  0, 0, offsetof(MatroskaTrack, seek_preroll) },
+    { MATROSKA_ID_TRACKOPERATION,             EBML_NEST,  0, 0, offsetof(MatroskaTrack, operation), { .n = matroska_track_operation } },
+    { MATROSKA_ID_TRACKCONTENTENCODINGS,      EBML_NEST,  0, 0, 0, { .n = matroska_track_encodings } },
     CHILD_OF(matroska_tracks)
 };
 
 EbmlSyntax matroska_tracks[] = {
-    { MATROSKA_ID_TRACKENTRY, EBML_NEST, 0, sizeof(MatroskaTrack), offsetof(MatroskaDemuxContext, tracks), { .n = matroska_track } },
+    { MATROSKA_ID_TRACKENTRY,                 EBML_NEST,  0, sizeof(MatroskaTrack), offsetof(MatroskaDemuxContext, tracks), { .n = matroska_track } },
     CHILD_OF(matroska_segment)
 };
 
 static EbmlSyntax matroska_tagtargets[] = {
-    { MATROSKA_ID_TAGTARGETS_TYPE,       EBML_STR,  0, 0, offsetof(MatroskaTagTarget, type) },
-    { MATROSKA_ID_TAGTARGETS_TYPEVALUE,  EBML_UINT, 0, 0, offsetof(MatroskaTagTarget, typevalue),  { .u = 50 } },
-    { MATROSKA_ID_TAGTARGETS_TRACKUID,   EBML_UINT, 0, 0, offsetof(MatroskaTagTarget, trackuid) },
-    { MATROSKA_ID_TAGTARGETS_CHAPTERUID, EBML_UINT, 0, 0, offsetof(MatroskaTagTarget, chapteruid) },
-    { MATROSKA_ID_TAGTARGETS_ATTACHUID,  EBML_UINT, 0, 0, offsetof(MatroskaTagTarget, attachuid) },
+    { MATROSKA_ID_TAGTARGETS_TYPE,            EBML_STR,   0, 0, offsetof(MatroskaTagTarget, type) },
+    { MATROSKA_ID_TAGTARGETS_TYPEVALUE,       EBML_UINT,  0, 0, offsetof(MatroskaTagTarget, typevalue), { .u = 50 } },
+    { MATROSKA_ID_TAGTARGETS_TRACKUID,        EBML_UINT,  0, 0, offsetof(MatroskaTagTarget, trackuid) },
+    { MATROSKA_ID_TAGTARGETS_CHAPTERUID,      EBML_UINT,  0, 0, offsetof(MatroskaTagTarget, chapteruid) },
+    { MATROSKA_ID_TAGTARGETS_ATTACHUID,       EBML_UINT,  0, 0, offsetof(MatroskaTagTarget, attachuid) },
     CHILD_OF(matroska_tag)
 };
 
 static EbmlSyntax matroska_simpletag[] = {
-    { MATROSKA_ID_TAGNAME,        EBML_UTF8, 0, 0,                   offsetof(MatroskaTag, name) },
-    { MATROSKA_ID_TAGSTRING,      EBML_UTF8, 0, 0,                   offsetof(MatroskaTag, string) },
-    { MATROSKA_ID_TAGLANG,        EBML_STR,  0, 0,                   offsetof(MatroskaTag, lang), { .s = "und" } },
-    { MATROSKA_ID_TAGDEFAULT,     EBML_UINT, 0, 0,                   offsetof(MatroskaTag, def), { .u = 1 } },
-    { MATROSKA_ID_TAGDEFAULT_BUG, EBML_UINT, 0, 0,                   offsetof(MatroskaTag, def), { .u = 1 } },
-    { MATROSKA_ID_SIMPLETAG,      EBML_NEST, 0, sizeof(MatroskaTag), offsetof(MatroskaTag, sub),  { .n = matroska_simpletag } },
+    { MATROSKA_ID_TAGNAME,                    EBML_UTF8,  0, 0, offsetof(MatroskaTag, name) },
+    { MATROSKA_ID_TAGSTRING,                  EBML_UTF8,  0, 0, offsetof(MatroskaTag, string) },
+    { MATROSKA_ID_TAGLANG,                    EBML_STR,   0, 0, offsetof(MatroskaTag, lang), { .s = "und" } },
+    { MATROSKA_ID_TAGDEFAULT,                 EBML_UINT,  0, 0, offsetof(MatroskaTag, def), { .u = 1 } },
+    { MATROSKA_ID_TAGDEFAULT_BUG,             EBML_UINT,  0, 0, offsetof(MatroskaTag, def), { .u = 1 } },
+    { MATROSKA_ID_SIMPLETAG,                  EBML_NEST,  0, sizeof(MatroskaTag), offsetof(MatroskaTag, sub), { .n = matroska_simpletag } },
     CHILD_OF(matroska_tag)
 };
 
 EbmlSyntax matroska_tag[] = {
-    { MATROSKA_ID_SIMPLETAG,  EBML_NEST, 0, sizeof(MatroskaTag), offsetof(MatroskaTags, tag),    { .n = matroska_simpletag } },
-    { MATROSKA_ID_TAGTARGETS, EBML_NEST, 0, 0,                   offsetof(MatroskaTags, target), { .n = matroska_tagtargets } },
+    { MATROSKA_ID_SIMPLETAG,                  EBML_NEST,  0, sizeof(MatroskaTag), offsetof(MatroskaTags, tag), { .n = matroska_simpletag } },
+    { MATROSKA_ID_TAGTARGETS,                 EBML_NEST,  0, 0, offsetof(MatroskaTags, target), { .n = matroska_tagtargets } },
     CHILD_OF(matroska_tags)
 };
 
 EbmlSyntax matroska_tags[] = {
-    { MATROSKA_ID_TAG, EBML_NEST, 0, sizeof(MatroskaTags), offsetof(MatroskaDemuxContext, tags), { .n = matroska_tag } },
+    { MATROSKA_ID_TAG,                        EBML_NEST,  0, sizeof(MatroskaTags), offsetof(MatroskaDemuxContext, tags), { .n = matroska_tag } },
     CHILD_OF(matroska_segment)
 };
 
 static EbmlSyntax matroska_seekhead_entry[] = {
-    { MATROSKA_ID_SEEKID,       EBML_UINT, 0, 0, offsetof(MatroskaSeekhead, id) },
-    { MATROSKA_ID_SEEKPOSITION, EBML_UINT, 0, 0, offsetof(MatroskaSeekhead, pos), { .u = -1 } },
+    { MATROSKA_ID_SEEKID,                     EBML_UINT,  0, 0, offsetof(MatroskaSeekhead, id) },
+    { MATROSKA_ID_SEEKPOSITION,               EBML_UINT,  0, 0, offsetof(MatroskaSeekhead, pos), { .u = -1 } },
     CHILD_OF(matroska_seekhead)
 };
 
 EbmlSyntax matroska_seekhead[] = {
-    { MATROSKA_ID_SEEKENTRY, EBML_NEST, 0, sizeof(MatroskaSeekhead), offsetof(MatroskaDemuxContext, seekhead), { .n = matroska_seekhead_entry } },
+    { MATROSKA_ID_SEEKENTRY,                  EBML_NEST,  0, sizeof(MatroskaSeekhead), offsetof(MatroskaDemuxContext, seekhead), { .n = matroska_seekhead_entry } },
     CHILD_OF(matroska_segment)
 };
 
 static EbmlSyntax matroska_info[] = {
-    { MATROSKA_ID_TIMECODESCALE, EBML_UINT,  0, 0, offsetof(MatroskaDemuxContext, time_scale), { .u = 1000000 } },
-    { 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_TIMECODESCALE,              EBML_UINT,  0, 0, offsetof(MatroskaDemuxContext, time_scale), { .u = 1000000 } },
+    { 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 },
     CHILD_OF(matroska_segment)
 };
 
 static EbmlSyntax matroska_index_pos[] = {
-    { MATROSKA_ID_CUETRACK,           EBML_UINT, 0, 0, offsetof(MatroskaIndexPos, track) },
-    { MATROSKA_ID_CUECLUSTERPOSITION, EBML_UINT, 0, 0, offsetof(MatroskaIndexPos, pos) },
-    { MATROSKA_ID_CUERELATIVEPOSITION,EBML_NONE },
-    { MATROSKA_ID_CUEDURATION,        EBML_NONE },
-    { MATROSKA_ID_CUEBLOCKNUMBER,     EBML_NONE },
+    { MATROSKA_ID_CUETRACK,                   EBML_UINT,  0, 0, offsetof(MatroskaIndexPos, track) },
+    { MATROSKA_ID_CUECLUSTERPOSITION,         EBML_UINT,  0, 0, offsetof(MatroskaIndexPos, pos) },
+    { MATROSKA_ID_CUERELATIVEPOSITION,        EBML_NONE },
+    { MATROSKA_ID_CUEDURATION,                EBML_NONE },
+    { MATROSKA_ID_CUEBLOCKNUMBER,             EBML_NONE },
     CHILD_OF(matroska_index_entry)
 };
 
 EbmlSyntax matroska_index_entry[] = {
-    { MATROSKA_ID_CUETIME,          EBML_UINT, 0, 0,                        offsetof(MatroskaIndex, time) },
-    { MATROSKA_ID_CUETRACKPOSITION, EBML_NEST, 0, sizeof(MatroskaIndexPos), offsetof(MatroskaIndex, pos), { .n = matroska_index_pos } },
+    { MATROSKA_ID_CUETIME,                    EBML_UINT,  0, 0, offsetof(MatroskaIndex, time) },
+    { MATROSKA_ID_CUETRACKPOSITION,           EBML_NEST,  0, sizeof(MatroskaIndexPos), offsetof(MatroskaIndex, pos), { .n = matroska_index_pos } },
     CHILD_OF(matroska_index)
 };
 
 EbmlSyntax matroska_index[] = {
-    { MATROSKA_ID_POINTENTRY, EBML_NEST, 0, sizeof(MatroskaIndex), offsetof(MatroskaDemuxContext, index), { .n = matroska_index_entry } },
+    { MATROSKA_ID_POINTENTRY,                 EBML_NEST,  0, sizeof(MatroskaIndex), offsetof(MatroskaDemuxContext, index), { .n = matroska_index_entry } },
     CHILD_OF(matroska_segment)
 };
 
 static EbmlSyntax matroska_blockmore[] = {
-    { MATROSKA_ID_BLOCKADDID,      EBML_UINT, 0, 0, offsetof(MatroskaBlock,additional_id), { .u = 1 } },
-    { MATROSKA_ID_BLOCKADDITIONAL, EBML_BIN,  0, 0, offsetof(MatroskaBlock,additional) },
+    { MATROSKA_ID_BLOCKADDID,                 EBML_UINT,  0, 0, offsetof(MatroskaBlock, additional_id), { .u = 1 } },
+    { MATROSKA_ID_BLOCKADDITIONAL,            EBML_BIN,   0, 0, offsetof(MatroskaBlock, additional) },
     CHILD_OF(matroska_blockadditions)
 };
 
 EbmlSyntax matroska_blockadditions[] = {
-    { MATROSKA_ID_BLOCKMORE, EBML_NEST, 0, 0, 0, {.n = matroska_blockmore} },
+    { MATROSKA_ID_BLOCKMORE,                  EBML_NEST,  0, 0, 0, { .n = matroska_blockmore } },
     CHILD_OF(matroska_blockgroup)
 };
 
 EbmlSyntax matroska_blockgroup[] = {
-    { MATROSKA_ID_BLOCK,          EBML_BIN,  0, 0, offsetof(MatroskaBlock, bin) },
-    { MATROSKA_ID_BLOCKADDITIONS, EBML_NEST, 0, 0, 0, { .n = matroska_blockadditions} },
-    { MATROSKA_ID_BLOCKDURATION,  EBML_UINT, 0, 0, offsetof(MatroskaBlock, duration) },
-    { MATROSKA_ID_DISCARDPADDING, EBML_SINT, 0, 0, offsetof(MatroskaBlock, discard_padding) },
-    { MATROSKA_ID_BLOCKREFERENCE, EBML_SINT, 1, 0, offsetof(MatroskaBlock, reference) },
-    { MATROSKA_ID_CODECSTATE,     EBML_NONE },
-    {                          1, EBML_UINT, 0, 0, offsetof(MatroskaBlock, non_simple), { .u = 1 } },
+    { MATROSKA_ID_BLOCK,                      EBML_BIN,   0, 0, offsetof(MatroskaBlock, bin) },
+    { MATROSKA_ID_BLOCKADDITIONS,             EBML_NEST,  0, 0, 0, { .n = matroska_blockadditions } },
+    { MATROSKA_ID_BLOCKDURATION,              EBML_UINT,  0, 0, offsetof(MatroskaBlock, duration) },
+    { MATROSKA_ID_DISCARDPADDING,             EBML_SINT,  0, 0, offsetof(MatroskaBlock, discard_padding) },
+    { MATROSKA_ID_BLOCKREFERENCE,             EBML_SINT,  1, 0, offsetof(MatroskaBlock, reference) },
+    { MATROSKA_ID_CODECSTATE,                 EBML_NONE },
+    {                                      1, EBML_UINT,  0, 0, offsetof(MatroskaBlock, non_simple), { .u = 1 } },
     CHILD_OF(matroska_cluster_parsing)
 };
 
 // The following array contains SimpleBlock and BlockGroup twice
 // in order to reuse the other values for matroska_cluster_enter.
 EbmlSyntax matroska_cluster_parsing[] = {
-    { MATROSKA_ID_SIMPLEBLOCK,     EBML_BIN,  0, 0, offsetof(MatroskaBlock, bin) },
-    { MATROSKA_ID_BLOCKGROUP,      EBML_NEST, 0, 0, 0, { .n = matroska_blockgroup } },
-    { MATROSKA_ID_CLUSTERTIMECODE, EBML_UINT, 0, 0, offsetof(MatroskaCluster, timecode) },
-    { MATROSKA_ID_CLUSTERPOSITION, EBML_NONE },
-    { MATROSKA_ID_CLUSTERPREVSIZE, EBML_NONE },
-    { MATROSKA_ID_SIMPLEBLOCK,     EBML_STOP },
-    { MATROSKA_ID_BLOCKGROUP,      EBML_STOP },
+    { MATROSKA_ID_SIMPLEBLOCK,                EBML_BIN,   0, 0, offsetof(MatroskaBlock, bin) },
+    { MATROSKA_ID_BLOCKGROUP,                 EBML_NEST,  0, 0, 0, { .n = matroska_blockgroup } },
+    { MATROSKA_ID_CLUSTERTIMECODE,            EBML_UINT,  0, 0, offsetof(MatroskaCluster, timecode) },
+    { MATROSKA_ID_CLUSTERPOSITION,            EBML_NONE },
+    { MATROSKA_ID_CLUSTERPREVSIZE,            EBML_NONE },
+    { MATROSKA_ID_SIMPLEBLOCK,                EBML_STOP },
+    { MATROSKA_ID_BLOCKGROUP,                 EBML_STOP },
     CHILD_OF(matroska_segment)
 };
 
 static EbmlSyntax matroska_chapter_display[] = {
-    { MATROSKA_ID_CHAPSTRING,  EBML_UTF8, 0, 0, offsetof(MatroskaChapter, title) },
-    { MATROSKA_ID_CHAPLANG,    EBML_NONE },
-    { MATROSKA_ID_CHAPCOUNTRY, EBML_NONE },
+    { MATROSKA_ID_CHAPSTRING,                 EBML_UTF8,  0, 0, offsetof(MatroskaChapter, title) },
+    { MATROSKA_ID_CHAPLANG,                   EBML_NONE },
+    { MATROSKA_ID_CHAPCOUNTRY,                EBML_NONE },
     CHILD_OF(matroska_chapter_entry)
 };
 
 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_CHAPTERPHYSEQUIV,   EBML_NONE },
-    { MATROSKA_ID_CHAPTERFLAGENABLED, 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_CHAPTERDISPLAY,             EBML_NEST,  0, 0, 0, { .n = matroska_chapter_display } },
+    { MATROSKA_ID_CHAPTERFLAGHIDDEN,          EBML_NONE },
+    { MATROSKA_ID_CHAPTERPHYSEQUIV,           EBML_NONE },
+    { MATROSKA_ID_CHAPTERFLAGENABLED,         EBML_NONE },
+    { MATROSKA_ID_CHAPTERATOM,                EBML_NONE },
     CHILD_OF(matroska_chapter)
 };
 
 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_EDITIONFLAGDEFAULT, EBML_NONE },
-    { MATROSKA_ID_EDITIONFLAGORDERED, EBML_NONE },
-    { MATROSKA_ID_EDITIONFLAGHIDDEN,  EBML_NONE },
+    { MATROSKA_ID_CHAPTERATOM,                EBML_NEST,  0, sizeof(MatroskaChapter), offsetof(MatroskaDemuxContext, chapters), { .n = matroska_chapter_entry } },
+    { MATROSKA_ID_EDITIONUID,                 EBML_NONE },
+    { MATROSKA_ID_EDITIONFLAGDEFAULT,         EBML_NONE },
+    { MATROSKA_ID_EDITIONFLAGORDERED,         EBML_NONE },
+    { MATROSKA_ID_EDITIONFLAGHIDDEN,          EBML_NONE },
     CHILD_OF(matroska_chapters)
 };
 
 EbmlSyntax matroska_chapters[] = {
-    { MATROSKA_ID_EDITIONENTRY, EBML_NEST, 0, 0, 0, { .n = matroska_chapter } },
+    { MATROSKA_ID_EDITIONENTRY,               EBML_NEST,  0, 0, 0, { .n = matroska_chapter } },
     CHILD_OF(matroska_segment)
 };
 
 static EbmlSyntax matroska_attachment[] = {
-    { MATROSKA_ID_FILEUID,      EBML_UINT, 0, 0, offsetof(MatroskaAttachment, uid) },
-    { MATROSKA_ID_FILENAME,     EBML_UTF8, 0, 0, offsetof(MatroskaAttachment, filename) },
-    { MATROSKA_ID_FILEMIMETYPE, EBML_STR,  0, 0, offsetof(MatroskaAttachment, mime) },
-    { MATROSKA_ID_FILEDATA,     EBML_BIN,  0, 0, offsetof(MatroskaAttachment, bin) },
-    { MATROSKA_ID_FILEDESC,     EBML_UTF8, 0, 0, offsetof(MatroskaAttachment, description) },
+    { MATROSKA_ID_FILEUID,                    EBML_UINT,  0, 0, offsetof(MatroskaAttachment, uid) },
+    { MATROSKA_ID_FILENAME,                   EBML_UTF8,  0, 0, offsetof(MatroskaAttachment, filename) },
+    { MATROSKA_ID_FILEMIMETYPE,               EBML_STR,   0, 0, offsetof(MatroskaAttachment, mime) },
+    { MATROSKA_ID_FILEDATA,                   EBML_BIN,   0, 0, offsetof(MatroskaAttachment, bin) },
+    { MATROSKA_ID_FILEDESC,                   EBML_UTF8,  0, 0, offsetof(MatroskaAttachment, description) },
     CHILD_OF(matroska_attachments)
 };
 
 EbmlSyntax matroska_attachments[] = {
-    { MATROSKA_ID_ATTACHEDFILE, EBML_NEST, 0, sizeof(MatroskaAttachment), offsetof(MatroskaDemuxContext, attachments), { .n = matroska_attachment } },
+    { MATROSKA_ID_ATTACHEDFILE,               EBML_NEST,  0, sizeof(MatroskaAttachment), offsetof(MatroskaDemuxContext, attachments), { .n = matroska_attachment } },
     CHILD_OF(matroska_segment)
 };
 
 EbmlSyntax matroska_segment[] = {
-    { MATROSKA_ID_CLUSTER,     EBML_STOP },
-    { MATROSKA_ID_INFO,        EBML_LEVEL1, 0, 0, 0, { .n = matroska_info } },
-    { MATROSKA_ID_TRACKS,      EBML_LEVEL1, 0, 0, 0, { .n = matroska_tracks } },
-    { MATROSKA_ID_ATTACHMENTS, EBML_LEVEL1, 0, 0, 0, { .n = matroska_attachments } },
-    { MATROSKA_ID_CHAPTERS,    EBML_LEVEL1, 0, 0, 0, { .n = matroska_chapters } },
-    { MATROSKA_ID_CUES,        EBML_LEVEL1, 0, 0, 0, { .n = matroska_index } },
-    { MATROSKA_ID_TAGS,        EBML_LEVEL1, 0, 0, 0, { .n = matroska_tags } },
-    { MATROSKA_ID_SEEKHEAD,    EBML_LEVEL1, 0, 0, 0, { .n = matroska_seekhead } },
+    { MATROSKA_ID_CLUSTER,                    EBML_STOP },
+    { MATROSKA_ID_INFO,                       EBML_LEVEL1,0, 0, 0, { .n = matroska_info } },
+    { MATROSKA_ID_TRACKS,                     EBML_LEVEL1,0, 0, 0, { .n = matroska_tracks } },
+    { MATROSKA_ID_ATTACHMENTS,                EBML_LEVEL1,0, 0, 0, { .n = matroska_attachments } },
+    { MATROSKA_ID_CHAPTERS,                   EBML_LEVEL1,0, 0, 0, { .n = matroska_chapters } },
+    { MATROSKA_ID_CUES,                       EBML_LEVEL1,0, 0, 0, { .n = matroska_index } },
+    { MATROSKA_ID_TAGS,                       EBML_LEVEL1,0, 0, 0, { .n = matroska_tags } },
+    { MATROSKA_ID_SEEKHEAD,                   EBML_LEVEL1,0, 0, 0, { .n = matroska_seekhead } },
     { 0 }   /* We don't want to go back to level 0, so don't add the parent. */
 };
 
-- 
2.20.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] 13+ messages in thread

* [FFmpeg-devel] [PATCH 11/12] avformat/matroska: only export a few elements.
  2022-11-06 15:08 [FFmpeg-devel] [PATCH 00/12] Use generated semantic for Matroska demuxer Steve Lhomme
                   ` (9 preceding siblings ...)
  2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 10/12] avformat/matroska: use the generated semantic files Steve Lhomme
@ 2022-11-06 15:08 ` Steve Lhomme
  2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 12/12] avformat/matroska: add missing elements Steve Lhomme
  11 siblings, 0 replies; 13+ messages in thread
From: Steve Lhomme @ 2022-11-06 15:08 UTC (permalink / raw)
  To: ffmpeg-devel

---
 libavformat/matroskasem.c | 69 +++++++++++++++++++++++++++------------
 libavformat/matroskasem.h |  7 +---
 2 files changed, 50 insertions(+), 26 deletions(-)

diff --git a/libavformat/matroskasem.c b/libavformat/matroskasem.c
index 0f4455058a..cdef0dbff4 100644
--- a/libavformat/matroskasem.c
+++ b/libavformat/matroskasem.c
@@ -37,6 +37,35 @@
 
 #define CHILD_OF(parent) { .def = { .n = parent } }
 
+// The following forward declarations need their size because
+// a tentative definition with internal linkage must not be an
+// incomplete type (6.7.2 in C90, 6.9.2 in C99).
+// Removing the sizes breaks MSVC.
+static EbmlSyntax matroska_seekhead[2];
+static EbmlSyntax matroska_info[8];
+static EbmlSyntax matroska_blockadditions[2];
+// static EbmlSyntax matroska_blockgroup[8];
+// static EbmlSyntax matroska_cluster_parsing[8];
+static EbmlSyntax matroska_track_video_color[15];
+static EbmlSyntax matroska_track_video[19];
+static EbmlSyntax matroska_track_combine_planes[2];
+static EbmlSyntax matroska_track_operation[2];
+static EbmlSyntax matroska_track_encoding_encryption[8];
+static EbmlSyntax matroska_track_encoding[6];
+static EbmlSyntax matroska_track_encodings[2];
+static EbmlSyntax matroska_track[33];
+static EbmlSyntax matroska_tracks[2];
+static EbmlSyntax matroska_index_pos[6];
+static EbmlSyntax matroska_index_entry[3];
+static EbmlSyntax matroska_index[2];
+static EbmlSyntax matroska_attachments[2];
+static EbmlSyntax matroska_chapter_entry[9];
+static EbmlSyntax matroska_chapter[6];
+static EbmlSyntax matroska_chapters[2];
+static EbmlSyntax matroska_tag[3];
+static EbmlSyntax matroska_tags[2];
+
+
 static EbmlSyntax ebml_header[] = {
     { EBML_ID_EBMLREADVERSION,    EBML_UINT, 0, 0, offsetof(Ebml, version),         { .u = EBML_VERSION } },
     { EBML_ID_EBMLMAXSIZELENGTH,  EBML_UINT, 0, 0, offsetof(Ebml, max_size),        { .u = 8 } },
@@ -77,7 +106,7 @@ static EbmlSyntax matroska_mastering_meta[] = {
     CHILD_OF(matroska_track_video_color)
 };
 
-EbmlSyntax matroska_track_video_color[] = {
+static EbmlSyntax matroska_track_video_color[] = {
     { MATROSKA_ID_VIDEOCOLORMATRIXCOEFF,      EBML_UINT,  0, 0, offsetof(MatroskaTrackVideoColor, matrix_coefficients), { .u = AVCOL_SPC_UNSPECIFIED } },
     { MATROSKA_ID_VIDEOCOLORBITSPERCHANNEL,   EBML_UINT,  0, 0, offsetof(MatroskaTrackVideoColor, bits_per_channel) },
     { MATROSKA_ID_VIDEOCOLORCHROMASUBHORZ,    EBML_UINT,  0, 0, offsetof(MatroskaTrackVideoColor, chroma_sub_horz) },
@@ -95,7 +124,7 @@ EbmlSyntax matroska_track_video_color[] = {
     CHILD_OF(matroska_track_video)
 };
 
-EbmlSyntax matroska_track_video[] = {
+static EbmlSyntax matroska_track_video[] = {
     { MATROSKA_ID_VIDEOFRAMERATE,             EBML_FLOAT, 0, 0, offsetof(MatroskaTrackVideo, frame_rate) },
     { MATROSKA_ID_VIDEODISPLAYWIDTH,          EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, display_width), { .u = -1 } },
     { MATROSKA_ID_VIDEODISPLAYHEIGHT,         EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, display_height), { .u = -1 } },
@@ -117,18 +146,18 @@ EbmlSyntax matroska_track_video[] = {
     CHILD_OF(matroska_track)
 };
 
-EbmlSyntax matroska_track_plane[] = {
+static EbmlSyntax matroska_track_plane[] = {
     { MATROSKA_ID_TRACKPLANEUID,              EBML_UINT,  0, 0, offsetof(MatroskaTrackPlane, uid) },
     { MATROSKA_ID_TRACKPLANETYPE,             EBML_UINT,  0, 0, offsetof(MatroskaTrackPlane, type) },
     CHILD_OF(matroska_track_combine_planes)
 };
 
-EbmlSyntax matroska_track_combine_planes[] = {
+static EbmlSyntax matroska_track_combine_planes[] = {
     { MATROSKA_ID_TRACKPLANE,                 EBML_NEST,  0, sizeof(MatroskaTrackPlane), offsetof(MatroskaTrackOperation, combine_planes), { .n = matroska_track_plane } },
     CHILD_OF(matroska_track_operation)
 };
 
-EbmlSyntax matroska_track_operation[] = {
+static EbmlSyntax matroska_track_operation[] = {
     { MATROSKA_ID_TRACKCOMBINEPLANES,         EBML_NEST,  0, 0, 0, { .n = matroska_track_combine_planes } },
     CHILD_OF(matroska_track)
 };
@@ -150,7 +179,7 @@ static EbmlSyntax matroska_track_encoding_compression[] = {
     CHILD_OF(matroska_track_encoding)
 };
 
-EbmlSyntax matroska_track_encoding[] = {
+static EbmlSyntax matroska_track_encoding[] = {
     { MATROSKA_ID_ENCODINGSCOPE,              EBML_UINT,  0, 0, offsetof(MatroskaTrackEncoding, scope), { .u = 1 } },
     { MATROSKA_ID_ENCODINGTYPE,               EBML_UINT,  0, 0, offsetof(MatroskaTrackEncoding, type) },
     { MATROSKA_ID_ENCODINGCOMPRESSION,        EBML_NEST,  0, 0, offsetof(MatroskaTrackEncoding, compression), { .n = matroska_track_encoding_compression } },
@@ -159,12 +188,12 @@ EbmlSyntax matroska_track_encoding[] = {
     CHILD_OF(matroska_track_encodings)
 };
 
-EbmlSyntax matroska_track_encodings[] = {
+static EbmlSyntax matroska_track_encodings[] = {
     { MATROSKA_ID_TRACKCONTENTENCODING,       EBML_NEST,  0, sizeof(MatroskaTrackEncoding), offsetof(MatroskaTrack, encodings), { .n = matroska_track_encoding } },
     CHILD_OF(matroska_track)
 };
 
-EbmlSyntax matroska_block_addition_mapping[] = {
+static EbmlSyntax matroska_block_addition_mapping[] = {
     { MATROSKA_ID_BLKADDIDNAME,               EBML_STR,   0, 0, offsetof(MatroskaBlockAdditionMapping, name) },
     { MATROSKA_ID_BLKADDIDTYPE,               EBML_UINT,  0, 0, offsetof(MatroskaBlockAdditionMapping, type) },
     { MATROSKA_ID_BLKADDIDEXTRADATA,          EBML_BIN,   0, 0, offsetof(MatroskaBlockAdditionMapping, extradata) },
@@ -180,7 +209,7 @@ static EbmlSyntax matroska_track_audio[] = {
     CHILD_OF(matroska_track)
 };
 
-EbmlSyntax matroska_track[] = {
+static EbmlSyntax matroska_track[] = {
     { MATROSKA_ID_TRACKNUMBER,                EBML_UINT,  0, 0, offsetof(MatroskaTrack, num) },
     { MATROSKA_ID_TRACKNAME,                  EBML_UTF8,  0, 0, offsetof(MatroskaTrack, name) },
     { MATROSKA_ID_TRACKUID,                   EBML_UINT,  0, 0, offsetof(MatroskaTrack, uid) },
@@ -216,7 +245,7 @@ EbmlSyntax matroska_track[] = {
     CHILD_OF(matroska_tracks)
 };
 
-EbmlSyntax matroska_tracks[] = {
+static EbmlSyntax matroska_tracks[] = {
     { MATROSKA_ID_TRACKENTRY,                 EBML_NEST,  0, sizeof(MatroskaTrack), offsetof(MatroskaDemuxContext, tracks), { .n = matroska_track } },
     CHILD_OF(matroska_segment)
 };
@@ -240,13 +269,13 @@ static EbmlSyntax matroska_simpletag[] = {
     CHILD_OF(matroska_tag)
 };
 
-EbmlSyntax matroska_tag[] = {
+static EbmlSyntax matroska_tag[] = {
     { MATROSKA_ID_SIMPLETAG,                  EBML_NEST,  0, sizeof(MatroskaTag), offsetof(MatroskaTags, tag), { .n = matroska_simpletag } },
     { MATROSKA_ID_TAGTARGETS,                 EBML_NEST,  0, 0, offsetof(MatroskaTags, target), { .n = matroska_tagtargets } },
     CHILD_OF(matroska_tags)
 };
 
-EbmlSyntax matroska_tags[] = {
+static EbmlSyntax matroska_tags[] = {
     { MATROSKA_ID_TAG,                        EBML_NEST,  0, sizeof(MatroskaTags), offsetof(MatroskaDemuxContext, tags), { .n = matroska_tag } },
     CHILD_OF(matroska_segment)
 };
@@ -257,7 +286,7 @@ static EbmlSyntax matroska_seekhead_entry[] = {
     CHILD_OF(matroska_seekhead)
 };
 
-EbmlSyntax matroska_seekhead[] = {
+static EbmlSyntax matroska_seekhead[] = {
     { MATROSKA_ID_SEEKENTRY,                  EBML_NEST,  0, sizeof(MatroskaSeekhead), offsetof(MatroskaDemuxContext, seekhead), { .n = matroska_seekhead_entry } },
     CHILD_OF(matroska_segment)
 };
@@ -282,13 +311,13 @@ static EbmlSyntax matroska_index_pos[] = {
     CHILD_OF(matroska_index_entry)
 };
 
-EbmlSyntax matroska_index_entry[] = {
+static EbmlSyntax matroska_index_entry[] = {
     { MATROSKA_ID_CUETIME,                    EBML_UINT,  0, 0, offsetof(MatroskaIndex, time) },
     { MATROSKA_ID_CUETRACKPOSITION,           EBML_NEST,  0, sizeof(MatroskaIndexPos), offsetof(MatroskaIndex, pos), { .n = matroska_index_pos } },
     CHILD_OF(matroska_index)
 };
 
-EbmlSyntax matroska_index[] = {
+static EbmlSyntax matroska_index[] = {
     { MATROSKA_ID_POINTENTRY,                 EBML_NEST,  0, sizeof(MatroskaIndex), offsetof(MatroskaDemuxContext, index), { .n = matroska_index_entry } },
     CHILD_OF(matroska_segment)
 };
@@ -299,7 +328,7 @@ static EbmlSyntax matroska_blockmore[] = {
     CHILD_OF(matroska_blockadditions)
 };
 
-EbmlSyntax matroska_blockadditions[] = {
+static EbmlSyntax matroska_blockadditions[] = {
     { MATROSKA_ID_BLOCKMORE,                  EBML_NEST,  0, 0, 0, { .n = matroska_blockmore } },
     CHILD_OF(matroska_blockgroup)
 };
@@ -335,7 +364,7 @@ static EbmlSyntax matroska_chapter_display[] = {
     CHILD_OF(matroska_chapter_entry)
 };
 
-EbmlSyntax matroska_chapter_entry[] = {
+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) },
@@ -347,7 +376,7 @@ EbmlSyntax matroska_chapter_entry[] = {
     CHILD_OF(matroska_chapter)
 };
 
-EbmlSyntax matroska_chapter[] = {
+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_EDITIONFLAGDEFAULT,         EBML_NONE },
@@ -356,7 +385,7 @@ EbmlSyntax matroska_chapter[] = {
     CHILD_OF(matroska_chapters)
 };
 
-EbmlSyntax matroska_chapters[] = {
+static EbmlSyntax matroska_chapters[] = {
     { MATROSKA_ID_EDITIONENTRY,               EBML_NEST,  0, 0, 0, { .n = matroska_chapter } },
     CHILD_OF(matroska_segment)
 };
@@ -370,7 +399,7 @@ static EbmlSyntax matroska_attachment[] = {
     CHILD_OF(matroska_attachments)
 };
 
-EbmlSyntax matroska_attachments[] = {
+static EbmlSyntax matroska_attachments[] = {
     { MATROSKA_ID_ATTACHEDFILE,               EBML_NEST,  0, sizeof(MatroskaAttachment), offsetof(MatroskaDemuxContext, attachments), { .n = matroska_attachment } },
     CHILD_OF(matroska_segment)
 };
diff --git a/libavformat/matroskasem.h b/libavformat/matroskasem.h
index 01008b00bb..55ce97ef7a 100644
--- a/libavformat/matroskasem.h
+++ b/libavformat/matroskasem.h
@@ -381,12 +381,7 @@ typedef struct MatroskaDemuxContext {
 // a tentative definition with internal linkage must not be an
 // incomplete type (6.7.2 in C90, 6.9.2 in C99).
 // Removing the sizes breaks MSVC.
-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_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];
+EbmlSyntax ebml_syntax[3], matroska_segment[9], matroska_blockgroup[8], matroska_cluster_parsing[8];
 
 EbmlSyntax matroska_segments[2];
 EbmlSyntax matroska_cluster_enter[2];
-- 
2.20.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] 13+ messages in thread

* [FFmpeg-devel] [PATCH 12/12] avformat/matroska: add missing elements
  2022-11-06 15:08 [FFmpeg-devel] [PATCH 00/12] Use generated semantic for Matroska demuxer Steve Lhomme
                   ` (10 preceding siblings ...)
  2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 11/12] avformat/matroska: only export a few elements Steve Lhomme
@ 2022-11-06 15:08 ` Steve Lhomme
  11 siblings, 0 replies; 13+ messages in thread
From: Steve Lhomme @ 2022-11-06 15:08 UTC (permalink / raw)
  To: ffmpeg-devel

They are not mapped into structures but the IDs and their allowed position is
set properly.
---
 libavformat/matroska_ids.h | 93 ++++++++++++++++++++++++++++++++++++++
 libavformat/matroskasem.c  | 58 +++++++++++++++++++++---
 libavformat/matroskasem.h  |  2 +-
 3 files changed, 145 insertions(+), 8 deletions(-)

diff --git a/libavformat/matroska_ids.h b/libavformat/matroska_ids.h
index 59dda4da9d..365ee05ad6 100644
--- a/libavformat/matroska_ids.h
+++ b/libavformat/matroska_ids.h
@@ -41,6 +41,13 @@
 
 /* IDs in the info master */
 #define MATROSKA_ID_TIMECODESCALE       0x2AD7B1
+#define MATROSKA_ID_SEGMENTFILENAME     0x7384
+#define MATROSKA_ID_PREVUID             0x3CB923
+#define MATROSKA_ID_PREVFILENAME        0x3C83AB
+#define MATROSKA_ID_NEXTUID             0x3EB923
+#define MATROSKA_ID_NEXTFILENAME        0x3E83BB
+#define MATROSKA_ID_SEGMENTFAMILY       0x4444
+#define MATROSKA_ID_CHAPTERTRANSLATE    0x6924
 #define MATROSKA_ID_DURATION            0x4489
 #define MATROSKA_ID_TITLE               0x7BA9
 #define MATROSKA_ID_WRITINGAPP          0x5741
@@ -48,6 +55,11 @@
 #define MATROSKA_ID_DATEUTC             0x4461
 #define MATROSKA_ID_SEGMENTUID          0x73A4
 
+/* IDs in the chaptertranslate master */
+#define MATROSKA_ID_CHAPTERTRANSLATEID  0x69A5
+#define MATROSKA_ID_CHAPTERTRANSLATECODEC  0x69BF
+#define MATROSKA_ID_CHAPTERTRANSLATEEDITIONUID  0x69FC
+
 /* IDs in the tracks master */
 #define MATROSKA_ID_TRACKENTRY          0xAE
 
@@ -63,19 +75,31 @@
 #define MATROSKA_ID_TRACKFLAGTEXTDESCRIPTIONS  0x55AD
 #define MATROSKA_ID_TRACKFLAGORIGINAL   0x55AE
 #define MATROSKA_ID_TRACKFLAGCOMMENTARY  0x55AF
+#define MATROSKA_ID_TRACKDEFAULTDECODEDFIELDDURATION  0x234E7A
 #define MATROSKA_ID_TRACKTIMECODESCALE  0x23314F
+#define MATROSKA_ID_TRACKOFFSET         0x537F
 #define MATROSKA_ID_TRACKMAXBLKADDID    0x55EE
 #define MATROSKA_ID_TRACKBLKADDMAPPING  0x41E4
 #define MATROSKA_ID_TRACKNAME           0x536E
 #define MATROSKA_ID_TRACKLANGUAGE       0x22B59C
+#define MATROSKA_ID_TRACKLANGUAGEIETF   0x22B59D
 #define MATROSKA_ID_CODECID             0x86
 #define MATROSKA_ID_CODECPRIVATE        0x63A2
 #define MATROSKA_ID_CODECNAME           0x258688
+#define MATROSKA_ID_TRACKATTACHMENTLINK  0x7446
+#define MATROSKA_ID_CODECSETTINGS       0x3A9697
 #define MATROSKA_ID_CODECINFOURL        0x3B4040
 #define MATROSKA_ID_CODECDOWNLOADURL    0x26B240
 #define MATROSKA_ID_CODECDECODEALL      0xAA
+#define MATROSKA_ID_TRACKOVERLAY        0x6FAB
 #define MATROSKA_ID_CODECDELAY          0x56AA
 #define MATROSKA_ID_SEEKPREROLL         0x56BB
+#define MATROSKA_ID_TRACKTRANSLATE      0x6624
+#define MATROSKA_ID_TRICKTRACKUID       0xC0
+#define MATROSKA_ID_TRICKTRACKSEGMENTUID  0xC1
+#define MATROSKA_ID_TRICKTRACKFLAG      0xC6
+#define MATROSKA_ID_TRICKMASTERTRACKUID  0xC7
+#define MATROSKA_ID_TRICKMASTERTRACKSEGMENTUID  0xC4
 #define MATROSKA_ID_TRACKFLAGENABLED    0xB9
 #define MATROSKA_ID_TRACKFLAGDEFAULT    0x88
 #define MATROSKA_ID_TRACKFLAGFORCED     0x55AA
@@ -115,9 +139,11 @@
 #define MATROSKA_ID_ENCODINGSIGNATURE   0x47E3
 
 /* IDs in the contentencaessettings master */
+#define MATROSKA_ID_TRACKAESSETTINGSCIPHERMODE  0x47E8
 
 /* IDs in the trackoperation master */
 #define MATROSKA_ID_TRACKCOMBINEPLANES  0xE3
+#define MATROSKA_ID_TRACKJOINBLOCKS     0xE9
 
 /* IDs in the trackcombineplanes master */
 #define MATROSKA_ID_TRACKPLANE          0xE4
@@ -126,6 +152,14 @@
 #define MATROSKA_ID_TRACKPLANEUID       0xE5
 #define MATROSKA_ID_TRACKPLANETYPE      0xE6
 
+/* IDs in the trackjoinblocks master */
+#define MATROSKA_ID_TRACKJOINUID        0xED
+
+/* IDs in the tracktranslate master */
+#define MATROSKA_ID_TRACKTRANSLATETRACKID  0x66A5
+#define MATROSKA_ID_TRACKTRANSLATECODEC  0x66BF
+#define MATROSKA_ID_TRACKTRANSLATEEDITIONUID  0x66FC
+
 /* IDs in the trackvideo master */
 #define MATROSKA_ID_VIDEOFRAMERATE      0x2383E3
 #define MATROSKA_ID_VIDEODISPLAYWIDTH   0x54B0
@@ -141,8 +175,10 @@
 #define MATROSKA_ID_VIDEOFIELDORDER     0x9D
 #define MATROSKA_ID_VIDEOSTEREOMODE     0x53B8
 #define MATROSKA_ID_VIDEOALPHAMODE      0x53C0
+#define MATROSKA_ID_VIDEOOLDSTEREOMODE  0x53B9
 #define MATROSKA_ID_VIDEOASPECTRATIO    0x54B3
 #define MATROSKA_ID_VIDEOCOLORSPACE     0x2EB524
+#define MATROSKA_ID_VIDEOGAMMAVALUE     0x2FB523
 #define MATROSKA_ID_VIDEOCOLOR          0x55B0
 #define MATROSKA_ID_VIDEOPROJECTION     0x7670
 
@@ -184,6 +220,7 @@
 /* IDs in the trackaudio master */
 #define MATROSKA_ID_AUDIOSAMPLINGFREQ   0xB5
 #define MATROSKA_ID_AUDIOOUTSAMPLINGFREQ  0x78B5
+#define MATROSKA_ID_AUDIOCHANNELPOSITIONS  0x7D7B
 #define MATROSKA_ID_AUDIOBITDEPTH       0x6264
 #define MATROSKA_ID_AUDIOCHANNELS       0x9F
 
@@ -200,6 +237,14 @@
 #define MATROSKA_ID_CUERELATIVEPOSITION  0xF0
 #define MATROSKA_ID_CUEDURATION         0xB2
 #define MATROSKA_ID_CUEBLOCKNUMBER      0x5378
+#define MATROSKA_ID_CUECODECSTATE       0xEA
+#define MATROSKA_ID_CUEREFERENCE        0xDB
+
+/* IDs in the cuereference master */
+#define MATROSKA_ID_CUEREFTIME          0x96
+#define MATROSKA_ID_CUEREFCLUSTER       0x97
+#define MATROSKA_ID_CUEREFCODECSTATE    0xEB
+#define MATROSKA_ID_CUEREFNUMBER        0x535F
 
 /* IDs in the tags master */
 #define MATROSKA_ID_TAG                 0x7373
@@ -210,7 +255,9 @@
 
 /* IDs in the simpletag master */
 #define MATROSKA_ID_TAGLANG             0x447A
+#define MATROSKA_ID_TAGLANGUAGEIETF     0x447B
 #define MATROSKA_ID_TAGDEFAULT          0x4484
+#define MATROSKA_ID_TAGBINARY           0x4485
 #define MATROSKA_ID_TAGSTRING           0x4487
 #define MATROSKA_ID_TAGDEFAULT_BUG      0x44B4
 #define MATROSKA_ID_TAGNAME             0x45A3
@@ -219,6 +266,7 @@
 #define MATROSKA_ID_TAGTARGETS_TYPE     0x63CA
 #define MATROSKA_ID_TAGTARGETS_TYPEVALUE  0x68CA
 #define MATROSKA_ID_TAGTARGETS_TRACKUID  0x63C5
+#define MATROSKA_ID_TAGEDITIONUID       0x63C9
 #define MATROSKA_ID_TAGTARGETS_CHAPTERUID  0x63C4
 #define MATROSKA_ID_TAGTARGETS_ATTACHUID  0x63C6
 
@@ -231,21 +279,31 @@
 #define MATROSKA_ID_FILEMIMETYPE        0x4660
 #define MATROSKA_ID_FILEDATA            0x465C
 #define MATROSKA_ID_FILEUID             0x46AE
+#define MATROSKA_ID_FILEREFERRAL        0x4675
+#define MATROSKA_ID_FILEUSEDSTARTTIME   0x4661
+#define MATROSKA_ID_FILEUSEDENDTIME     0x4662
 
 /* IDs in the cluster master */
 #define MATROSKA_ID_CLUSTERTIMECODE     0xE7
+#define MATROSKA_ID_SILENTTRACKS        0x5854
 #define MATROSKA_ID_CLUSTERPOSITION     0xA7
 #define MATROSKA_ID_CLUSTERPREVSIZE     0xAB
 #define MATROSKA_ID_BLOCKGROUP          0xA0
+#define MATROSKA_ID_ENCRYPTEDBLOCK      0xAF
 #define MATROSKA_ID_SIMPLEBLOCK         0xA3
 
 /* IDs in the blockgroup master */
 #define MATROSKA_ID_BLOCK               0xA1
+#define MATROSKA_ID_BLOCKVIRTUAL        0xA2
 #define MATROSKA_ID_BLOCKADDITIONS      0x75A1
 #define MATROSKA_ID_BLOCKDURATION       0x9B
+#define MATROSKA_ID_REFERENCEPRIORITY   0xFA
 #define MATROSKA_ID_BLOCKREFERENCE      0xFB
+#define MATROSKA_ID_REFERENCEVIRTUAL    0xFD
 #define MATROSKA_ID_CODECSTATE          0xA4
 #define MATROSKA_ID_DISCARDPADDING      0x75A2
+#define MATROSKA_ID_SLICES              0x8E
+#define MATROSKA_ID_REFERENCEFRAME      0xC8
 
 /* IDs in the blockadditions master */
 #define MATROSKA_ID_BLOCKMORE           0xA6
@@ -254,6 +312,23 @@
 #define MATROSKA_ID_BLOCKADDID          0xEE
 #define MATROSKA_ID_BLOCKADDITIONAL     0xA5
 
+/* IDs in the referenceframe master */
+#define MATROSKA_ID_REFERENCEOFFSET     0xC9
+#define MATROSKA_ID_REFERENCETIMESTAMP  0xCA
+
+/* IDs in the slices master */
+#define MATROSKA_ID_TIMESLICE           0xE8
+
+/* IDs in the timeslice master */
+#define MATROSKA_ID_BLOCKADDITIONID     0xCB
+#define MATROSKA_ID_LACENUMBER          0xCC
+#define MATROSKA_ID_FRAMENUMBER         0xCD
+#define MATROSKA_ID_DELAY               0xCE
+#define MATROSKA_ID_SLICEDURATION       0xCF
+
+/* IDs in the silenttracks master */
+#define MATROSKA_ID_SILENTTRACKNUMBER   0x58D7
+
 /* IDs in the seekhead master */
 #define MATROSKA_ID_SEEKENTRY           0x4DBB
 
@@ -273,18 +348,36 @@
 
 /* IDs in the chapteratom master */
 #define MATROSKA_ID_CHAPTERUID          0x73C4
+#define MATROSKA_ID_CHAPTERSTRINGUID    0x5654
 #define MATROSKA_ID_CHAPTERTIMESTART    0x91
 #define MATROSKA_ID_CHAPTERTIMEEND      0x92
 #define MATROSKA_ID_CHAPTERFLAGHIDDEN   0x98
+#define MATROSKA_ID_CHAPTERSEGMENTUID   0x6E67
+#define MATROSKA_ID_CHAPTERSEGMENTEDITIONUID  0x6EBC
 #define MATROSKA_ID_CHAPTERPHYSEQUIV    0x63C3
 #define MATROSKA_ID_CHAPTERDISPLAY      0x80
+#define MATROSKA_ID_CHAPPROCESS         0x6944
 #define MATROSKA_ID_CHAPTERFLAGENABLED  0x4598
+#define MATROSKA_ID_CHAPTERTRACK        0x8F
+
+/* IDs in the chapprocess master */
+#define MATROSKA_ID_CHAPPROCESSPRIVATE  0x450D
+#define MATROSKA_ID_CHAPPROCESSCOMMAND  0x6911
+#define MATROSKA_ID_CHAPPROCESSCODECID  0x6955
+
+/* IDs in the chapprocesscommand master */
+#define MATROSKA_ID_CHAPPROCESSTIME     0x6922
+#define MATROSKA_ID_CHAPPROCESSDATA     0x6933
 
 /* IDs in the chapterdisplay master */
 #define MATROSKA_ID_CHAPSTRING          0x85
 #define MATROSKA_ID_CHAPLANG            0x437C
+#define MATROSKA_ID_CHAPLANGUAGEIETF    0x437D
 #define MATROSKA_ID_CHAPCOUNTRY         0x437E
 
+/* IDs in the chaptertrack master */
+#define MATROSKA_ID_CHAPTERTRACKUID     0x89
+
 typedef enum {
   MATROSKA_TRACK_TYPE_NONE     = 0x0,
   MATROSKA_TRACK_TYPE_VIDEO    = 0x1,
diff --git a/libavformat/matroskasem.c b/libavformat/matroskasem.c
index cdef0dbff4..0ebcee27f7 100644
--- a/libavformat/matroskasem.c
+++ b/libavformat/matroskasem.c
@@ -42,24 +42,24 @@
 // incomplete type (6.7.2 in C90, 6.9.2 in C99).
 // Removing the sizes breaks MSVC.
 static EbmlSyntax matroska_seekhead[2];
-static EbmlSyntax matroska_info[8];
+static EbmlSyntax matroska_info[15];
 static EbmlSyntax matroska_blockadditions[2];
-// static EbmlSyntax matroska_blockgroup[8];
+// static EbmlSyntax matroska_blockgroup[13];
 // static EbmlSyntax matroska_cluster_parsing[8];
 static EbmlSyntax matroska_track_video_color[15];
-static EbmlSyntax matroska_track_video[19];
+static EbmlSyntax matroska_track_video[21];
 static EbmlSyntax matroska_track_combine_planes[2];
-static EbmlSyntax matroska_track_operation[2];
+static EbmlSyntax matroska_track_operation[3];
 static EbmlSyntax matroska_track_encoding_encryption[8];
 static EbmlSyntax matroska_track_encoding[6];
 static EbmlSyntax matroska_track_encodings[2];
-static EbmlSyntax matroska_track[33];
+static EbmlSyntax matroska_track[45];
 static EbmlSyntax matroska_tracks[2];
-static EbmlSyntax matroska_index_pos[6];
+static EbmlSyntax matroska_index_pos[8];
 static EbmlSyntax matroska_index_entry[3];
 static EbmlSyntax matroska_index[2];
 static EbmlSyntax matroska_attachments[2];
-static EbmlSyntax matroska_chapter_entry[9];
+static EbmlSyntax matroska_chapter_entry[14];
 static EbmlSyntax matroska_chapter[6];
 static EbmlSyntax matroska_chapters[2];
 static EbmlSyntax matroska_tag[3];
@@ -138,7 +138,9 @@ static EbmlSyntax matroska_track_video[] = {
     { MATROSKA_ID_VIDEOFLAGINTERLACED,        EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, interlaced), { .u = MATROSKA_VIDEO_INTERLACE_FLAG_UNDETERMINED } },
     { MATROSKA_ID_VIDEOFIELDORDER,            EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, field_order), { .u = MATROSKA_VIDEO_FIELDORDER_UNDETERMINED } },
     { MATROSKA_ID_VIDEOALPHAMODE,             EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, alpha_mode) },
+    { MATROSKA_ID_VIDEOOLDSTEREOMODE,         EBML_NONE },
     { MATROSKA_ID_VIDEOCOLORSPACE,            EBML_BIN,   0, 0, offsetof(MatroskaTrackVideo, color_space) },
+    { MATROSKA_ID_VIDEOGAMMAVALUE,            EBML_NONE },
     { MATROSKA_ID_VIDEOCOLOR,                 EBML_NEST,  0, sizeof(MatroskaTrackVideoColor), offsetof(MatroskaTrackVideo, color), { .n = matroska_track_video_color } },
     { MATROSKA_ID_VIDEOPROJECTION,            EBML_NEST,  0, 0, offsetof(MatroskaTrackVideo, projection), { .n = matroska_track_video_projection } },
     { MATROSKA_ID_VIDEOSTEREOMODE,            EBML_UINT,  0, 0, offsetof(MatroskaTrackVideo, stereo_mode), { .u = MATROSKA_VIDEO_STEREOMODE_TYPE_NB } },
@@ -159,6 +161,7 @@ static EbmlSyntax matroska_track_combine_planes[] = {
 
 static EbmlSyntax matroska_track_operation[] = {
     { MATROSKA_ID_TRACKCOMBINEPLANES,         EBML_NEST,  0, 0, 0, { .n = matroska_track_combine_planes } },
+    { MATROSKA_ID_TRACKJOINBLOCKS,            EBML_NONE },
     CHILD_OF(matroska_track)
 };
 
@@ -204,6 +207,7 @@ static EbmlSyntax matroska_block_addition_mapping[] = {
 static EbmlSyntax matroska_track_audio[] = {
     { MATROSKA_ID_AUDIOSAMPLINGFREQ,          EBML_FLOAT, 0, 0, offsetof(MatroskaTrackAudio, samplerate), { .f = 8000.0 } },
     { MATROSKA_ID_AUDIOOUTSAMPLINGFREQ,       EBML_FLOAT, 0, 0, offsetof(MatroskaTrackAudio, out_samplerate) },
+    { MATROSKA_ID_AUDIOCHANNELPOSITIONS,      EBML_NONE },
     { MATROSKA_ID_AUDIOBITDEPTH,              EBML_UINT,  0, 0, offsetof(MatroskaTrackAudio, bitdepth) },
     { MATROSKA_ID_AUDIOCHANNELS,              EBML_UINT,  0, 0, offsetof(MatroskaTrackAudio, channels), { .u = 1 } },
     CHILD_OF(matroska_track)
@@ -233,14 +237,26 @@ static EbmlSyntax matroska_track[] = {
     { MATROSKA_ID_TRACKFLAGLACING,            EBML_NONE },
     { MATROSKA_ID_TRACKMINCACHE,              EBML_NONE },
     { MATROSKA_ID_TRACKMAXCACHE,              EBML_NONE },
+    { MATROSKA_ID_TRACKDEFAULTDECODEDFIELDDURATION, EBML_NONE },
+    { MATROSKA_ID_TRACKOFFSET,                EBML_NONE },
     { MATROSKA_ID_TRACKMAXBLKADDID,           EBML_UINT,  0, 0, offsetof(MatroskaTrack, max_block_additional_id) },
     { MATROSKA_ID_TRACKBLKADDMAPPING,         EBML_NEST,  0, sizeof(MatroskaBlockAdditionMapping), offsetof(MatroskaTrack, block_addition_mappings), { .n = matroska_block_addition_mapping } },
+    { MATROSKA_ID_TRACKLANGUAGEIETF,          EBML_NONE },
     { MATROSKA_ID_CODECNAME,                  EBML_NONE },
+    { MATROSKA_ID_TRACKATTACHMENTLINK,        EBML_NONE },
+    { MATROSKA_ID_CODECSETTINGS,              EBML_NONE },
     { MATROSKA_ID_CODECINFOURL,               EBML_NONE },
     { MATROSKA_ID_CODECDOWNLOADURL,           EBML_NONE },
     { MATROSKA_ID_CODECDECODEALL,             EBML_NONE },
+    { MATROSKA_ID_TRACKOVERLAY,               EBML_NONE },
     { MATROSKA_ID_SEEKPREROLL,                EBML_UINT,  0, 0, offsetof(MatroskaTrack, seek_preroll) },
+    { MATROSKA_ID_TRACKTRANSLATE,             EBML_NONE },
     { MATROSKA_ID_TRACKOPERATION,             EBML_NEST,  0, 0, offsetof(MatroskaTrack, operation), { .n = matroska_track_operation } },
+    { MATROSKA_ID_TRICKTRACKUID,              EBML_NONE },
+    { MATROSKA_ID_TRICKTRACKSEGMENTUID,       EBML_NONE },
+    { MATROSKA_ID_TRICKTRACKFLAG,             EBML_NONE },
+    { MATROSKA_ID_TRICKMASTERTRACKUID,        EBML_NONE },
+    { MATROSKA_ID_TRICKMASTERTRACKSEGMENTUID, EBML_NONE },
     { MATROSKA_ID_TRACKCONTENTENCODINGS,      EBML_NEST,  0, 0, 0, { .n = matroska_track_encodings } },
     CHILD_OF(matroska_tracks)
 };
@@ -254,6 +270,7 @@ static EbmlSyntax matroska_tagtargets[] = {
     { MATROSKA_ID_TAGTARGETS_TYPE,            EBML_STR,   0, 0, offsetof(MatroskaTagTarget, type) },
     { MATROSKA_ID_TAGTARGETS_TYPEVALUE,       EBML_UINT,  0, 0, offsetof(MatroskaTagTarget, typevalue), { .u = 50 } },
     { MATROSKA_ID_TAGTARGETS_TRACKUID,        EBML_UINT,  0, 0, offsetof(MatroskaTagTarget, trackuid) },
+    { MATROSKA_ID_TAGEDITIONUID,              EBML_NONE },
     { MATROSKA_ID_TAGTARGETS_CHAPTERUID,      EBML_UINT,  0, 0, offsetof(MatroskaTagTarget, chapteruid) },
     { MATROSKA_ID_TAGTARGETS_ATTACHUID,       EBML_UINT,  0, 0, offsetof(MatroskaTagTarget, attachuid) },
     CHILD_OF(matroska_tag)
@@ -263,7 +280,9 @@ static EbmlSyntax matroska_simpletag[] = {
     { MATROSKA_ID_TAGNAME,                    EBML_UTF8,  0, 0, offsetof(MatroskaTag, name) },
     { MATROSKA_ID_TAGSTRING,                  EBML_UTF8,  0, 0, offsetof(MatroskaTag, string) },
     { MATROSKA_ID_TAGLANG,                    EBML_STR,   0, 0, offsetof(MatroskaTag, lang), { .s = "und" } },
+    { MATROSKA_ID_TAGLANGUAGEIETF,            EBML_NONE },
     { MATROSKA_ID_TAGDEFAULT,                 EBML_UINT,  0, 0, offsetof(MatroskaTag, def), { .u = 1 } },
+    { MATROSKA_ID_TAGBINARY,                  EBML_NONE },
     { MATROSKA_ID_TAGDEFAULT_BUG,             EBML_UINT,  0, 0, offsetof(MatroskaTag, def), { .u = 1 } },
     { MATROSKA_ID_SIMPLETAG,                  EBML_NEST,  0, sizeof(MatroskaTag), offsetof(MatroskaTag, sub), { .n = matroska_simpletag } },
     CHILD_OF(matroska_tag)
@@ -293,6 +312,13 @@ static EbmlSyntax matroska_seekhead[] = {
 
 static EbmlSyntax matroska_info[] = {
     { MATROSKA_ID_TIMECODESCALE,              EBML_UINT,  0, 0, offsetof(MatroskaDemuxContext, time_scale), { .u = 1000000 } },
+    { MATROSKA_ID_SEGMENTFILENAME,            EBML_NONE },
+    { MATROSKA_ID_PREVUID,                    EBML_NONE },
+    { MATROSKA_ID_PREVFILENAME,               EBML_NONE },
+    { MATROSKA_ID_NEXTUID,                    EBML_NONE },
+    { MATROSKA_ID_NEXTFILENAME,               EBML_NONE },
+    { MATROSKA_ID_SEGMENTFAMILY,              EBML_NONE },
+    { MATROSKA_ID_CHAPTERTRANSLATE,           EBML_NONE },
     { 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 },
@@ -308,6 +334,8 @@ static EbmlSyntax matroska_index_pos[] = {
     { MATROSKA_ID_CUERELATIVEPOSITION,        EBML_NONE },
     { MATROSKA_ID_CUEDURATION,                EBML_NONE },
     { MATROSKA_ID_CUEBLOCKNUMBER,             EBML_NONE },
+    { MATROSKA_ID_CUECODECSTATE,              EBML_NONE },
+    { MATROSKA_ID_CUEREFERENCE,               EBML_NONE },
     CHILD_OF(matroska_index_entry)
 };
 
@@ -338,8 +366,13 @@ EbmlSyntax matroska_blockgroup[] = {
     { MATROSKA_ID_BLOCKADDITIONS,             EBML_NEST,  0, 0, 0, { .n = matroska_blockadditions } },
     { MATROSKA_ID_BLOCKDURATION,              EBML_UINT,  0, 0, offsetof(MatroskaBlock, duration) },
     { MATROSKA_ID_DISCARDPADDING,             EBML_SINT,  0, 0, offsetof(MatroskaBlock, discard_padding) },
+    { MATROSKA_ID_BLOCKVIRTUAL,               EBML_NONE },
+    { MATROSKA_ID_REFERENCEPRIORITY,          EBML_NONE },
     { MATROSKA_ID_BLOCKREFERENCE,             EBML_SINT,  1, 0, offsetof(MatroskaBlock, reference) },
+    { MATROSKA_ID_REFERENCEVIRTUAL,           EBML_NONE },
     { MATROSKA_ID_CODECSTATE,                 EBML_NONE },
+    { MATROSKA_ID_SLICES,                     EBML_NONE },
+    { MATROSKA_ID_REFERENCEFRAME,             EBML_NONE },
     {                                      1, EBML_UINT,  0, 0, offsetof(MatroskaBlock, non_simple), { .u = 1 } },
     CHILD_OF(matroska_cluster_parsing)
 };
@@ -350,8 +383,10 @@ EbmlSyntax matroska_cluster_parsing[] = {
     { MATROSKA_ID_SIMPLEBLOCK,                EBML_BIN,   0, 0, offsetof(MatroskaBlock, bin) },
     { MATROSKA_ID_BLOCKGROUP,                 EBML_NEST,  0, 0, 0, { .n = matroska_blockgroup } },
     { MATROSKA_ID_CLUSTERTIMECODE,            EBML_UINT,  0, 0, offsetof(MatroskaCluster, timecode) },
+    { MATROSKA_ID_SILENTTRACKS,               EBML_NONE },
     { MATROSKA_ID_CLUSTERPOSITION,            EBML_NONE },
     { MATROSKA_ID_CLUSTERPREVSIZE,            EBML_NONE },
+    { MATROSKA_ID_ENCRYPTEDBLOCK,             EBML_NONE },
     { MATROSKA_ID_SIMPLEBLOCK,                EBML_STOP },
     { MATROSKA_ID_BLOCKGROUP,                 EBML_STOP },
     CHILD_OF(matroska_segment)
@@ -360,6 +395,7 @@ EbmlSyntax matroska_cluster_parsing[] = {
 static EbmlSyntax matroska_chapter_display[] = {
     { MATROSKA_ID_CHAPSTRING,                 EBML_UTF8,  0, 0, offsetof(MatroskaChapter, title) },
     { MATROSKA_ID_CHAPLANG,                   EBML_NONE },
+    { MATROSKA_ID_CHAPLANGUAGEIETF,           EBML_NONE },
     { MATROSKA_ID_CHAPCOUNTRY,                EBML_NONE },
     CHILD_OF(matroska_chapter_entry)
 };
@@ -369,9 +405,14 @@ static EbmlSyntax matroska_chapter_entry[] = {
     { 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_CHAPTERSTRINGUID,           EBML_NONE },
     { MATROSKA_ID_CHAPTERFLAGHIDDEN,          EBML_NONE },
+    { MATROSKA_ID_CHAPTERSEGMENTUID,          EBML_NONE },
+    { MATROSKA_ID_CHAPTERSEGMENTEDITIONUID,   EBML_NONE },
     { MATROSKA_ID_CHAPTERPHYSEQUIV,           EBML_NONE },
+    { MATROSKA_ID_CHAPPROCESS,                EBML_NONE },
     { MATROSKA_ID_CHAPTERFLAGENABLED,         EBML_NONE },
+    { MATROSKA_ID_CHAPTERTRACK,               EBML_NONE },
     { MATROSKA_ID_CHAPTERATOM,                EBML_NONE },
     CHILD_OF(matroska_chapter)
 };
@@ -395,6 +436,9 @@ static EbmlSyntax matroska_attachment[] = {
     { MATROSKA_ID_FILENAME,                   EBML_UTF8,  0, 0, offsetof(MatroskaAttachment, filename) },
     { MATROSKA_ID_FILEMIMETYPE,               EBML_STR,   0, 0, offsetof(MatroskaAttachment, mime) },
     { MATROSKA_ID_FILEDATA,                   EBML_BIN,   0, 0, offsetof(MatroskaAttachment, bin) },
+    { MATROSKA_ID_FILEREFERRAL,               EBML_NONE },
+    { MATROSKA_ID_FILEUSEDSTARTTIME,          EBML_NONE },
+    { MATROSKA_ID_FILEUSEDENDTIME,            EBML_NONE },
     { MATROSKA_ID_FILEDESC,                   EBML_UTF8,  0, 0, offsetof(MatroskaAttachment, description) },
     CHILD_OF(matroska_attachments)
 };
diff --git a/libavformat/matroskasem.h b/libavformat/matroskasem.h
index 55ce97ef7a..3f30d6223c 100644
--- a/libavformat/matroskasem.h
+++ b/libavformat/matroskasem.h
@@ -381,7 +381,7 @@ typedef struct MatroskaDemuxContext {
 // a tentative definition with internal linkage must not be an
 // incomplete type (6.7.2 in C90, 6.9.2 in C99).
 // Removing the sizes breaks MSVC.
-EbmlSyntax ebml_syntax[3], matroska_segment[9], matroska_blockgroup[8], matroska_cluster_parsing[8];
+EbmlSyntax ebml_syntax[3], matroska_segment[9], matroska_blockgroup[13], matroska_cluster_parsing[10];
 
 EbmlSyntax matroska_segments[2];
 EbmlSyntax matroska_cluster_enter[2];
-- 
2.20.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] 13+ messages in thread

end of thread, other threads:[~2022-11-06 15:10 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-06 15:08 [FFmpeg-devel] [PATCH 00/12] Use generated semantic for Matroska demuxer Steve Lhomme
2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 01/12] avformat/matroskadec: fix the default of the TagDefault element Steve Lhomme
2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 02/12] avformat/matroskadec: remove some implicit default value Steve Lhomme
2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 03/12] avformat/matroska: use more consistent spacing in enums Steve Lhomme
2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 04/12] avformat/matroska: move Matroska IDs and enums in a separate header Steve Lhomme
2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 05/12] avformat/matroskadec: move the elements semantic in a separate file Steve Lhomme
2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 06/12] avformat/matroska_ids: move some IDs in separate sections Steve Lhomme
2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 07/12] avformat/matroska_ids: reorder some IDs to match the generated order Steve Lhomme
2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 08/12] avformat/matroskasem: reorder EbmlSyntax tables Steve Lhomme
2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 09/12] avformat/matroskasem: reorder some EbmlSyntax elements Steve Lhomme
2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 10/12] avformat/matroska: use the generated semantic files Steve Lhomme
2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 11/12] avformat/matroska: only export a few elements Steve Lhomme
2022-11-06 15:08 ` [FFmpeg-devel] [PATCH 12/12] avformat/matroska: add missing elements Steve Lhomme

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