[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