avformat/matroskadec: Don't reset cluster position
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>
Thu, 16 May 2019 22:30:09 +0000 (00:30 +0200)
committerJames Almer <jamrial@gmail.com>
Tue, 16 Jul 2019 19:16:59 +0000 (16:16 -0300)
The new code does not rely on whether the cluster's position is set or
not to infer whether a cluster needs to be closed or not (instead, this
is done in ebml_parse), so there is no need to reset the cluster's
position at all any more. It will be automatically set to the correct
value when a cluster is entered.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
libavformat/matroskadec.c

index db1b4b8..d2db3e5 100644 (file)
@@ -770,7 +770,6 @@ static int matroska_reset_status(MatroskaDemuxContext *matroska,
 
     matroska->current_id = id;
     matroska->num_levels = 1;
-    matroska->current_cluster.pos = 0;
     matroska->resync_pos = avio_tell(matroska->ctx->pb);
     if (id)
         matroska->resync_pos -= (av_log2(id) + 7) / 8;
@@ -1750,8 +1749,8 @@ static int matroska_parse_seekhead_entry(MatroskaDemuxContext *matroska,
             }
         }
     }
-    /* Seek back - notice that in all instances where this is used it is safe
-     * to set the level to 1 and unset the position of the current cluster. */
+    /* Seek back - notice that in all instances where this is used
+     * it is safe to set the level to 1. */
     matroska_reset_status(matroska, saved_id, before_pos);
 
     return ret;
@@ -3606,7 +3605,6 @@ static int matroska_parse_cluster(MatroskaDemuxContext *matroska)
     }
 
     if (matroska->num_levels == 2) {
-        int err = 0;
         /* We are inside a cluster. */
         res = ebml_parse(matroska, matroska_cluster_parsing, cluster);
 
@@ -3615,7 +3613,7 @@ static int matroska_parse_cluster(MatroskaDemuxContext *matroska)
             uint8_t* additional = block->additional.size > 0 ?
                                     block->additional.data : NULL;
 
-            err = matroska_parse_block(matroska, block->bin.buf, block->bin.data,
+            res = matroska_parse_block(matroska, block->bin.buf, block->bin.data,
                                        block->bin.size, block->bin.pos,
                                        cluster->timecode, block->duration,
                                        is_keyframe, additional, block->additional_id,
@@ -3623,14 +3621,8 @@ static int matroska_parse_cluster(MatroskaDemuxContext *matroska)
                                        block->discard_padding);
         }
 
-    if (res == LEVEL_ENDED)
-        cluster->pos = 0;
-
     ebml_free(matroska_blockgroup, block);
     memset(block, 0, sizeof(*block));
-
-        if (err < 0)
-            return err;
     } else if (!matroska->num_levels) {
         matroska->done = 1;
         return AVERROR_EOF;