summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libavformat/matroska.h16
-rw-r--r--libavformat/matroskadec.c33
2 files changed, 49 insertions, 0 deletions
diff --git a/libavformat/matroska.h b/libavformat/matroska.h
index 8930e16d3c..2e6aae2077 100644
--- a/libavformat/matroska.h
+++ b/libavformat/matroska.h
@@ -41,6 +41,7 @@
/* general EBML types */
#define EBML_ID_VOID 0xEC
+#define EBML_ID_CRC32 0xBF
/*
* Matroska element IDs, max. 32 bits
@@ -95,6 +96,7 @@
#define MATROSKA_ID_TRACKCONTENTENCODINGS 0x6D80
#define MATROSKA_ID_TRACKCONTENTENCODING 0x6240
#define MATROSKA_ID_TRACKTIMECODESCALE 0x23314F
+#define MATROSKA_ID_TRACKMAXBLKADDID 0x55EE
/* IDs in the trackvideo master */
#define MATROSKA_ID_VIDEOFRAMERATE 0x2383E3
@@ -102,6 +104,11 @@
#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_VIDEOSTEREOMODE 0x53B9
#define MATROSKA_ID_VIDEOASPECTRATIO 0x54B3
@@ -115,6 +122,7 @@
#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
@@ -131,6 +139,7 @@
/* IDs in the cuetrackposition master */
#define MATROSKA_ID_CUETRACK 0xF7
#define MATROSKA_ID_CUECLUSTERPOSITION 0xF1
+#define MATROSKA_ID_CUEBLOCKNUMBER 0x5378
/* IDs in the tags master */
#define MATROSKA_ID_TAG 0x7373
@@ -150,6 +159,8 @@
/* 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
@@ -160,6 +171,7 @@
/* 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
@@ -172,11 +184,15 @@
#define MATROSKA_ID_CHAPTERTIMEEND 0x92
#define MATROSKA_ID_CHAPTERDISPLAY 0x80
#define MATROSKA_ID_CHAPSTRING 0x85
+#define MATROSKA_ID_CHAPLANG 0x437C
#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,
diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
index b42da2699e..596ad80cbf 100644
--- a/libavformat/matroskadec.c
+++ b/libavformat/matroskadec.c
@@ -250,6 +250,7 @@ static EbmlSyntax matroska_info[] = {
{ MATROSKA_ID_MUXINGAPP, EBML_NONE },
{ MATROSKA_ID_DATEUTC, EBML_NONE },
{ MATROSKA_ID_SEGMENTUID, EBML_NONE },
+ { EBML_ID_CRC32, EBML_NONE },
{ EBML_ID_VOID, EBML_NONE },
{ 0 }
};
@@ -261,6 +262,11 @@ static EbmlSyntax matroska_track_video[] = {
{ MATROSKA_ID_VIDEOPIXELWIDTH, EBML_UINT, 0, offsetof(MatroskaTrackVideo,pixel_width) },
{ MATROSKA_ID_VIDEOPIXELHEIGHT, EBML_UINT, 0, offsetof(MatroskaTrackVideo,pixel_height) },
{ MATROSKA_ID_VIDEOCOLORSPACE, EBML_UINT, 0, offsetof(MatroskaTrackVideo,fourcc) },
+ { MATROSKA_ID_VIDEOPIXELCROPB, EBML_NONE },
+ { MATROSKA_ID_VIDEOPIXELCROPT, EBML_NONE },
+ { MATROSKA_ID_VIDEOPIXELCROPL, EBML_NONE },
+ { MATROSKA_ID_VIDEOPIXELCROPR, EBML_NONE },
+ { MATROSKA_ID_VIDEODISPLAYUNIT, EBML_NONE },
{ MATROSKA_ID_VIDEOFLAGINTERLACED,EBML_NONE },
{ MATROSKA_ID_VIDEOSTEREOMODE, EBML_NONE },
{ MATROSKA_ID_VIDEOASPECTRATIO, EBML_NONE },
@@ -288,6 +294,7 @@ static EbmlSyntax matroska_track_encoding[] = {
{ MATROSKA_ID_ENCODINGSCOPE, EBML_UINT, 0, offsetof(MatroskaTrackEncoding,scope), {.u=1} },
{ MATROSKA_ID_ENCODINGTYPE, EBML_UINT, 0, offsetof(MatroskaTrackEncoding,type), {.u=0} },
{ MATROSKA_ID_ENCODINGCOMPRESSION,EBML_NEST, 0, offsetof(MatroskaTrackEncoding,compression), {.n=matroska_track_encoding_compression} },
+ { MATROSKA_ID_ENCODINGORDER, EBML_NONE },
{ EBML_ID_VOID, EBML_NONE },
{ 0 }
};
@@ -321,12 +328,15 @@ static EbmlSyntax matroska_track[] = {
{ MATROSKA_ID_CODECDOWNLOADURL, EBML_NONE },
{ MATROSKA_ID_TRACKMINCACHE, EBML_NONE },
{ MATROSKA_ID_TRACKMAXCACHE, EBML_NONE },
+ { MATROSKA_ID_TRACKMAXBLKADDID, EBML_NONE },
+ { EBML_ID_CRC32, EBML_NONE },
{ EBML_ID_VOID, EBML_NONE },
{ 0 }
};
static EbmlSyntax matroska_tracks[] = {
{ MATROSKA_ID_TRACKENTRY, EBML_NEST, sizeof(MatroskaTrack), offsetof(MatroskaDemuxContext,tracks), {.n=matroska_track} },
+ { EBML_ID_CRC32, EBML_NONE },
{ EBML_ID_VOID, EBML_NONE },
{ 0 }
};
@@ -335,6 +345,7 @@ static EbmlSyntax matroska_attachment[] = {
{ MATROSKA_ID_FILENAME, EBML_UTF8, 0, offsetof(MatroskaAttachement,filename) },
{ MATROSKA_ID_FILEMIMETYPE, EBML_STR, 0, offsetof(MatroskaAttachement,mime) },
{ MATROSKA_ID_FILEDATA, EBML_BIN, 0, offsetof(MatroskaAttachement,bin) },
+ { MATROSKA_ID_FILEDESC, EBML_NONE },
{ MATROSKA_ID_FILEUID, EBML_NONE },
{ EBML_ID_VOID, EBML_NONE },
{ 0 }
@@ -342,12 +353,14 @@ static EbmlSyntax matroska_attachment[] = {
static EbmlSyntax matroska_attachments[] = {
{ MATROSKA_ID_ATTACHEDFILE, EBML_NEST, sizeof(MatroskaAttachement), offsetof(MatroskaDemuxContext,attachments), {.n=matroska_attachment} },
+ { EBML_ID_CRC32, EBML_NONE },
{ EBML_ID_VOID, EBML_NONE },
{ 0 }
};
static EbmlSyntax matroska_chapter_display[] = {
{ MATROSKA_ID_CHAPSTRING, EBML_UTF8, 0, offsetof(MatroskaChapter,title) },
+ { MATROSKA_ID_CHAPLANG, EBML_NONE },
{ EBML_ID_VOID, EBML_NONE },
{ 0 }
};
@@ -358,6 +371,10 @@ static EbmlSyntax matroska_chapter_entry[] = {
{ MATROSKA_ID_CHAPTERUID, EBML_UINT, 0, offsetof(MatroskaChapter,uid) },
{ MATROSKA_ID_CHAPTERDISPLAY, EBML_NEST, 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 },
+ { EBML_ID_CRC32, EBML_NONE },
{ EBML_ID_VOID, EBML_NONE },
{ 0 }
};
@@ -367,12 +384,15 @@ static EbmlSyntax matroska_chapter[] = {
{ MATROSKA_ID_EDITIONUID, EBML_NONE },
{ MATROSKA_ID_EDITIONFLAGHIDDEN, EBML_NONE },
{ MATROSKA_ID_EDITIONFLAGDEFAULT, EBML_NONE },
+ { MATROSKA_ID_EDITIONFLAGORDERED, EBML_NONE },
+ { EBML_ID_CRC32, EBML_NONE },
{ EBML_ID_VOID, EBML_NONE },
{ 0 }
};
static EbmlSyntax matroska_chapters[] = {
{ MATROSKA_ID_EDITIONENTRY, EBML_NEST, 0, 0, {.n=matroska_chapter} },
+ { EBML_ID_CRC32, EBML_NONE },
{ EBML_ID_VOID, EBML_NONE },
{ 0 }
};
@@ -380,6 +400,7 @@ static EbmlSyntax matroska_chapters[] = {
static EbmlSyntax matroska_index_pos[] = {
{ MATROSKA_ID_CUETRACK, EBML_UINT, 0, offsetof(MatroskaIndexPos,track) },
{ MATROSKA_ID_CUECLUSTERPOSITION, EBML_UINT, 0, offsetof(MatroskaIndexPos,pos) },
+ { MATROSKA_ID_CUEBLOCKNUMBER, EBML_NONE },
{ EBML_ID_VOID, EBML_NONE },
{ 0 }
};
@@ -393,6 +414,7 @@ static EbmlSyntax matroska_index_entry[] = {
static EbmlSyntax matroska_index[] = {
{ MATROSKA_ID_POINTENTRY, EBML_NEST, sizeof(MatroskaIndex), offsetof(MatroskaDemuxContext,index), {.n=matroska_index_entry} },
+ { EBML_ID_CRC32, EBML_NONE },
{ EBML_ID_VOID, EBML_NONE },
{ 0 }
};
@@ -403,6 +425,7 @@ static EbmlSyntax matroska_simpletag[] = {
{ MATROSKA_ID_SIMPLETAG, EBML_NEST, sizeof(MatroskaTag), offsetof(MatroskaTag,sub), {.n=matroska_simpletag} },
{ MATROSKA_ID_TAGLANG, EBML_NONE },
{ MATROSKA_ID_TAGDEFAULT, EBML_NONE },
+ { EBML_ID_CRC32, EBML_NONE },
{ EBML_ID_VOID, EBML_NONE },
{ 0 }
};
@@ -410,12 +433,14 @@ static EbmlSyntax matroska_simpletag[] = {
static EbmlSyntax matroska_tag[] = {
{ MATROSKA_ID_SIMPLETAG, EBML_NEST, sizeof(MatroskaTag), 0, {.n=matroska_simpletag} },
{ MATROSKA_ID_TAGTARGETS, EBML_NONE },
+ { EBML_ID_CRC32, EBML_NONE },
{ EBML_ID_VOID, EBML_NONE },
{ 0 }
};
static EbmlSyntax matroska_tags[] = {
{ MATROSKA_ID_TAG, EBML_NEST, 0, offsetof(MatroskaDemuxContext,tags), {.n=matroska_tag} },
+ { EBML_ID_CRC32, EBML_NONE },
{ EBML_ID_VOID, EBML_NONE },
{ 0 }
};
@@ -429,6 +454,7 @@ static EbmlSyntax matroska_seekhead_entry[] = {
static EbmlSyntax matroska_seekhead[] = {
{ MATROSKA_ID_SEEKENTRY, EBML_NEST, sizeof(MatroskaSeekhead), offsetof(MatroskaDemuxContext,seekhead), {.n=matroska_seekhead_entry} },
+ { EBML_ID_CRC32, EBML_NONE },
{ EBML_ID_VOID, EBML_NONE },
{ 0 }
};
@@ -464,12 +490,19 @@ static EbmlSyntax matroska_cluster[] = {
{ MATROSKA_ID_CLUSTERTIMECODE,EBML_UINT,0, offsetof(MatroskaCluster,timecode) },
{ MATROSKA_ID_BLOCKGROUP, EBML_NEST, sizeof(MatroskaBlock), offsetof(MatroskaCluster,blocks), {.n=matroska_blockgroup} },
{ MATROSKA_ID_SIMPLEBLOCK, EBML_PASS, sizeof(MatroskaBlock), offsetof(MatroskaCluster,blocks), {.n=matroska_blockgroup} },
+ { MATROSKA_ID_CLUSTERPOSITION,EBML_NONE },
+ { MATROSKA_ID_CLUSTERPREVSIZE,EBML_NONE },
+ { EBML_ID_CRC32, EBML_NONE },
{ EBML_ID_VOID, EBML_NONE },
{ 0 }
};
static EbmlSyntax matroska_clusters[] = {
{ MATROSKA_ID_CLUSTER, EBML_NEST, 0, 0, {.n=matroska_cluster} },
+ { MATROSKA_ID_INFO, EBML_NONE },
+ { MATROSKA_ID_CUES, EBML_NONE },
+ { MATROSKA_ID_TAGS, EBML_NONE },
+ { MATROSKA_ID_SEEKHEAD, EBML_NONE },
{ 0 }
};