diff options
author | Aurelien Jacobs <aurel@gnuage.org> | 2007-03-02 00:06:03 +0000 |
---|---|---|
committer | Aurelien Jacobs <aurel@gnuage.org> | 2007-03-02 00:06:03 +0000 |
commit | 0cc5ea2e9587a987f85e0c7c0314c22e9f5ec91c (patch) | |
tree | 762c626ea49d47a9a6fefd74412d478d6c00a4bf /libavformat/matroska.c | |
parent | de7779b5fd0207bc6c68f41cf02393196a6ca754 (diff) | |
download | ffmpeg-0cc5ea2e9587a987f85e0c7c0314c22e9f5ec91c.tar.gz |
add support for simple blocks (ie. matroska v2)
Originally committed as revision 8180 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat/matroska.c')
-rw-r--r-- | libavformat/matroska.c | 11 |
1 files 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); |