Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarton Balint <cus@passwd.hu>2011-02-20 03:18:30 +0300
committerMichael Niedermayer <michaelni@gmx.at>2011-03-11 15:05:46 +0300
commit5126a8ecbbb6981ac29f437f1d35f5248c8f234d (patch)
tree01a141b5b9ddd40a59c634446c4b3aecea1f7125 /libavformat/utils.c
parentfa14610df5e21fd562922a5622daf42f746df978 (diff)
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>
Diffstat (limited to 'libavformat/utils.c')
-rw-r--r--libavformat/utils.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/libavformat/utils.c b/libavformat/utils.c
index b5e052fe6e..ccf9c6550e 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -2498,7 +2498,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;
@@ -2511,11 +2511,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;
@@ -2530,7 +2531,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;