X-Git-Url: https://granicus.if.org/sourcecode?a=blobdiff_plain;f=vpxenc.c;h=8798e69184a612cea1131a411541ba3253d9c8d2;hb=49bf2e2ffec18738b240778c7549820aac174cf4;hp=4519acb730c977247f5c0fff9a2b18e7a5c9df81;hpb=d610ead2580efa0fd6200c266203ade17ab323b7;p=libvpx diff --git a/vpxenc.c b/vpxenc.c index 4519acb73..8798e6918 100644 --- a/vpxenc.c +++ b/vpxenc.c @@ -32,10 +32,10 @@ #include "./ivfenc.h" #include "./tools_common.h" -#if CONFIG_VP8_ENCODER || CONFIG_VP9_ENCODER +#if CONFIG_VP8_ENCODER || CONFIG_VP9_ENCODER || CONFIG_VP10_ENCODER #include "vpx/vp8cx.h" #endif -#if CONFIG_VP8_DECODER || CONFIG_VP9_DECODER +#if CONFIG_VP8_DECODER || CONFIG_VP9_DECODER || CONFIG_VP10_DECODER #include "vpx/vp8dx.h" #endif @@ -201,7 +201,7 @@ static const arg_def_t disable_warning_prompt = ARG_DEF( "y", "disable-warning-prompt", 0, "Display warnings, but do not prompt user to continue."); -#if CONFIG_VP9 && CONFIG_VP9_HIGHBITDEPTH +#if CONFIG_VP9_HIGHBITDEPTH static const arg_def_t test16bitinternalarg = ARG_DEF( NULL, "test-16bit-internal", 0, "Force use of 16 bit internal buffer"); #endif @@ -211,7 +211,7 @@ static const arg_def_t *main_args[] = { &outputfile, &codecarg, &passes, &pass_arg, &fpf_name, &limit, &skip, &deadline, &best_dl, &good_dl, &rt_dl, &quietarg, &verbosearg, &psnrarg, &use_webm, &use_ivf, &out_part, &q_hist_n, - &rate_hist_n, &disable_warnings, &disable_warning_prompt, + &rate_hist_n, &disable_warnings, &disable_warning_prompt, &recontest, NULL }; @@ -251,7 +251,7 @@ static const arg_def_t *global_args[] = { #endif &timebase, &framerate, &error_resilient, -#if CONFIG_VP9 && CONFIG_VP9_HIGHBITDEPTH +#if CONFIG_VP9_HIGHBITDEPTH &test16bitinternalarg, #endif &lag_in_frames, NULL @@ -330,10 +330,6 @@ static const arg_def_t sharpness = ARG_DEF( NULL, "sharpness", 1, "Loop filter sharpness (0..7)"); static const arg_def_t static_thresh = ARG_DEF( NULL, "static-thresh", 1, "Motion detection threshold"); -static const arg_def_t cpu_used_vp8 = ARG_DEF( - NULL, "cpu-used", 1, "CPU Used (-16..16)"); -static const arg_def_t cpu_used_vp9 = ARG_DEF( - NULL, "cpu-used", 1, "CPU Used (-8..8)"); static const arg_def_t auto_altref = ARG_DEF( NULL, "auto-alt-ref", 1, "Enable automatic alt reference frames"); static const arg_def_t arnr_maxframes = ARG_DEF( @@ -353,17 +349,14 @@ static const arg_def_t cq_level = ARG_DEF( NULL, "cq-level", 1, "Constant/Constrained Quality level"); static const arg_def_t max_intra_rate_pct = ARG_DEF( NULL, "max-intra-rate", 1, "Max I-frame bitrate (pct)"); -static const arg_def_t max_inter_rate_pct = ARG_DEF( - NULL, "max-inter-rate", 1, "Max P-frame bitrate (pct)"); -static const arg_def_t gf_cbr_boost_pct = ARG_DEF( - NULL, "gf-cbr-boost", 1, "Boost for Golden Frame in CBR mode (pct)"); - -static const arg_def_t screen_content_mode = ARG_DEF(NULL, "screen-content-mode", 1, - "Screen content mode"); #if CONFIG_VP8_ENCODER +static const arg_def_t cpu_used_vp8 = ARG_DEF( + NULL, "cpu-used", 1, "CPU Used (-16..16)"); static const arg_def_t token_parts = ARG_DEF( NULL, "token-parts", 1, "Number of token partitions to use, log2"); +static const arg_def_t screen_content_mode = ARG_DEF( + NULL, "screen-content-mode", 1, "Screen content mode"); static const arg_def_t *vp8_args[] = { &cpu_used_vp8, &auto_altref, &noise_sens, &sharpness, &static_thresh, &token_parts, &arnr_maxframes, &arnr_strength, &arnr_type, @@ -381,22 +374,34 @@ static const int vp8_arg_ctrl_map[] = { }; #endif -#if CONFIG_VP9_ENCODER +#if CONFIG_VP9_ENCODER || CONFIG_VP10_ENCODER +static const arg_def_t cpu_used_vp9 = ARG_DEF( + NULL, "cpu-used", 1, "CPU Used (-8..8)"); static const arg_def_t tile_cols = ARG_DEF( NULL, "tile-columns", 1, "Number of tile columns to use, log2"); static const arg_def_t tile_rows = ARG_DEF( NULL, "tile-rows", 1, "Number of tile rows to use, log2"); static const arg_def_t lossless = ARG_DEF( - NULL, "lossless", 1, "Lossless mode"); + NULL, "lossless", 1, "Lossless mode (0: false (default), 1: true)"); static const arg_def_t frame_parallel_decoding = ARG_DEF( NULL, "frame-parallel", 1, "Enable frame parallel decodability features"); static const arg_def_t aq_mode = ARG_DEF( NULL, "aq-mode", 1, "Adaptive quantization mode (0: off (default), 1: variance 2: complexity, " - "3: cyclic refresh)"); + "3: cyclic refresh, 4: equator360)"); static const arg_def_t frame_periodic_boost = ARG_DEF( NULL, "frame-boost", 1, "Enable frame periodic boost (0: off (default), 1: on)"); +static const arg_def_t gf_cbr_boost_pct = ARG_DEF( + NULL, "gf-cbr-boost", 1, "Boost for Golden Frame in CBR mode (pct)"); +static const arg_def_t max_inter_rate_pct = ARG_DEF( + NULL, "max-inter-rate", 1, "Max P-frame bitrate (pct)"); +static const arg_def_t min_gf_interval = ARG_DEF( + NULL, "min-gf-interval", 1, + "min gf/arf frame interval (default 0, indicating in-built behavior)"); +static const arg_def_t max_gf_interval = ARG_DEF( + NULL, "max-gf-interval", 1, + "max gf/arf frame interval (default 0, indicating in-built behavior)"); static const struct arg_enum_list color_space_enum[] = { { "unknown", VPX_CS_UNKNOWN }, @@ -414,7 +419,7 @@ static const arg_def_t input_color_space = ARG_DEF_ENUM( NULL, "color-space", 1, "The color space of input content:", color_space_enum); -#if CONFIG_VP9 && CONFIG_VP9_HIGHBITDEPTH +#if CONFIG_VP9_HIGHBITDEPTH static const struct arg_enum_list bitdepth_enum[] = { {"8", VPX_BITS_8}, {"10", VPX_BITS_10}, @@ -438,7 +443,9 @@ static const struct arg_enum_list tune_content_enum[] = { static const arg_def_t tune_content = ARG_DEF_ENUM( NULL, "tune-content", 1, "Tune content type", tune_content_enum); +#endif +#if CONFIG_VP9_ENCODER static const arg_def_t *vp9_args[] = { &cpu_used_vp9, &auto_altref, &sharpness, &static_thresh, &tile_cols, &tile_rows, &arnr_maxframes, &arnr_strength, &arnr_type, @@ -446,9 +453,7 @@ static const arg_def_t *vp9_args[] = { &gf_cbr_boost_pct, &lossless, &frame_parallel_decoding, &aq_mode, &frame_periodic_boost, &noise_sens, &tune_content, &input_color_space, -#if CONFIG_VP9 && CONFIG_VP9_HIGHBITDEPTH - &bitdeptharg, &inbitdeptharg, -#endif + &min_gf_interval, &max_gf_interval, NULL }; static const int vp9_arg_ctrl_map[] = { @@ -461,6 +466,33 @@ static const int vp9_arg_ctrl_map[] = { VP9E_SET_LOSSLESS, VP9E_SET_FRAME_PARALLEL_DECODING, VP9E_SET_AQ_MODE, VP9E_SET_FRAME_PERIODIC_BOOST, VP9E_SET_NOISE_SENSITIVITY, VP9E_SET_TUNE_CONTENT, VP9E_SET_COLOR_SPACE, + VP9E_SET_MIN_GF_INTERVAL, VP9E_SET_MAX_GF_INTERVAL, + 0 +}; +#endif + +#if CONFIG_VP10_ENCODER +static const arg_def_t *vp10_args[] = { + &cpu_used_vp9, &auto_altref, &sharpness, &static_thresh, + &tile_cols, &tile_rows, &arnr_maxframes, &arnr_strength, &arnr_type, + &tune_ssim, &cq_level, &max_intra_rate_pct, &max_inter_rate_pct, + &gf_cbr_boost_pct, &lossless, + &frame_parallel_decoding, &aq_mode, &frame_periodic_boost, + &noise_sens, &tune_content, &input_color_space, + &min_gf_interval, &max_gf_interval, + NULL +}; +static const int vp10_arg_ctrl_map[] = { + VP8E_SET_CPUUSED, VP8E_SET_ENABLEAUTOALTREF, + VP8E_SET_SHARPNESS, VP8E_SET_STATIC_THRESHOLD, + VP9E_SET_TILE_COLUMNS, VP9E_SET_TILE_ROWS, + VP8E_SET_ARNR_MAXFRAMES, VP8E_SET_ARNR_STRENGTH, VP8E_SET_ARNR_TYPE, + VP8E_SET_TUNING, VP8E_SET_CQ_LEVEL, VP8E_SET_MAX_INTRA_BITRATE_PCT, + VP9E_SET_MAX_INTER_BITRATE_PCT, VP9E_SET_GF_CBR_BOOST_PCT, + VP9E_SET_LOSSLESS, VP9E_SET_FRAME_PARALLEL_DECODING, VP9E_SET_AQ_MODE, + VP9E_SET_FRAME_PERIODIC_BOOST, VP9E_SET_NOISE_SENSITIVITY, + VP9E_SET_TUNE_CONTENT, VP9E_SET_COLOR_SPACE, + VP9E_SET_MIN_GF_INTERVAL, VP9E_SET_MAX_GF_INTERVAL, 0 }; #endif @@ -469,6 +501,7 @@ static const arg_def_t *no_args[] = { NULL }; void usage_exit(void) { int i; + const int num_encoder = get_vpx_encoder_count(); fprintf(stderr, "Usage: %s -o dst_filename src_filename \n", exec_name); @@ -490,24 +523,32 @@ void usage_exit(void) { #if CONFIG_VP9_ENCODER fprintf(stderr, "\nVP9 Specific Options:\n"); arg_show_usage(stderr, vp9_args); +#endif +#if CONFIG_VP10_ENCODER + fprintf(stderr, "\nVP10 Specific Options:\n"); + arg_show_usage(stderr, vp10_args); #endif fprintf(stderr, "\nStream timebase (--timebase):\n" " The desired precision of timestamps in the output, expressed\n" " in fractional seconds. Default is 1/1000.\n"); fprintf(stderr, "\nIncluded encoders:\n\n"); - for (i = 0; i < get_vpx_encoder_count(); ++i) { + for (i = 0; i < num_encoder; ++i) { const VpxInterface *const encoder = get_vpx_encoder_by_index(i); - fprintf(stderr, " %-6s - %s\n", - encoder->name, vpx_codec_iface_name(encoder->codec_interface())); + const char* defstr = (i == (num_encoder - 1)) ? "(default)" : ""; + fprintf(stderr, " %-6s - %s %s\n", + encoder->name, vpx_codec_iface_name(encoder->codec_interface()), + defstr); } + fprintf(stderr, "\n "); + fprintf(stderr, "Use --codec to switch to a non-default encoder.\n\n"); exit(EXIT_FAILURE); } #define mmin(a, b) ((a) < (b) ? (a) : (b)) -#if CONFIG_VP9 && CONFIG_VP9_HIGHBITDEPTH +#if CONFIG_VP9_HIGHBITDEPTH static void find_mismatch_high(const vpx_image_t *const img1, const vpx_image_t *const img2, int yloc[4], int uloc[4], int vloc[4]) { @@ -705,7 +746,7 @@ static int compare_img(const vpx_image_t *const img1, match &= (img1->fmt == img2->fmt); match &= (img1->d_w == img2->d_w); match &= (img1->d_h == img2->d_h); -#if CONFIG_VP9 && CONFIG_VP9_HIGHBITDEPTH +#if CONFIG_VP9_HIGHBITDEPTH if (img1->fmt & VPX_IMG_FMT_HIGHBITDEPTH) { l_w *= 2; c_w *= 2; @@ -732,14 +773,12 @@ static int compare_img(const vpx_image_t *const img1, #define NELEMENTS(x) (sizeof(x)/sizeof(x[0])) -#define MAX(x,y) ((x)>(y)?(x):(y)) -#if CONFIG_VP8_ENCODER && !CONFIG_VP9_ENCODER -#define ARG_CTRL_CNT_MAX NELEMENTS(vp8_arg_ctrl_map) -#elif !CONFIG_VP8_ENCODER && CONFIG_VP9_ENCODER +#if CONFIG_VP10_ENCODER +#define ARG_CTRL_CNT_MAX NELEMENTS(vp10_arg_ctrl_map) +#elif CONFIG_VP9_ENCODER #define ARG_CTRL_CNT_MAX NELEMENTS(vp9_arg_ctrl_map) #else -#define ARG_CTRL_CNT_MAX MAX(NELEMENTS(vp8_arg_ctrl_map), \ - NELEMENTS(vp9_arg_ctrl_map)) +#define ARG_CTRL_CNT_MAX NELEMENTS(vp8_arg_ctrl_map) #endif #if !CONFIG_WEBM_IO @@ -760,7 +799,7 @@ struct stream_config { int arg_ctrl_cnt; int write_webm; int have_kf_max_dist; -#if CONFIG_VP9 && CONFIG_VP9_HIGHBITDEPTH +#if CONFIG_VP9_HIGHBITDEPTH // whether to use 16bit internal buffers int use_16bit_internal; #endif @@ -811,10 +850,14 @@ static void validate_positive_rational(const char *msg, static void parse_global_config(struct VpxEncoderConfig *global, char **argv) { char **argi, **argj; struct arg arg; + const int num_encoder = get_vpx_encoder_count(); + + if (num_encoder < 1) + die("Error: no valid encoder available\n"); /* Initialize default parameters */ memset(global, 0, sizeof(*global)); - global->codec = get_vpx_encoder_by_index(0); + global->codec = get_vpx_encoder_by_index(num_encoder - 1); global->passes = 0; global->color_type = I420; /* Assign default deadline to good quality */ @@ -900,7 +943,7 @@ static void parse_global_config(struct VpxEncoderConfig *global, char **argv) { } /* Validate global config */ if (global->passes == 0) { -#if CONFIG_VP9_ENCODER +#if CONFIG_VP9_ENCODER || CONFIG_VP10_ENCODER // Make default VP9 passes = 2 until there is a better quality 1-pass // encoder if (global->codec != NULL && global->codec->name != NULL) @@ -935,6 +978,10 @@ static void open_input_file(struct VpxInputContext *input) { rewind(input->file); } + /* Default to 1:1 pixel aspect ratio. */ + input->pixel_aspect_ratio.numerator = 1; + input->pixel_aspect_ratio.denominator = 1; + /* For RAW input sources, these bytes will applied on the first frame * in read_frame(). */ @@ -948,6 +995,8 @@ static void open_input_file(struct VpxInputContext *input) { input->file_type = FILE_TYPE_Y4M; input->width = input->y4m.pic_w; input->height = input->y4m.pic_h; + input->pixel_aspect_ratio.numerator = input->y4m.par_n; + input->pixel_aspect_ratio.denominator = input->y4m.par_d; input->framerate.numerator = input->y4m.fps_n; input->framerate.denominator = input->y4m.fps_d; input->fmt = input->y4m.vpx_fmt; @@ -1036,7 +1085,7 @@ static int parse_stream_params(struct VpxEncoderConfig *global, static const int *ctrl_args_map = NULL; struct stream_config *config = &stream->config; int eos_mark_found = 0; -#if CONFIG_VP9 && CONFIG_VP9_HIGHBITDEPTH +#if CONFIG_VP9_HIGHBITDEPTH int test_16bit_internal = 0; #endif @@ -1051,6 +1100,13 @@ static int parse_stream_params(struct VpxEncoderConfig *global, } else if (strcmp(global->codec->name, "vp9") == 0) { ctrl_args = vp9_args; ctrl_args_map = vp9_arg_ctrl_map; +#endif +#if CONFIG_VP10_ENCODER + } else if (strcmp(global->codec->name, "vp10") == 0) { + // TODO(jingning): Reuse VP9 specific encoder configuration parameters. + // Consider to expand this set for VP10 encoder control. + ctrl_args = vp10_args; + ctrl_args_map = vp10_arg_ctrl_map; #endif } @@ -1092,7 +1148,7 @@ static int parse_stream_params(struct VpxEncoderConfig *global, config->cfg.g_w = arg_parse_uint(&arg); } else if (arg_match(&arg, &height, argi)) { config->cfg.g_h = arg_parse_uint(&arg); -#if CONFIG_VP9 && CONFIG_VP9_HIGHBITDEPTH +#if CONFIG_VP9_HIGHBITDEPTH } else if (arg_match(&arg, &bitdeptharg, argi)) { config->cfg.g_bit_depth = arg_parse_enum_or_int(&arg); } else if (arg_match(&arg, &inbitdeptharg, argi)) { @@ -1165,9 +1221,10 @@ static int parse_stream_params(struct VpxEncoderConfig *global, config->have_kf_max_dist = 1; } else if (arg_match(&arg, &kf_disabled, argi)) { config->cfg.kf_mode = VPX_KF_DISABLED; -#if CONFIG_VP9 && CONFIG_VP9_HIGHBITDEPTH +#if CONFIG_VP9_HIGHBITDEPTH } else if (arg_match(&arg, &test16bitinternalarg, argi)) { - if (strcmp(global->codec->name, "vp9") == 0) { + if (strcmp(global->codec->name, "vp9") == 0 || + strcmp(global->codec->name, "vp10") == 0) { test_16bit_internal = 1; } #endif @@ -1200,8 +1257,9 @@ static int parse_stream_params(struct VpxEncoderConfig *global, argj++; } } -#if CONFIG_VP9 && CONFIG_VP9_HIGHBITDEPTH - if (strcmp(global->codec->name, "vp9") == 0) { +#if CONFIG_VP9_HIGHBITDEPTH + if (strcmp(global->codec->name, "vp9") == 0 || + strcmp(global->codec->name, "vp10") == 0) { config->use_16bit_internal = test_16bit_internal | (config->cfg.g_profile > 1); } @@ -1381,7 +1439,8 @@ static void show_stream_config(struct stream_state *stream, static void open_output_file(struct stream_state *stream, - struct VpxEncoderConfig *global) { + struct VpxEncoderConfig *global, + const struct VpxRational *pixel_aspect_ratio) { const char *fn = stream->config.out_fn; const struct vpx_codec_enc_cfg *const cfg = &stream->config.cfg; @@ -1402,7 +1461,8 @@ static void open_output_file(struct stream_state *stream, write_webm_file_header(&stream->ebml, cfg, &global->framerate, stream->config.stereo_fmt, - global->codec->fourcc); + global->codec->fourcc, + pixel_aspect_ratio); } #endif @@ -1483,7 +1543,7 @@ static void initialize_encoder(struct stream_state *stream, flags |= global->show_psnr ? VPX_CODEC_USE_PSNR : 0; flags |= global->out_part ? VPX_CODEC_USE_OUTPUT_PARTITION : 0; -#if CONFIG_VP9 && CONFIG_VP9_HIGHBITDEPTH +#if CONFIG_VP9_HIGHBITDEPTH flags |= stream->config.use_16bit_internal ? VPX_CODEC_USE_HIGHBITDEPTH : 0; #endif @@ -1531,7 +1591,7 @@ static void encode_frame(struct stream_state *stream, / cfg->g_timebase.num / global->framerate.num; /* Scale if necessary */ -#if CONFIG_VP9 && CONFIG_VP9_HIGHBITDEPTH +#if CONFIG_VP9_HIGHBITDEPTH if (img) { if ((img->fmt & VPX_IMG_FMT_HIGHBITDEPTH) && (img->d_w != cfg->g_w || img->d_h != cfg->g_h)) { @@ -1782,7 +1842,7 @@ static void test_decode(struct stream_state *stream, enc_img = ref_enc.img; vpx_codec_control(&stream->decoder, VP9_GET_REFERENCE, &ref_dec); dec_img = ref_dec.img; -#if CONFIG_VP9 && CONFIG_VP9_HIGHBITDEPTH +#if CONFIG_VP9_HIGHBITDEPTH if ((enc_img.fmt & VPX_IMG_FMT_HIGHBITDEPTH) != (dec_img.fmt & VPX_IMG_FMT_HIGHBITDEPTH)) { if (enc_img.fmt & VPX_IMG_FMT_HIGHBITDEPTH) { @@ -1803,7 +1863,7 @@ static void test_decode(struct stream_state *stream, if (!compare_img(&enc_img, &dec_img)) { int y[4], u[4], v[4]; -#if CONFIG_VP9 && CONFIG_VP9_HIGHBITDEPTH +#if CONFIG_VP9_HIGHBITDEPTH if (enc_img.fmt & VPX_IMG_FMT_HIGHBITDEPTH) { find_mismatch_high(&enc_img, &dec_img, y, u, v); } else { @@ -1853,7 +1913,7 @@ static void print_time(const char *label, int64_t etl) { int main(int argc, const char **argv_) { int pass; vpx_image_t raw; -#if CONFIG_VP9 && CONFIG_VP9_HIGHBITDEPTH +#if CONFIG_VP9_HIGHBITDEPTH vpx_image_t raw_shift; int allocated_raw_shift = 0; int use_16bit_internal = 0; @@ -1936,7 +1996,7 @@ int main(int argc, const char **argv_) { usage_exit(); /* Decide if other chroma subsamplings than 4:2:0 are supported */ - if (global.codec->fourcc == VP9_FOURCC) + if (global.codec->fourcc == VP9_FOURCC || global.codec->fourcc == VP10_FOURCC) input.only_i420 = 0; for (pass = global.pass ? global.pass - 1 : 0; pass < global.passes; pass++) { @@ -2000,9 +2060,11 @@ int main(int argc, const char **argv_) { #if !CONFIG_WEBM_IO FOREACH_STREAM({ - stream->config.write_webm = 0; - warn("vpxenc was compiled without WebM container support." - "Producing IVF output"); + if (stream->config.write_webm) { + stream->config.write_webm = 0; + warn("vpxenc was compiled without WebM container support." + "Producing IVF output"); + } }); #endif @@ -2012,6 +2074,8 @@ int main(int argc, const char **argv_) { if (!global.have_framerate) { global.framerate.num = input.framerate.numerator; global.framerate.den = input.framerate.denominator; + FOREACH_STREAM(stream->config.cfg.g_timebase.den = global.framerate.num; + stream->config.cfg.g_timebase.num = global.framerate.den); } FOREACH_STREAM(set_default_kf_interval(stream, &global)); @@ -2035,11 +2099,13 @@ int main(int argc, const char **argv_) { } FOREACH_STREAM(setup_pass(stream, &global, pass)); - FOREACH_STREAM(open_output_file(stream, &global)); + FOREACH_STREAM(open_output_file(stream, &global, + &input.pixel_aspect_ratio)); FOREACH_STREAM(initialize_encoder(stream, &global)); -#if CONFIG_VP9 && CONFIG_VP9_HIGHBITDEPTH - if (strcmp(global.codec->name, "vp9") == 0) { +#if CONFIG_VP9_HIGHBITDEPTH + if (strcmp(global.codec->name, "vp9") == 0 || + strcmp(global.codec->name, "vp10") == 0) { // Check to see if at least one stream uses 16 bit internal. // Currently assume that the bit_depths for all streams using // highbitdepth are the same. @@ -2094,7 +2160,7 @@ int main(int argc, const char **argv_) { frame_avail = 0; if (frames_in > global.skip_frames) { -#if CONFIG_VP9 && CONFIG_VP9_HIGHBITDEPTH +#if CONFIG_VP9_HIGHBITDEPTH vpx_image_t *frame_to_encode; if (input_shift || (use_16bit_internal && input.bit_depth == 8)) { assert(use_16bit_internal); @@ -2255,7 +2321,7 @@ int main(int argc, const char **argv_) { }); #endif -#if CONFIG_VP9 && CONFIG_VP9_HIGHBITDEPTH +#if CONFIG_VP9_HIGHBITDEPTH if (allocated_raw_shift) vpx_img_free(&raw_shift); #endif