summaryrefslogtreecommitdiff
path: root/libavformat/matroska.c
diff options
context:
space:
mode:
authorAurelien Jacobs <aurel@gnuage.org>2007-03-02 00:06:03 +0000
committerAurelien Jacobs <aurel@gnuage.org>2007-03-02 00:06:03 +0000
commit0cc5ea2e9587a987f85e0c7c0314c22e9f5ec91c (patch)
tree762c626ea49d47a9a6fefd74412d478d6c00a4bf /libavformat/matroska.c
parentde7779b5fd0207bc6c68f41cf02393196a6ca754 (diff)
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.c11
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);