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>
... | ... |
@@ -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; |