AVPacket *prev_pkt;
int done;
- int has_cluster_id;
/* What to skip before effectively reading a packet. */
int skip_to_keyframe;
{ 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 }
};
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)
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;