parse clusters until some packets are queued
authorAurelien Jacobs <aurel@gnuage.org>
Sun, 11 Mar 2007 22:26:39 +0000 (22:26 +0000)
committerAurelien Jacobs <aurel@gnuage.org>
Sun, 11 Mar 2007 22:26:39 +0000 (22:26 +0000)
instead of parsing only one cluster

Originally committed as revision 8329 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavformat/matroska.c

index c8148c6a86b8e05505849ee08e775e5bb40e4e5c..32572c78610cfea69b0773c41c85af002cad4874 100644 (file)
@@ -2698,9 +2698,8 @@ matroska_read_packet (AVFormatContext *s,
     int res = 0;
     uint32_t id;
 
     int res = 0;
     uint32_t id;
 
-    /* Do we still have a packet queued? */
-    if (matroska_deliver_packet(matroska, pkt) == 0)
-        return 0;
+    /* Read stream until we have a packet queued. */
+    while (matroska_deliver_packet(matroska, pkt)) {
 
     /* Have we already reached the end? */
     if (matroska->done)
 
     /* Have we already reached the end? */
     if (matroska->done)
@@ -2708,8 +2707,7 @@ matroska_read_packet (AVFormatContext *s,
 
     while (res == 0) {
         if (!(id = ebml_peek_id(matroska, &matroska->level_up))) {
 
     while (res == 0) {
         if (!(id = ebml_peek_id(matroska, &matroska->level_up))) {
-            res = AVERROR_IO;
-            break;
+            return AVERROR_IO;
         } else if (matroska->level_up) {
             matroska->level_up--;
             break;
         } else if (matroska->level_up) {
             matroska->level_up--;
             break;
@@ -2737,8 +2735,9 @@ matroska_read_packet (AVFormatContext *s,
 
     if (res == -1)
         matroska->done = 1;
 
     if (res == -1)
         matroska->done = 1;
+    }
 
 
-    return matroska_deliver_packet(matroska, pkt);
+    return 0;
 }
 
 static int
 }
 
 static int