Commit 37c5e19b authored by aurel's avatar aurel

matroskadec: simplify parsing of the first cluster

Now that we save the currently parsed ebml element ID after an interruption,
we don't need to special case the parsing of the first cluster.


git-svn-id: file:///var/local/repositories/ffmpeg/trunk@23588 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent b886b408
......@@ -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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment