Mercurial > libavformat.hg
changeset 3674:a335cbe1fc1c libavformat
matroskadec: simplify check for hierarchy level
author | aurel |
---|---|
date | Tue, 05 Aug 2008 00:42:08 +0000 |
parents | b0188029f916 |
children | 736c7c66234a |
files | matroskadec.c |
diffstat | 1 files changed, 7 insertions(+), 22 deletions(-) [+] |
line wrap: on
line diff
--- a/matroskadec.c Tue Aug 05 00:42:05 2008 +0000 +++ b/matroskadec.c Tue Aug 05 00:42:08 2008 +0000 @@ -456,29 +456,21 @@ }; /* - * 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 @@ 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;