From 0cc5ea2e9587a987f85e0c7c0314c22e9f5ec91c Mon Sep 17 00:00:00 2001 From: Aurelien Jacobs Date: Fri, 2 Mar 2007 00:06:03 +0000 Subject: [PATCH] add support for simple blocks (ie. matroska v2) Originally committed as revision 8180 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavformat/matroska.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/libavformat/matroska.c b/libavformat/matroska.c index 35cb4ce0cb..5d5aec325b 100644 --- a/libavformat/matroska.c +++ b/libavformat/matroska.c @@ -139,6 +139,7 @@ /* IDs in the cluster master */ #define MATROSKA_ID_CLUSTERTIMECODE 0xE7 #define MATROSKA_ID_BLOCKGROUP 0xA0 +#define MATROSKA_ID_SIMPLEBLOCK 0xA3 /* IDs in the blockgroup master */ #define MATROSKA_ID_BLOCK 0xA1 @@ -2076,9 +2077,9 @@ matroska_read_header (AVFormatContext *s, return AVERROR_NOFMT; } av_free(doctype); - if (version != 1) { + if (version > 2) { av_log(matroska->ctx, AV_LOG_ERROR, - "Matroska demuxer version 1 too old for file version %d\n", + "Matroska demuxer version 2 too old for file version %d\n", version); return AVERROR_NOFMT; } @@ -2425,6 +2426,8 @@ matroska_parse_block(MatroskaDemuxContext *matroska, uint64_t cluster_time, flags = *data; data += 1; size -= 1; + if (is_keyframe == -1) + is_keyframe = flags & 1 ? PKT_FLAG_KEY : 0; switch ((flags & 0x06) >> 1) { case 0x0: /* no lacing */ laces = 1; @@ -2666,6 +2669,10 @@ matroska_parse_cluster (MatroskaDemuxContext *matroska) res = matroska_parse_blockgroup(matroska, cluster_time); break; + case MATROSKA_ID_SIMPLEBLOCK: + matroska_parse_block(matroska, cluster_time, -1, NULL, NULL); + break; + default: av_log(matroska->ctx, AV_LOG_INFO, "Unknown entry 0x%x in cluster data\n", id);