On Wed, 18 Jan 2012 17:19:43 -0500, Justin Ruggles <[email protected]> 
wrote:
> Allows for choosing an alternate decoder when available.
> ---
>  avplay.c |   35 ++++++++++++++++++++++++++++++-----
>  1 files changed, 30 insertions(+), 5 deletions(-)
> 
> diff --git a/avplay.c b/avplay.c
> index 4d21234..ad27aef 100644
> --- a/avplay.c
> +++ b/avplay.c
> @@ -259,6 +259,8 @@ static int exit_on_keydown;
>  static int exit_on_mousedown;
>  static int loop = 1;
>  static int framedrop = 1;
> +static const char *acodec_name;
> +static const char *vcodec_name;
>  
>  static int rdftspeed = 20;
>  #if CONFIG_AVFILTER
> @@ -2167,10 +2169,11 @@ static int stream_component_open(VideoState *is, int 
> stream_index)
>  {
>      AVFormatContext *ic = is->ic;
>      AVCodecContext *avctx;
> -    AVCodec *codec;
> +    AVCodec *codec = NULL;
>      SDL_AudioSpec wanted_spec, spec;
>      AVDictionary *opts;
>      AVDictionaryEntry *t = NULL;
> +    enum AVMediaType codec_type;
>  
>      if (stream_index < 0 || stream_index >= ic->nb_streams)
>          return -1;
> @@ -2178,7 +2181,26 @@ static int stream_component_open(VideoState *is, int 
> stream_index)
>  
>      opts = filter_codec_opts(codec_opts, avctx->codec_id, ic, 
> ic->streams[stream_index]);
>  
> -    codec = avcodec_find_decoder(avctx->codec_id);
> +    codec_type = avcodec_get_type(avctx->codec_id);
> +    if (acodec_name && codec_type == AVMEDIA_TYPE_AUDIO ||
> +        vcodec_name && codec_type == AVMEDIA_TYPE_VIDEO) {
> +        const char *name;
> +        if (codec_type == AVMEDIA_TYPE_AUDIO)
> +            name = acodec_name;
> +        else
> +            name = vcodec_name;
> +
> +        codec = avcodec_find_decoder_by_name(name);
> +        if (!codec) {
> +            av_log(NULL, AV_LOG_FATAL, "Unknown decoder '%s'\n", name);
> +        } else if (codec->type != codec_type) {
> +            av_log(NULL, AV_LOG_FATAL, "Invalid decoder type '%s'\n", name);
> +            codec = NULL;

I would expect an exit_program() here.

> +        }
> +    }
> +    if (!codec)
> +        codec = avcodec_find_decoder(avctx->codec_id);
> +
>      avctx->debug_mv          = debug_mv;
>      avctx->debug             = debug;
>      avctx->workaround_bugs   = workaround_bugs;
> @@ -2443,9 +2465,6 @@ static int decode_thread(void *arg)
>                                   st_index[AVMEDIA_TYPE_AUDIO] :
>                                   st_index[AVMEDIA_TYPE_VIDEO]),
>                                  NULL, 0);
> -    if (show_status) {
> -        av_dump_format(ic, 0, is->filename, 0);
> -    }

Why are you moving this block?

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

Reply via email to