mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-24 13:56:33 +02:00
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>
This commit is contained in:
parent
865c537007
commit
a9f051519e
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user