[FFmpeg-devel] [PATCH] Fix av_find_best_stream when providing a wanted stream

Marton Balint cus
Fri Mar 4 23:38:47 CET 2011


On Sun, 20 Feb 2011, Marton Balint wrote:
> 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.
> ---
> libavformat/utils.c |    9 +++++----
> 1 files changed, 5 insertions(+), 4 deletions(-)

Hello guys, has anybody had the time to review my patches regarding 
av_find_best_stream?

Thanks,
   Marton

>
> diff --git a/libavformat/utils.c b/libavformat/utils.c
> index 3d58478..adb7e46 100644
> --- a/libavformat/utils.c
> +++ b/libavformat/utils.c
> @@ -2497,7 +2497,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;
> @@ -2510,11 +2510,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;
> @@ -2529,7 +2530,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;
> -- 
> 1.7.1
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at mplayerhq.hu
> https://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-devel
>



More information about the ffmpeg-devel mailing list