[FFmpeg-devel] [PATCH] libvpxenc: add color-space option for vp9

Michael Niedermayer michaelni at gmx.at
Tue Jun 16 12:10:22 CEST 2015


On Mon, Jun 15, 2015 at 10:43:17PM -0700, James Zern wrote:
> the vp9 bitstream supports 8 values:
> unknown (default), bt601, bt709, smpte170, smpte240, bt2020, reserved
> and sRGB.
> ---
>  doc/encoders.texi      | 12 ++++++++++++
>  libavcodec/libvpxenc.c | 22 ++++++++++++++++++++++
>  2 files changed, 34 insertions(+)
> 
> diff --git a/doc/encoders.texi b/doc/encoders.texi
> index 8b0ecb7..09c90c2 100644
> --- a/doc/encoders.texi
> +++ b/doc/encoders.texi
> @@ -1550,6 +1550,18 @@ Enable frame parallel decodability features.
>  @item aq-mode
>  Set adaptive quantization mode (0: off (default), 1: variance 2: complexity, 3:
>  cyclic refresh).
> + at item color-space
> +Set input color space.
> + at table @samp
> + at item unknown
> + at item bt601
> + at item bt709
> + at item smpte170
> + at item smpte240
> + at item bt2020
> + at item reserved
> + at item sRGB
> + at end table
>  @end table
>  
>  @end table
> diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c
> index 28a0e14..10f16e7 100644
> --- a/libavcodec/libvpxenc.c
> +++ b/libavcodec/libvpxenc.c
> @@ -100,8 +100,12 @@ typedef struct VP8EncoderContext {
>      int tile_rows;
>      int frame_parallel;
>      int aq_mode;
> +    int colorspace;
>  } VP8Context;
>  
> +// VP9E_SET_COLOR_SPACE was added just prior to v1.4.0.
> +#define HAVE_VP9_COLORSPACE_CONTROL (VPX_ENCODER_ABI_VERSION > 8)
> +
>  /** String mappings for enum vp8e_enc_control_id */
>  static const char *const ctlidstr[] = {
>      [VP8E_UPD_ENTROPY]           = "VP8E_UPD_ENTROPY",
> @@ -128,6 +132,9 @@ static const char *const ctlidstr[] = {
>      [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",
> +#if HAVE_VP9_COLORSPACE_CONTROL
> +    [VP9E_SET_COLOR_SPACE]             = "VP9E_SET_COLOR_SPACE",
> +#endif
>  #endif
>  };
>  
> @@ -593,6 +600,10 @@ static av_cold int vpx_init(AVCodecContext *avctx,
>              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);
> +#if HAVE_VP9_COLORSPACE_CONTROL
> +        if (ctx->colorspace >= 0)
> +            codecctl_int(avctx, VP9E_SET_COLOR_SPACE, ctx->colorspace);
> +#endif
>      }
>  #endif
>  
> @@ -968,6 +979,17 @@ static const AVOption vp9_options[] = {
>      { "variance",        "Variance based Aq",   0, AV_OPT_TYPE_CONST, {.i64 = 1}, 0, 0, VE, "aq_mode" },
>      { "complexity",      "Complexity based Aq", 0, AV_OPT_TYPE_CONST, {.i64 = 2}, 0, 0, VE, "aq_mode" },
>      { "cyclic",          "Cyclic Refresh Aq",   0, AV_OPT_TYPE_CONST, {.i64 = 3}, 0, 0, VE, "aq_mode" },
> +#if HAVE_VP9_COLORSPACE_CONTROL
> +    { "color-space",     "Input color space",                           OFFSET(colorspace),      AV_OPT_TYPE_INT, {.i64 = -1}, -1, 7, VE, "colorspace"},
> +    { "unknown",         NULL, 0, AV_OPT_TYPE_CONST, {.i64 = VPX_CS_UNKNOWN},   0, 0, VE, "colorspace" },
> +    { "bt601",           NULL, 0, AV_OPT_TYPE_CONST, {.i64 = VPX_CS_BT_601},    0, 0, VE, "colorspace" },
> +    { "bt709",           NULL, 0, AV_OPT_TYPE_CONST, {.i64 = VPX_CS_BT_709},    0, 0, VE, "colorspace" },
> +    { "smpte170",        NULL, 0, AV_OPT_TYPE_CONST, {.i64 = VPX_CS_SMPTE_170}, 0, 0, VE, "colorspace" },
> +    { "smpte240",        NULL, 0, AV_OPT_TYPE_CONST, {.i64 = VPX_CS_SMPTE_240}, 0, 0, VE, "colorspace" },
> +    { "bt2020",          NULL, 0, AV_OPT_TYPE_CONST, {.i64 = VPX_CS_BT_2020},   0, 0, VE, "colorspace" },
> +    { "reserved",        NULL, 0, AV_OPT_TYPE_CONST, {.i64 = VPX_CS_RESERVED},  0, 0, VE, "colorspace" },
> +    { "sRGB",            NULL, 0, AV_OPT_TYPE_CONST, {.i64 = VPX_CS_SRGB},      0, 0, VE, "colorspace" },
> +#endif

why does this not use AVCodecContext.colorspace or other colorspace
related fields ?


[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Its not that you shouldnt use gotos but rather that you should write
readable code and code with gotos often but not always is less readable
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20150616/5b96e216/attachment.asc>


More information about the ffmpeg-devel mailing list