diff mbox series

[FFmpeg-devel,12/12] avformat/matroska: add missing elements

Message ID 20221106150854.9528-13-robux4@ycbcr.xyz
State New
Headers show
Series Use generated semantic for Matroska demuxer | expand

Checks

Context Check Description
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Steve Lhomme Nov. 6, 2022, 3:08 p.m. UTC
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 mbox series

Patch

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];