[FFmpeg-devel] [PATCH 1/2] Support parsing of BlockAdditional data in Matroska

Vignesh Venkatasubramanian vigneshv at google.com
Tue Jan 29 23:56:47 CET 2013


Adds Ebml grammar definitions according to matroska specification for
parsing data in BlockAdditional element. Matroska Spec of
BlockAdditional: http://goo.gl/aFSl5

Signed-off-by: Vignesh Venkatasubramanian <vigneshv at google.com>
---
 libavformat/matroska.h    |   3 ++
 libavformat/matroskadec.c |  15 +++++-
 tests/fate/vpx.mak        |   3 ++
 tests/ref/fate/vp8-alpha  | 121 ++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 141 insertions(+), 1 deletion(-)
 create mode 100644 tests/ref/fate/vp8-alpha

diff --git a/libavformat/matroska.h b/libavformat/matroska.h
index 8411633..8250e0f 100644
--- a/libavformat/matroska.h
+++ b/libavformat/matroska.h
@@ -175,6 +175,9 @@
 #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_BLOCKADDITIONAL 0xA5
 #define MATROSKA_ID_SIMPLEBLOCK 0xA3
 
 /* IDs in the blockgroup master */
diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
index 1a15558..8b6b8d0 100644
--- a/libavformat/matroskadec.c
+++ b/libavformat/matroskadec.c
@@ -163,6 +163,7 @@ typedef struct {
     AVStream *stream;
     int64_t end_timecode;
     int ms_compat;
+    int max_block_additional_id;
 } MatroskaTrack;
 
 typedef struct {
@@ -279,6 +280,7 @@ typedef struct {
     int64_t  reference;
     uint64_t non_simple;
     EbmlBin  bin;
+    EbmlBin  additional;
 } MatroskaBlock;
 
 static EbmlSyntax ebml_header[] = {
@@ -385,6 +387,7 @@ static EbmlSyntax matroska_track[] = {
     { MATROSKA_ID_TRACKAUDIO,           EBML_NEST, 0, offsetof(MatroskaTrack,audio), {.n=matroska_track_audio} },
     { MATROSKA_ID_TRACKOPERATION,       EBML_NEST, 0, offsetof(MatroskaTrack,operation), {.n=matroska_track_operation} },
     { MATROSKA_ID_TRACKCONTENTENCODINGS,EBML_NEST, 0, 0, {.n=matroska_track_encodings} },
+    { MATROSKA_ID_TRACKMAXBLKADDID,     EBML_UINT, 0, offsetof(MatroskaTrack,max_block_additional_id) },
     { MATROSKA_ID_TRACKFLAGENABLED,     EBML_NONE },
     { MATROSKA_ID_TRACKFLAGLACING,      EBML_NONE },
     { MATROSKA_ID_CODECNAME,            EBML_NONE },
@@ -393,7 +396,6 @@ static EbmlSyntax matroska_track[] = {
     { MATROSKA_ID_CODECDOWNLOADURL,     EBML_NONE },
     { MATROSKA_ID_TRACKMINCACHE,        EBML_NONE },
     { MATROSKA_ID_TRACKMAXCACHE,        EBML_NONE },
-    { MATROSKA_ID_TRACKMAXBLKADDID,     EBML_NONE },
     { 0 }
 };
 
@@ -524,8 +526,19 @@ static EbmlSyntax matroska_segments[] = {
     { 0 }
 };
 
+static EbmlSyntax matroska_blockmore[] = {
+    { MATROSKA_ID_BLOCKADDITIONAL, EBML_BIN,  0, offsetof(MatroskaBlock,additional) },
+    { 0 }
+};
+
+static EbmlSyntax matroska_blockadditions[] = {
+    { MATROSKA_ID_BLOCKMORE, EBML_NEST, 0, 0, {.n=matroska_blockmore} },
+    { 0 }
+};
+
 static EbmlSyntax matroska_blockgroup[] = {
     { MATROSKA_ID_BLOCK,          EBML_BIN,  0, offsetof(MatroskaBlock,bin) },
+    { MATROSKA_ID_BLOCKADDITIONS, EBML_NEST, 0, 0, {.n=matroska_blockadditions} },
     { MATROSKA_ID_SIMPLEBLOCK,    EBML_BIN,  0, offsetof(MatroskaBlock,bin) },
     { MATROSKA_ID_BLOCKDURATION,  EBML_UINT, 0, offsetof(MatroskaBlock,duration) },
     { MATROSKA_ID_BLOCKREFERENCE, EBML_UINT, 0, offsetof(MatroskaBlock,reference) },
diff --git a/tests/fate/vpx.mak b/tests/fate/vpx.mak
index a51ef07..1c6dce0 100644
--- a/tests/fate/vpx.mak
+++ b/tests/fate/vpx.mak
@@ -22,6 +22,9 @@ fate-vp6a: CMD = framecrc -i $(SAMPLES)/flash-vp6/300x180-Scr-f8-056alpha.flv
 FATE_VP6-$(call DEMDEC, FLV, VP6F) += fate-vp6f
 fate-vp6f: CMD = framecrc -i $(SAMPLES)/flash-vp6/clip1024.flv
 
+FATE_VP8-$(call DEMDEC, FLV, VP8) += fate-vp8-alpha
+fate-vp8-alpha: CMD = framecrc -i $(SAMPLES)/vp8_alpha/vp8_video_with_alpha.webm
+
 FATE_SAMPLES_AVCONV += $(FATE_VP6-yes)
 fate-vp6: $(FATE_VP6-yes)
 
diff --git a/tests/ref/fate/vp8-alpha b/tests/ref/fate/vp8-alpha
new file mode 100644
index 0000000..03e0308
--- /dev/null
+++ b/tests/ref/fate/vp8-alpha
@@ -0,0 +1,121 @@
+#tb 0: 1/30
+0,          0,          0,        1,   102400, 0xc052645d
+0,          1,          1,        1,   102400, 0x22e9accc
+0,          2,          2,        1,   102400, 0xc846f425
+0,          3,          3,        1,   102400, 0x1ecd1495
+0,          4,          4,        1,   102400, 0x9c27f587
+0,          5,          5,        1,   102400, 0x63909393
+0,          6,          6,        1,   102400, 0xd8cda9eb
+0,          7,          7,        1,   102400, 0xb5d87818
+0,          8,          8,        1,   102400, 0x0a46b317
+0,          9,          9,        1,   102400, 0x5d25b984
+0,         10,         10,        1,   102400, 0x37a2c70e
+0,         11,         11,        1,   102400, 0xf58ccf81
+0,         12,         12,        1,   102400, 0xc48cd6a3
+0,         13,         13,        1,   102400, 0x7fa3e225
+0,         14,         14,        1,   102400, 0x95820b00
+0,         15,         15,        1,   102400, 0xb652e7ff
+0,         16,         16,        1,   102400, 0x7efce71e
+0,         17,         17,        1,   102400, 0x05aeeba0
+0,         18,         18,        1,   102400, 0xf7b4f364
+0,         19,         19,        1,   102400, 0xe65ef01b
+0,         20,         20,        1,   102400, 0x9ea4eccf
+0,         21,         21,        1,   102400, 0xd8ade06b
+0,         22,         22,        1,   102400, 0x0e6de0d1
+0,         23,         23,        1,   102400, 0x7205d977
+0,         24,         24,        1,   102400, 0xe677d3a0
+0,         25,         25,        1,   102400, 0xc94dd73d
+0,         26,         26,        1,   102400, 0xc6f6d436
+0,         27,         27,        1,   102400, 0x7780d7e2
+0,         28,         28,        1,   102400, 0x8f4ad43d
+0,         29,         29,        1,   102400, 0xc44bda0b
+0,         30,         30,        1,   102400, 0x6469e963
+0,         31,         31,        1,   102400, 0x0260f0a4
+0,         32,         32,        1,   102400, 0xf598fa4d
+0,         33,         33,        1,   102400, 0x573104b4
+0,         34,         34,        1,   102400, 0x47d41026
+0,         35,         35,        1,   102400, 0x85a51a5b
+0,         36,         36,        1,   102400, 0x3f291595
+0,         37,         37,        1,   102400, 0x513b0f7a
+0,         38,         38,        1,   102400, 0x20540631
+0,         39,         39,        1,   102400, 0x6acffb4f
+0,         40,         40,        1,   102400, 0x70e4f2db
+0,         41,         41,        1,   102400, 0x7220ed20
+0,         42,         42,        1,   102400, 0x4885df38
+0,         43,         43,        1,   102400, 0x5a52e3ca
+0,         44,         44,        1,   102400, 0x4e7ce27e
+0,         45,         45,        1,   102400, 0x75f8f6cc
+0,         46,         46,        1,   102400, 0xd31d0fbb
+0,         47,         47,        1,   102400, 0xcac51728
+0,         48,         48,        1,   102400, 0xac0f1294
+0,         49,         49,        1,   102400, 0x09821830
+0,         50,         50,        1,   102400, 0xd4c31924
+0,         51,         51,        1,   102400, 0xee0915fe
+0,         52,         52,        1,   102400, 0x644a123f
+0,         53,         53,        1,   102400, 0x88600902
+0,         54,         54,        1,   102400, 0x9124024d
+0,         55,         55,        1,   102400, 0x73970121
+0,         56,         56,        1,   102400, 0x1ed105e4
+0,         57,         57,        1,   102400, 0x437d0835
+0,         58,         58,        1,   102400, 0xe1bd0857
+0,         59,         59,        1,   102400, 0xfd340abf
+0,         60,         60,        1,   102400, 0x7235467b
+0,         61,         61,        1,   102400, 0xa8c54abc
+0,         62,         62,        1,   102400, 0xb9ca4ba8
+0,         63,         63,        1,   102400, 0xd7d2534f
+0,         64,         64,        1,   102400, 0x6aaa5735
+0,         65,         65,        1,   102400, 0x7c6a573b
+0,         66,         66,        1,   102400, 0x39bf5bbd
+0,         67,         67,        1,   102400, 0xde985524
+0,         68,         68,        1,   102400, 0xc5e059c6
+0,         69,         69,        1,   102400, 0x585a5da3
+0,         70,         70,        1,   102400, 0x38df6bdf
+0,         71,         71,        1,   102400, 0xcc386392
+0,         72,         72,        1,   102400, 0x893f6164
+0,         73,         73,        1,   102400, 0x84a95ce7
+0,         74,         74,        1,   102400, 0xd77f63b9
+0,         75,         75,        1,   102400, 0x6cd27d84
+0,         76,         76,        1,   102400, 0xf28894f2
+0,         77,         77,        1,   102400, 0xdc04aac0
+0,         78,         78,        1,   102400, 0xd21cbd52
+0,         79,         79,        1,   102400, 0x19fdc690
+0,         80,         80,        1,   102400, 0x9c43d59d
+0,         81,         81,        1,   102400, 0x16cad856
+0,         82,         82,        1,   102400, 0xe846e320
+0,         83,         83,        1,   102400, 0xe83cf08c
+0,         84,         84,        1,   102400, 0x0e74f10f
+0,         85,         85,        1,   102400, 0x3e79f8c2
+0,         86,         86,        1,   102400, 0xfa4a053c
+0,         87,         87,        1,   102400, 0xd33816bd
+0,         88,         88,        1,   102400, 0x1a272119
+0,         89,         89,        1,   102400, 0x89be265e
+0,         90,         90,        1,   102400, 0x91d63378
+0,         91,         91,        1,   102400, 0x83634069
+0,         92,         92,        1,   102400, 0x12184ee1
+0,         93,         93,        1,   102400, 0x81f26027
+0,         94,         94,        1,   102400, 0x4612733e
+0,         95,         95,        1,   102400, 0x2a928561
+0,         96,         96,        1,   102400, 0x20539788
+0,         97,         97,        1,   102400, 0x87dbae59
+0,         98,         98,        1,   102400, 0xccacbeff
+0,         99,         99,        1,   102400, 0x5d4cc67e
+0,        100,        100,        1,   102400, 0xe85ac89c
+0,        101,        101,        1,   102400, 0xf4a8cd88
+0,        102,        102,        1,   102400, 0xc28ed257
+0,        103,        103,        1,   102400, 0x820dd62e
+0,        104,        104,        1,   102400, 0xc6f3ce7c
+0,        105,        105,        1,   102400, 0x4ea3c642
+0,        106,        106,        1,   102400, 0xedc0c8b0
+0,        107,        107,        1,   102400, 0x87f1c4fd
+0,        108,        108,        1,   102400, 0x82f7c6f2
+0,        109,        109,        1,   102400, 0x3236cd9b
+0,        110,        110,        1,   102400, 0xa45dd8d8
+0,        111,        111,        1,   102400, 0x8ccae71d
+0,        112,        112,        1,   102400, 0x72a3ed5a
+0,        113,        113,        1,   102400, 0x423df7d3
+0,        114,        114,        1,   102400, 0x07f9f74e
+0,        115,        115,        1,   102400, 0x78fdec61
+0,        116,        116,        1,   102400, 0x2822e5e9
+0,        117,        117,        1,   102400, 0x2897de01
+0,        118,        118,        1,   102400, 0x2ee9d05b
+0,        119,        119,        1,   102400, 0xaf21d4f5
-- 
1.8.1



More information about the ffmpeg-devel mailing list