[FFmpeg-devel] [PATCH 01/10] ffmpeg: add -guess_layout_max option.

Stefano Sabatini stefasab at gmail.com
Fri Jan 18 00:35:59 CET 2013


On date Wednesday 2013-01-16 17:50:15 +0100, Nicolas George encoded:
> 
> Signed-off-by: Nicolas George <nicolas.george at normalesup.org>
> ---
>  doc/ffmpeg.texi |    6 ++++++
>  ffmpeg.c        |    2 ++
>  ffmpeg.h        |    3 +++
>  ffmpeg_opt.c    |    4 ++++
>  4 files changed, 15 insertions(+)
> 
> 
> Changed into a per-stream option (overkill IMHO, but Michael seems to want
> it that way).
> 
> 
> diff --git a/doc/ffmpeg.texi b/doc/ffmpeg.texi
> index 8a29d5e..8c07b33 100644
> --- a/doc/ffmpeg.texi
> +++ b/doc/ffmpeg.texi
> @@ -603,6 +603,12 @@ This is an alias for @code{-filter:a}, see the @ref{filter_option,,-filter optio
>  Force audio tag/fourcc. This is an alias for @code{-tag:a}.
>  @item -absf @var{bitstream_filter}
>  Deprecated, see -bsf
> + at item -guess_layout_max @var{channels} (@emph{input,per-stream})
> +If some input channel layout is not known, try to guess only if it
> +corresponds to at most the specified number of channels. For example, 2
> +tells to @command{ffmpeg} to recognize 1 channel as mono and 2 channels as
> +stereo but not 6 channels as 5.1. The default is to always try to guess. Use
> +0 to disable all guessing.
>  @end table
>  
>  @section Subtitle options:
> diff --git a/ffmpeg.c b/ffmpeg.c
> index acaa523..165da9a 100644
> --- a/ffmpeg.c
> +++ b/ffmpeg.c
> @@ -1443,6 +1443,8 @@ int guess_input_channel_layout(InputStream *ist)
>      if (!dec->channel_layout) {
>          char layout_name[256];
>  
> +        if (dec->channels > ist->guess_layout_max)
> +            return 0;
>          dec->channel_layout = av_get_default_channel_layout(dec->channels);
>          if (!dec->channel_layout)
>              return 0;
> diff --git a/ffmpeg.h b/ffmpeg.h
> index 1260563..9e2e97b 100644
> --- a/ffmpeg.h
> +++ b/ffmpeg.h
> @@ -171,6 +171,8 @@ typedef struct OptionsContext {
>      int        nb_pass;
>      SpecifierOpt *passlogfiles;
>      int        nb_passlogfiles;
> +    SpecifierOpt *guess_layout_max;
> +    int        nb_guess_layout_max;
>  } OptionsContext;
>  
>  typedef struct InputFilter {
> @@ -229,6 +231,7 @@ typedef struct InputStream {
>      AVDictionary *opts;
>      AVRational framerate;               /* framerate forced with -r */
>      int top_field_first;
> +    int guess_layout_max;
>  
>      int resample_height;
>      int resample_width;
> diff --git a/ffmpeg_opt.c b/ffmpeg_opt.c
> index 09f75d3..2d63246 100644
> --- a/ffmpeg_opt.c
> +++ b/ffmpeg_opt.c
> @@ -616,6 +616,8 @@ static void add_input_streams(OptionsContext *o, AVFormatContext *ic)
>  
>              break;
>          case AVMEDIA_TYPE_AUDIO:
> +            ist->guess_layout_max = INT_MAX;
> +            MATCH_PER_STREAM_OPT(guess_layout_max, i, ist->guess_layout_max, ic, st);
>              guess_input_channel_layout(ist);
>  
>              ist->resample_sample_fmt     = dec->sample_fmt;
> @@ -2581,6 +2583,8 @@ const OptionDef options[] = {
>          "set channel layout", "layout" },
>      { "af",             OPT_AUDIO | HAS_ARG  | OPT_PERFILE,                        { .func_arg = opt_audio_filters },
>          "set audio filters", "filter_graph" },
> +    { "guess_layout_max", OPT_AUDIO | HAS_ARG | OPT_INT | OPT_SPEC | OPT_EXPERT,   { .off = OFFSET(guess_layout_max) },
> +      "set the maximum number of channels to try to guess the channel layout" },

LGTM, thanks.
-- 
FFmpeg = Fascinating and Freak Mastodontic Picky Empowered Geisha


More information about the ffmpeg-devel mailing list