Browse Source

matroskadec: simplify check for hierarchy level

Originally committed as revision 14594 to svn://svn.ffmpeg.org/ffmpeg/trunk
tags/v0.5
Aurelien Jacobs 17 years ago
parent
commit
592110c26c
1 changed files with 7 additions and 22 deletions
  1. +7
    -22
      libavformat/matroskadec.c

+ 7
- 22
libavformat/matroskadec.c View File

@@ -456,29 +456,21 @@ static EbmlSyntax matroska_clusters[] = {
};

/*
* Return: the amount of levels in the hierarchy that the
* current element lies higher than the previous one.
* The opposite isn't done - that's auto-done using master
* element reading.
* Return: whether we reached the end of a level in the hierarchy or not
*/
static int ebml_read_element_level_up(MatroskaDemuxContext *matroska)
static int ebml_level_end(MatroskaDemuxContext *matroska)
{
ByteIOContext *pb = matroska->ctx->pb;
offset_t pos = url_ftell(pb);
int num = 0;

while (matroska->num_levels > 0) {
if (matroska->num_levels > 0) {
MatroskaLevel *level = &matroska->levels[matroska->num_levels - 1];

if (pos >= level->start + level->length) {
if (pos - level->start >= level->length) {
matroska->num_levels--;
num++;
} else {
break;
return 1;
}
}

return num;
return 0;
}

/*
@@ -933,17 +925,10 @@ static int ebml_parse(MatroskaDemuxContext *matroska, EbmlSyntax *syntax,
break;
}

while (!res) {
while (!res && !ebml_level_end(matroska)) {
res2 = ebml_read_element_id(matroska, &id);
if (res2 < 0)
break;
if (res2 > 0)
matroska->level_up = ebml_read_element_level_up(matroska);
if (matroska->level_up) {
matroska->level_up--;
break;
}

res = ebml_parse_id(matroska, syntax, id, data);
if (once)
break;


Loading…
Cancel
Save