diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 9c6c633457..e6c3fc78b1 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -235,7 +235,6 @@ typedef struct { AVPacket *prev_pkt; int done; - int has_cluster_id; /* What to skip before effectively reading a packet. */ int skip_to_keyframe; @@ -471,7 +470,7 @@ static EbmlSyntax matroska_segment[] = { { MATROSKA_ID_CUES, EBML_NEST, 0, 0, {.n=matroska_index } }, { MATROSKA_ID_TAGS, EBML_NEST, 0, 0, {.n=matroska_tags } }, { MATROSKA_ID_SEEKHEAD, EBML_NEST, 0, 0, {.n=matroska_seekhead } }, - { MATROSKA_ID_CLUSTER, EBML_STOP, 0, offsetof(MatroskaDemuxContext,has_cluster_id) }, + { MATROSKA_ID_CLUSTER, EBML_STOP }, { 0 } }; @@ -795,7 +794,7 @@ static int ebml_parse_elem(MatroskaDemuxContext *matroska, matroska->segment_start = url_ftell(matroska->ctx->pb); return ebml_parse_nest(matroska, syntax->def.n, data); case EBML_PASS: return ebml_parse_id(matroska, syntax->def.n, id, data); - case EBML_STOP: *(int *)data = 1; return 1; + case EBML_STOP: return 1; default: return url_fseek(pb,length,SEEK_CUR)<0 ? AVERROR(EIO) : 0; } if (res == AVERROR_INVALIDDATA) @@ -1797,14 +1796,8 @@ static int matroska_parse_cluster(MatroskaDemuxContext *matroska) int i, res; int64_t pos = url_ftell(matroska->ctx->pb); matroska->prev_pkt = NULL; - if (matroska->has_cluster_id){ - /* For the first cluster we parse, its ID was already read as - part of matroska_read_header(), so don't read it again */ - res = ebml_parse_id(matroska, matroska_clusters, - MATROSKA_ID_CLUSTER, &cluster); + if (matroska->current_id) pos -= 4; /* sizeof the ID which was already read */ - matroska->has_cluster_id = 0; - } else res = ebml_parse(matroska, matroska_clusters, &cluster); blocks_list = &cluster.blocks; blocks = blocks_list->elem;