From bcd0c49af38037db29fdaa6ab30e3ed64d3b4b2f Mon Sep 17 00:00:00 2001 From: Chris Cunningham Date: Thu, 16 Feb 2017 15:02:30 -0800 Subject: [PATCH] VPX_CODEC_CAP_HIGHBITDEPTH for decoder interface Moves the def from vpx_encoder.h -> vpx_codec.h. The defined value is changed as part of this move. Adds the value to decoder capabilities when CONFIG_VP9_HIGHBITDEPTH. Change-Id: I7d61fc821cda29f1e32bb9b2b9ffd3d83966e419 --- test/decode_api_test.cc | 17 +++++++++++++++++ test/encode_api_test.cc | 17 +++++++++++++++++ vp9/vp9_dx_iface.c | 5 ++++- vpx/vpx_codec.h | 6 +++++- vpx/vpx_encoder.h | 4 ---- 5 files changed, 43 insertions(+), 6 deletions(-) diff --git a/test/decode_api_test.cc b/test/decode_api_test.cc index 593637780..4167cf3e0 100644 --- a/test/decode_api_test.cc +++ b/test/decode_api_test.cc @@ -172,4 +172,21 @@ TEST(DecodeAPI, Vp9PeekSI) { } #endif // CONFIG_VP9_DECODER +TEST(DecodeAPI, HighBitDepthCapability) { +// VP8 should not claim VP9 HBD as a capability. +#if CONFIG_VP8_DECODER + const vpx_codec_caps_t vp8_caps = vpx_codec_get_caps(&vpx_codec_vp8_dx_algo); + EXPECT_EQ(vp8_caps & VPX_CODEC_CAP_HIGHBITDEPTH, 0); +#endif + +#if CONFIG_VP9_DECODER + const vpx_codec_caps_t vp9_caps = vpx_codec_get_caps(&vpx_codec_vp9_dx_algo); +#if CONFIG_VP9_HIGHBITDEPTH + EXPECT_EQ(vp9_caps & VPX_CODEC_CAP_HIGHBITDEPTH, VPX_CODEC_CAP_HIGHBITDEPTH); +#else + EXPECT_EQ(vp9_caps & VPX_CODEC_CAP_HIGHBITDEPTH, 0); +#endif +#endif +} + } // namespace diff --git a/test/encode_api_test.cc b/test/encode_api_test.cc index 419e38506..f685493aa 100644 --- a/test/encode_api_test.cc +++ b/test/encode_api_test.cc @@ -62,4 +62,21 @@ TEST(EncodeAPI, InvalidParams) { } } +TEST(EncodeAPI, HighBitDepthCapability) { +// VP8 should not claim VP9 HBD as a capability. +#if CONFIG_VP8_ENCODER + const vpx_codec_caps_t vp8_caps = vpx_codec_get_caps(&vpx_codec_vp8_cx_algo); + EXPECT_EQ(vp8_caps & VPX_CODEC_CAP_HIGHBITDEPTH, 0); +#endif + +#if CONFIG_VP9_ENCODER + const vpx_codec_caps_t vp9_caps = vpx_codec_get_caps(&vpx_codec_vp9_cx_algo); +#if CONFIG_VP9_HIGHBITDEPTH + EXPECT_EQ(vp9_caps & VPX_CODEC_CAP_HIGHBITDEPTH, VPX_CODEC_CAP_HIGHBITDEPTH); +#else + EXPECT_EQ(vp9_caps & VPX_CODEC_CAP_HIGHBITDEPTH, 0); +#endif +#endif +} + } // namespace diff --git a/vp9/vp9_dx_iface.c b/vp9/vp9_dx_iface.c index 3d8968896..3c68003a0 100644 --- a/vp9/vp9_dx_iface.c +++ b/vp9/vp9_dx_iface.c @@ -1053,7 +1053,10 @@ static vpx_codec_ctrl_fn_map_t decoder_ctrl_maps[] = { CODEC_INTERFACE(vpx_codec_vp9_dx) = { "WebM Project VP9 Decoder" VERSION_STRING, VPX_CODEC_INTERNAL_ABI_VERSION, - VPX_CODEC_CAP_DECODER | VP9_CAP_POSTPROC | +#if CONFIG_VP9_HIGHBITDEPTH + VPX_CODEC_CAP_HIGHBITDEPTH | +#endif + VPX_CODEC_CAP_DECODER | VP9_CAP_POSTPROC | VPX_CODEC_CAP_EXTERNAL_FRAME_BUFFER, // vpx_codec_caps_t decoder_init, // vpx_codec_init_fn_t decoder_destroy, // vpx_codec_destroy_fn_t diff --git a/vpx/vpx_codec.h b/vpx/vpx_codec.h index fe75d2387..69f3c155b 100644 --- a/vpx/vpx_codec.h +++ b/vpx/vpx_codec.h @@ -83,7 +83,7 @@ extern "C" { * types, removing or reassigning enums, adding/removing/rearranging * fields to structures */ -#define VPX_CODEC_ABI_VERSION (3 + VPX_IMAGE_ABI_VERSION) /**<\hideinitializer*/ +#define VPX_CODEC_ABI_VERSION (4 + VPX_IMAGE_ABI_VERSION) /**<\hideinitializer*/ /*!\brief Algorithm return codes */ typedef enum { @@ -152,6 +152,10 @@ typedef long vpx_codec_caps_t; #define VPX_CODEC_CAP_DECODER 0x1 /**< Is a decoder */ #define VPX_CODEC_CAP_ENCODER 0x2 /**< Is an encoder */ +/*! Can support images at greater than 8 bitdepth. + */ +#define VPX_CODEC_CAP_HIGHBITDEPTH 0x4 + /*! \brief Initialization-time Feature Enabling * * Certain codec features must be known at initialization time, to allow for diff --git a/vpx/vpx_encoder.h b/vpx/vpx_encoder.h index 28fcd5f99..c915ed671 100644 --- a/vpx/vpx_encoder.h +++ b/vpx/vpx_encoder.h @@ -83,10 +83,6 @@ extern "C" { */ #define VPX_CODEC_CAP_OUTPUT_PARTITION 0x20000 -/*! Can support input images at greater than 8 bitdepth. - */ -#define VPX_CODEC_CAP_HIGHBITDEPTH 0x40000 - /*! \brief Initialization-time Feature Enabling * * Certain codec features must be known at initialization time, to allow -- 2.40.0