On 05/12/2011 01:56 AM, Anton Khirnov wrote:

> From: Marton Balint <[email protected]>
> 
> 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 <[email protected]>
> Signed-off-by: Anton Khirnov <[email protected]>
> ---
>  libavformat/utils.c |    9 +++++----
>  1 files changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/libavformat/utils.c b/libavformat/utils.c
> index 830e5d0..2afac16 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;


ok.

-Justin

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to