pmpdec: read index before creating audio streams
authorMichael Niedermayer <michaelni@gmx.at>
Sat, 23 Feb 2013 20:47:15 +0000 (21:47 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Sat, 23 Feb 2013 23:13:54 +0000 (00:13 +0100)
This allows more complete checks

Reviewed-by: Reimar Döffinger <Reimar.Doeffinger@gmx.de>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavformat/pmpdec.c

index 3133707..358f7b6 100644 (file)
@@ -91,16 +91,6 @@ static int pmp_header(AVFormatContext *s)
     avio_skip(pb, 10);
     srate = avio_rl32(pb);
     channels = avio_rl32(pb) + 1;
-    for (i = 1; i < pmp->num_streams; i++) {
-        AVStream *ast = avformat_new_stream(s, NULL);
-        if (!ast)
-            return AVERROR(ENOMEM);
-        ast->codec->codec_type = AVMEDIA_TYPE_AUDIO;
-        ast->codec->codec_id = audio_codec_id;
-        ast->codec->channels = channels;
-        ast->codec->sample_rate = srate;
-        avpriv_set_pts_info(ast, 32, 1, srate);
-    }
     pos = avio_tell(pb) + 4*index_cnt;
     for (i = 0; i < index_cnt; i++) {
         int size = avio_rl32(pb);
@@ -113,6 +103,16 @@ static int pmp_header(AVFormatContext *s)
         av_add_index_entry(vst, pos, i, size, 0, flags);
         pos += size;
     }
+    for (i = 1; i < pmp->num_streams; i++) {
+        AVStream *ast = avformat_new_stream(s, NULL);
+        if (!ast)
+            return AVERROR(ENOMEM);
+        ast->codec->codec_type = AVMEDIA_TYPE_AUDIO;
+        ast->codec->codec_id = audio_codec_id;
+        ast->codec->channels = channels;
+        ast->codec->sample_rate = srate;
+        avpriv_set_pts_info(ast, 32, 1, srate);
+    }
     return 0;
 }