aboutsummaryrefslogtreecommitdiffstats
path: root/libavformat/matroskadec.c
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2019-05-17 00:30:09 +0200
committerJames Almer <jamrial@gmail.com>2019-07-16 16:16:59 -0300
commita9f051519e2ad3e4ea3062d2fd437209dc865eb8 (patch)
tree6796580eb1f8a876ed7aec79e6eafeb7ad21d125 /libavformat/matroskadec.c
parent865c5370078fe743a8259a3f83d69e5a0cb693b2 (diff)
downloadffmpeg-a9f051519e2ad3e4ea3062d2fd437209dc865eb8.tar.gz
avformat/matroskadec: Don't reset cluster position
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>
Diffstat (limited to 'libavformat/matroskadec.c')
-rw-r--r--libavformat/matroskadec.c14
1 files changed, 3 insertions, 11 deletions
diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
index db1b4b864f..d2db3e5f0b 100644
--- a/libavformat/matroskadec.c
+++ b/libavformat/matroskadec.c
@@ -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;