matroskadec: set default duration for simple block
authorJohn Stebbins <stebbins@jetheaddev.com>
Thu, 24 Mar 2011 23:34:18 +0000 (00:34 +0100)
committerLuca Barbato <lu_zero@gentoo.org>
Thu, 24 Mar 2011 23:34:18 +0000 (00:34 +0100)
When a normal Block is parsed, duration is initialized to
AV_NOPTS_VALUE.  If it is not changed, then the track's default
duration is used.  But for SimpleBlock, duration is initialized to
0 instead of AV_NOPTS_VALUE.  This is due to the difference in how
EBML_NEST vs EBML_PASS are processed.  Setting duration to 0 leads
eventually to wrongly estimate the frame duration in util.c

Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
libavformat/matroskadec.c

index 828d578..61a77ab 100644 (file)
@@ -1852,6 +1852,8 @@ static int matroska_parse_cluster(MatroskaDemuxContext *matroska)
     for (i=0; i<blocks_list->nb_elem; i++)
         if (blocks[i].bin.size > 0 && blocks[i].bin.data) {
             int is_keyframe = blocks[i].non_simple ? !blocks[i].reference : -1;
+            if (!blocks[i].non_simple)
+                blocks[i].duration = AV_NOPTS_VALUE;
             res=matroska_parse_block(matroska,
                                      blocks[i].bin.data, blocks[i].bin.size,
                                      blocks[i].bin.pos,  cluster.timecode,