Browse code

Revert "ffmpeg: get rid of useless AVInputStream.nb_streams."

This reverts commit 2cf8355f98681bdd726b739008acd5483f82f8d7.
AVInputStream.nb_streams tracks number of streams found at the
beginning, new streams may appear that ffmpeg doesn't know about. Fixes
crash in this case.

Signed-off-by: Anton Khirnov <anton@khirnov.net>

Anton Khirnov authored on 2011/09/11 19:27:51
Showing 1 changed files
... ...
@@ -329,6 +329,7 @@ typedef struct AVInputFile {
329 329
     int eof_reached;      /* true if eof reached */
330 330
     int ist_index;        /* index of first stream in ist_table */
331 331
     int buffer_size;      /* current total buffer size */
332
+    int nb_streams;       /* nb streams we are aware of */
332 333
 } AVInputFile;
333 334
 
334 335
 static AVInputStream *input_streams = NULL;
... ...
@@ -1983,7 +1984,7 @@ static int transcode(AVFormatContext **output_files,
1983 1983
         int si = stream_maps[i].stream_index;
1984 1984
 
1985 1985
         if (fi < 0 || fi > nb_input_files - 1 ||
1986
-            si < 0 || si > input_files[fi].ctx->nb_streams - 1) {
1986
+            si < 0 || si > input_files[fi].nb_streams - 1) {
1987 1987
             fprintf(stderr,"Could not find input stream #%d.%d\n", fi, si);
1988 1988
             ret = AVERROR(EINVAL);
1989 1989
             goto fail;
... ...
@@ -1991,7 +1992,7 @@ static int transcode(AVFormatContext **output_files,
1991 1991
         fi = stream_maps[i].sync_file_index;
1992 1992
         si = stream_maps[i].sync_stream_index;
1993 1993
         if (fi < 0 || fi > nb_input_files - 1 ||
1994
-            si < 0 || si > input_files[fi].ctx->nb_streams - 1) {
1994
+            si < 0 || si > input_files[fi].nb_streams - 1) {
1995 1995
             fprintf(stderr,"Could not find sync stream #%d.%d\n", fi, si);
1996 1996
             ret = AVERROR(EINVAL);
1997 1997
             goto fail;
... ...
@@ -2607,7 +2608,7 @@ static int transcode(AVFormatContext **output_files,
2607 2607
         }
2608 2608
         /* the following test is needed in case new streams appear
2609 2609
            dynamically in stream : we ignore them */
2610
-        if (pkt.stream_index >= input_files[file_index].ctx->nb_streams)
2610
+        if (pkt.stream_index >= input_files[file_index].nb_streams)
2611 2611
             goto discard_packet;
2612 2612
         ist_index = input_files[file_index].ist_index + pkt.stream_index;
2613 2613
         ist = &input_streams[ist_index];
... ...
@@ -3365,6 +3366,7 @@ static int opt_input_file(const char *opt, const char *filename)
3365 3365
     input_files = grow_array(input_files, sizeof(*input_files), &nb_input_files, nb_input_files + 1);
3366 3366
     input_files[nb_input_files - 1].ctx        = ic;
3367 3367
     input_files[nb_input_files - 1].ist_index  = nb_input_streams - ic->nb_streams;
3368
+    input_files[nb_input_files - 1].nb_streams = ic->nb_streams;
3368 3369
 
3369 3370
     frame_rate    = (AVRational){0, 0};
3370 3371
     frame_pix_fmt = PIX_FMT_NONE;