[FFmpeg-devel] [PATCH] Adds support for setting aq_mode in libvpx encoder

James Almer jamrial at gmail.com
Fri Aug 22 03:37:16 CEST 2014


On 21/08/14 9:48 PM, Deb Mukherjee wrote:
> Sets aq_mode in the [0, 3] range for the libvpx encode wrapper.
> ---
>  libavcodec/libvpxenc.c | 5 +++++
>  1 file changed, 5 insertions(+)

The new setting should be mentioned in doc/encoders.texi (there are a lot other 
options missing in the documentation for that matter, but that's not related to
this patch).

> diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c
> index 830a793..f4d3238 100644
> --- a/libavcodec/libvpxenc.c
> +++ b/libavcodec/libvpxenc.c
> @@ -96,6 +96,7 @@ typedef struct VP8EncoderContext {
>      int tile_columns;
>      int tile_rows;
>      int frame_parallel;
> +    int aq_mode;
>  } VP8Context;
>  
>  /** String mappings for enum vp8e_enc_control_id */
> @@ -123,6 +124,7 @@ static const char *const ctlidstr[] = {
>      [VP9E_SET_TILE_COLUMNS]            = "VP9E_SET_TILE_COLUMNS",
>      [VP9E_SET_TILE_ROWS]               = "VP9E_SET_TILE_ROWS",
>      [VP9E_SET_FRAME_PARALLEL_DECODING] = "VP9E_SET_FRAME_PARALLEL_DECODING",
> +    [VP9E_SET_AQ_MODE]                 = "VP9E_SET_AQ_MODE",
>  #endif
>  };
>  
> @@ -444,6 +446,8 @@ static av_cold int vpx_init(AVCodecContext *avctx,
>              codecctl_int(avctx, VP9E_SET_TILE_ROWS, ctx->tile_rows);
>          if (ctx->frame_parallel >= 0)
>              codecctl_int(avctx, VP9E_SET_FRAME_PARALLEL_DECODING, ctx->frame_parallel);
> +        if (ctx->aq_mode >= 0)
> +            codecctl_int(avctx, VP9E_SET_AQ_MODE, ctx->aq_mode);
>      }
>  #endif
>  
> @@ -803,6 +807,7 @@ static const AVOption vp9_options[] = {
>      { "tile-columns",    "Number of tile columns to use, log2",         OFFSET(tile_columns),    AV_OPT_TYPE_INT, {.i64 = -1}, -1, 6, VE},
>      { "tile-rows",       "Number of tile rows to use, log2",            OFFSET(tile_rows),       AV_OPT_TYPE_INT, {.i64 = -1}, -1, 2, VE},
>      { "frame-parallel",  "Enable frame parallel decodability features", OFFSET(frame_parallel),  AV_OPT_TYPE_INT, {.i64 = -1}, -1, 1, VE},
> +    { "aq-mode",         "adaptive quantization mode",                  OFFSET(aq_mode),         AV_OPT_TYPE_INT, {.i64 = -1}, -1, 3, VE},

This needs an AV_OPT_TYPE_CONST for each of the four values, same way it's being 
done for the arnr-type and quality settings (Or the equivalent aq_mode setting in 
libx264.c).

Also, i have libvpx 1.3.0 here and vpxenc only mentions two values for --aq-mode, 
0 (Disabled) and 1 (Variance). 2 and 3 were evidently added after that version.
Not sure if this is something that should be handled in the code, mentioned in 
doc/encoders.texi, or in the description for each of the values.

>      LEGACY_OPTIONS
>      { NULL }
>  };
> 



More information about the ffmpeg-devel mailing list