add support for simple blocks (ie. matroska v2)
authorAurelien Jacobs <aurel@gnuage.org>
Fri, 2 Mar 2007 00:06:03 +0000 (00:06 +0000)
committerAurelien Jacobs <aurel@gnuage.org>
Fri, 2 Mar 2007 00:06:03 +0000 (00:06 +0000)
Originally committed as revision 8180 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavformat/matroska.c

index 35cb4ce..5d5aec3 100644 (file)
 /* 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);