diff matroskadec.c @ 3677:0aed3a6e4e81 libavformat

matroskadec: new ebml_parse() function, centralize ebml_read_element_id() calls
author aurel
date Tue, 05 Aug 2008 00:42:17 +0000
parents d2ff1b7ad060
children fd968e67ac6a
line wrap: on
line diff
--- a/matroskadec.c	Tue Aug 05 00:42:13 2008 +0000
+++ b/matroskadec.c	Tue Aug 05 00:42:17 2008 +0000
@@ -867,8 +867,7 @@
     }
 
     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 @@
     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 @@
         }
 
     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 @@
         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) {