summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAurelien Jacobs <aurel@gnuage.org>2010-06-11 16:36:51 +0000
committerAurelien Jacobs <aurel@gnuage.org>2010-06-11 16:36:51 +0000
commit80702035d2e7c9911a852daa5dbc65c4fa1d62a2 (patch)
tree59b5c0d20166d18cb486628775966664610727e9
parentc3ade62ca3d2823bbcaea135e9af4518acc7a737 (diff)
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. Originally committed as revision 23588 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavformat/matroskadec.c13
1 files changed, 3 insertions, 10 deletions
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;