summaryrefslogtreecommitdiff
path: root/libavformat/matroskadec.c
diff options
context:
space:
mode:
authorAurelien Jacobs <aurel@gnuage.org>2008-08-05 00:42:17 +0000
committerAurelien Jacobs <aurel@gnuage.org>2008-08-05 00:42:17 +0000
commit66a37e060b5bce80adad8126c31f8d330db86fd5 (patch)
treed48759fa94b3d28243a96d8d472e2dce17b86bf1 /libavformat/matroskadec.c
parent9bcb92ca6bb54f29ac76b806d3df9ddcbfec90bf (diff)
matroskadec: new ebml_parse() function, centralize ebml_read_element_id() calls
Originally committed as revision 14597 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat/matroskadec.c')
-rw-r--r--libavformat/matroskadec.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
index 71437a7f53..7724ee6e80 100644
--- a/libavformat/matroskadec.c
+++ b/libavformat/matroskadec.c
@@ -867,8 +867,7 @@ static int ebml_parse_elem(MatroskaDemuxContext *matroska,
}
if (syntax->type != EBML_PASS && syntax->type != EBML_STOP)
- if ((res = ebml_read_element_id(matroska, &id)) < 0 ||
- (res = ebml_read_element_length(matroska, &length)) < 0)
+ if ((res = ebml_read_element_length(matroska, &length)) < 0)
return res;
switch (syntax->type) {
@@ -905,11 +904,18 @@ static int ebml_parse_id(MatroskaDemuxContext *matroska, EbmlSyntax *syntax,
return ebml_parse_elem(matroska, &syntax[i], data);
}
+static int ebml_parse(MatroskaDemuxContext *matroska, EbmlSyntax *syntax,
+ void *data)
+{
+ uint32_t id;
+ int res = ebml_read_element_id(matroska, &id);
+ return res < 0 ? res : ebml_parse_id(matroska, syntax, id, data);
+}
+
static int ebml_parse_nest(MatroskaDemuxContext *matroska, EbmlSyntax *syntax,
void *data, int once)
{
int i, res = 0;
- uint32_t id = 0;
for (i=0; syntax[i].id; i++)
switch (syntax[i].type) {
@@ -926,9 +932,7 @@ static int ebml_parse_nest(MatroskaDemuxContext *matroska, EbmlSyntax *syntax,
}
while (!res && !ebml_level_end(matroska)) {
- res = ebml_read_element_id(matroska, &id);
- if (!res)
- res = ebml_parse_id(matroska, syntax, id, data);
+ res = ebml_parse(matroska, syntax, data);
if (once)
break;
}
@@ -1071,7 +1075,7 @@ static void matroska_execute_seekhead(MatroskaDemuxContext *matroska)
matroska->levels[matroska->num_levels] = level;
matroska->num_levels++;
- ebml_parse_id(matroska, matroska_segment, seekhead[i].id, matroska);
+ ebml_parse(matroska, matroska_segment, matroska);
/* remove dummy level */
while (matroska->num_levels) {