diff --git a/libavformat/matroska.c b/libavformat/matroska.c index 32572c7861..47b99ee745 100644 --- a/libavformat/matroska.c +++ b/libavformat/matroska.c @@ -2701,40 +2701,40 @@ matroska_read_packet (AVFormatContext *s, /* Read stream until we have a packet queued. */ while (matroska_deliver_packet(matroska, pkt)) { - /* Have we already reached the end? */ - if (matroska->done) - return AVERROR_IO; - - while (res == 0) { - if (!(id = ebml_peek_id(matroska, &matroska->level_up))) { + /* Have we already reached the end? */ + if (matroska->done) return AVERROR_IO; - } else if (matroska->level_up) { - matroska->level_up--; - break; - } - switch (id) { - case MATROSKA_ID_CLUSTER: - if ((res = ebml_read_master(matroska, &id)) < 0) + while (res == 0) { + if (!(id = ebml_peek_id(matroska, &matroska->level_up))) { + return AVERROR_IO; + } else if (matroska->level_up) { + matroska->level_up--; + break; + } + + switch (id) { + case MATROSKA_ID_CLUSTER: + if ((res = ebml_read_master(matroska, &id)) < 0) + break; + if ((res = matroska_parse_cluster(matroska)) == 0) + res = 1; /* Parsed one cluster, let's get out. */ break; - if ((res = matroska_parse_cluster(matroska)) == 0) - res = 1; /* Parsed one cluster, let's get out. */ - break; - default: - case EBML_ID_VOID: - res = ebml_read_skip(matroska); + default: + case EBML_ID_VOID: + res = ebml_read_skip(matroska); + break; + } + + if (matroska->level_up) { + matroska->level_up--; break; + } } - if (matroska->level_up) { - matroska->level_up--; - break; - } - } - - if (res == -1) - matroska->done = 1; + if (res == -1) + matroska->done = 1; } return 0;