diff options
author | Marton Balint <cus@passwd.hu> | 2011-02-20 01:18:30 +0100 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2011-05-12 18:02:27 +0200 |
commit | 2c7158169859eb2dd49a72337f9f3f28347da77a (patch) | |
tree | f860ab9f0a616b3c70d1a2ea1f98274b598db85e /libavformat/utils.c | |
parent | 6b35a795f8ca34c92da8de81f7b20b2d47d71468 (diff) | |
download | ffmpeg-2c7158169859eb2dd49a72337f9f3f28347da77a.tar.gz |
lavf: fix av_find_best_stream when providing a wanted stream.
In the main loop, stream_number is incremented after checking the stream type,
so the search usually will not find the wanted stream.
This patch eliminates the useless stream_number variable and introduces a new
one, called real_stream_index to store the real stream index of the current
stream, no matter if we are looping through all the streams or only the streams
of a program.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Signed-off-by: Anton Khirnov <anton@khirnov.net>
Diffstat (limited to 'libavformat/utils.c')
-rw-r--r-- | libavformat/utils.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/libavformat/utils.c b/libavformat/utils.c index 830e5d03c2..2afac163c5 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -2462,7 +2462,7 @@ int av_find_best_stream(AVFormatContext *ic, AVCodec **decoder_ret, int flags) { - int i, nb_streams = ic->nb_streams, stream_number = 0; + int i, nb_streams = ic->nb_streams; int ret = AVERROR_STREAM_NOT_FOUND, best_count = -1; unsigned *program = NULL; AVCodec *decoder = NULL, *best_decoder = NULL; @@ -2475,11 +2475,12 @@ int av_find_best_stream(AVFormatContext *ic, } } for (i = 0; i < nb_streams; i++) { - AVStream *st = ic->streams[program ? program[i] : i]; + int real_stream_index = program ? program[i] : i; + AVStream *st = ic->streams[real_stream_index]; AVCodecContext *avctx = st->codec; if (avctx->codec_type != type) continue; - if (wanted_stream_nb >= 0 && stream_number++ != wanted_stream_nb) + if (wanted_stream_nb >= 0 && real_stream_index != wanted_stream_nb) continue; if (st->disposition & (AV_DISPOSITION_HEARING_IMPAIRED|AV_DISPOSITION_VISUAL_IMPAIRED)) continue; @@ -2494,7 +2495,7 @@ int av_find_best_stream(AVFormatContext *ic, if (best_count >= st->codec_info_nb_frames) continue; best_count = st->codec_info_nb_frames; - ret = program ? program[i] : i; + ret = real_stream_index; best_decoder = decoder; if (program && i == nb_streams - 1 && ret < 0) { program = NULL; |