[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