diff options
Diffstat (limited to 'vp8/vp8_cx_iface.c')
-rw-r--r-- | vp8/vp8_cx_iface.c | 205 |
1 files changed, 126 insertions, 79 deletions
diff --git a/vp8/vp8_cx_iface.c b/vp8/vp8_cx_iface.c index 501dd3eb4..4f6f9fa5d 100644 --- a/vp8/vp8_cx_iface.c +++ b/vp8/vp8_cx_iface.c @@ -472,70 +472,128 @@ static vpx_codec_err_t vp8e_set_config(vpx_codec_alg_priv_t *ctx, return res; } - int vp8_reverse_trans(int); +static vpx_codec_err_t get_quantizer(vpx_codec_alg_priv_t *ctx, va_list args) +{ + int *const arg = va_arg(args, int *); + if (arg == NULL) + return VPX_CODEC_INVALID_PARAM; + *arg = vp8_get_quantizer(ctx->cpi); + return VPX_CODEC_OK; +} -static vpx_codec_err_t get_param(vpx_codec_alg_priv_t *ctx, - int ctrl_id, - va_list args) +static vpx_codec_err_t get_quantizer64(vpx_codec_alg_priv_t *ctx, va_list args) { - void *arg = va_arg(args, void *); + int *const arg = va_arg(args, int *); + if (arg == NULL) + return VPX_CODEC_INVALID_PARAM; + *arg = vp8_reverse_trans(vp8_get_quantizer(ctx->cpi)); + return VPX_CODEC_OK; +} -#define MAP(id, var) case id: *(RECAST(id, arg)) = var; break +static vpx_codec_err_t update_extracfg(vpx_codec_alg_priv_t *ctx, + const struct vp8_extracfg *extra_cfg) +{ + const vpx_codec_err_t res = validate_config(ctx, &ctx->cfg, extra_cfg, 0); + if (res == VPX_CODEC_OK) { + ctx->vp8_cfg = *extra_cfg; + set_vp8e_config(&ctx->oxcf, ctx->cfg, ctx->vp8_cfg, NULL); + vp8_change_config(ctx->cpi, &ctx->oxcf); + } + return res; +} - if (!arg) - return VPX_CODEC_INVALID_PARAM; +static vpx_codec_err_t set_cpu_used(vpx_codec_alg_priv_t *ctx, va_list args) +{ + struct vp8_extracfg extra_cfg = ctx->vp8_cfg; + extra_cfg.cpu_used = CAST(VP8E_SET_CPUUSED, args); + return update_extracfg(ctx, &extra_cfg); +} - switch (ctrl_id) - { - MAP(VP8E_GET_LAST_QUANTIZER, vp8_get_quantizer(ctx->cpi)); - MAP(VP8E_GET_LAST_QUANTIZER_64, vp8_reverse_trans(vp8_get_quantizer(ctx->cpi))); - } +static vpx_codec_err_t set_enable_auto_alt_ref(vpx_codec_alg_priv_t *ctx, + va_list args) +{ + struct vp8_extracfg extra_cfg = ctx->vp8_cfg; + extra_cfg.enable_auto_alt_ref = CAST(VP8E_SET_ENABLEAUTOALTREF, args); + return update_extracfg(ctx, &extra_cfg); +} - return VPX_CODEC_OK; -#undef MAP +static vpx_codec_err_t set_noise_sensitivity(vpx_codec_alg_priv_t *ctx, + va_list args) +{ + struct vp8_extracfg extra_cfg = ctx->vp8_cfg; + extra_cfg.noise_sensitivity = CAST(VP8E_SET_NOISE_SENSITIVITY, args); + return update_extracfg(ctx, &extra_cfg); } +static vpx_codec_err_t set_sharpness(vpx_codec_alg_priv_t *ctx, va_list args) +{ + struct vp8_extracfg extra_cfg = ctx->vp8_cfg; + extra_cfg.Sharpness = CAST(VP8E_SET_SHARPNESS, args); + return update_extracfg(ctx, &extra_cfg); +} + +static vpx_codec_err_t set_static_thresh(vpx_codec_alg_priv_t *ctx, + va_list args) +{ + struct vp8_extracfg extra_cfg = ctx->vp8_cfg; + extra_cfg.static_thresh = CAST(VP8E_SET_STATIC_THRESHOLD, args); + return update_extracfg(ctx, &extra_cfg); +} -static vpx_codec_err_t set_param(vpx_codec_alg_priv_t *ctx, - int ctrl_id, - va_list args) +static vpx_codec_err_t set_token_partitions(vpx_codec_alg_priv_t *ctx, + va_list args) { - vpx_codec_err_t res = VPX_CODEC_OK; - struct vp8_extracfg xcfg = ctx->vp8_cfg; + struct vp8_extracfg extra_cfg = ctx->vp8_cfg; + extra_cfg.token_partitions = CAST(VP8E_SET_TOKEN_PARTITIONS, args); + return update_extracfg(ctx, &extra_cfg); +} -#define MAP(id, var) case id: var = CAST(id, args); break; +static vpx_codec_err_t set_arnr_max_frames(vpx_codec_alg_priv_t *ctx, + va_list args) +{ + struct vp8_extracfg extra_cfg = ctx->vp8_cfg; + extra_cfg.arnr_max_frames = CAST(VP8E_SET_ARNR_MAXFRAMES, args); + return update_extracfg(ctx, &extra_cfg); +} - switch (ctrl_id) - { - MAP(VP8E_SET_CPUUSED, xcfg.cpu_used); - MAP(VP8E_SET_ENABLEAUTOALTREF, xcfg.enable_auto_alt_ref); - MAP(VP8E_SET_NOISE_SENSITIVITY, xcfg.noise_sensitivity); - MAP(VP8E_SET_SHARPNESS, xcfg.Sharpness); - MAP(VP8E_SET_STATIC_THRESHOLD, xcfg.static_thresh); - MAP(VP8E_SET_TOKEN_PARTITIONS, xcfg.token_partitions); - - MAP(VP8E_SET_ARNR_MAXFRAMES, xcfg.arnr_max_frames); - MAP(VP8E_SET_ARNR_STRENGTH , xcfg.arnr_strength); - MAP(VP8E_SET_ARNR_TYPE , xcfg.arnr_type); - MAP(VP8E_SET_TUNING, xcfg.tuning); - MAP(VP8E_SET_CQ_LEVEL, xcfg.cq_level); - MAP(VP8E_SET_MAX_INTRA_BITRATE_PCT, xcfg.rc_max_intra_bitrate_pct); +static vpx_codec_err_t set_arnr_strength(vpx_codec_alg_priv_t *ctx, + va_list args) +{ + struct vp8_extracfg extra_cfg = ctx->vp8_cfg; + extra_cfg.arnr_strength = CAST(VP8E_SET_ARNR_STRENGTH, args); + return update_extracfg(ctx, &extra_cfg); +} - } +static vpx_codec_err_t set_arnr_type(vpx_codec_alg_priv_t *ctx, va_list args) +{ + struct vp8_extracfg extra_cfg = ctx->vp8_cfg; + extra_cfg.arnr_type = CAST(VP8E_SET_ARNR_TYPE, args); + return update_extracfg(ctx, &extra_cfg); +} - res = validate_config(ctx, &ctx->cfg, &xcfg, 0); +static vpx_codec_err_t set_tuning(vpx_codec_alg_priv_t *ctx, va_list args) +{ + struct vp8_extracfg extra_cfg = ctx->vp8_cfg; + extra_cfg.tuning = CAST(VP8E_SET_TUNING, args); + return update_extracfg(ctx, &extra_cfg); +} - if (!res) - { - ctx->vp8_cfg = xcfg; - set_vp8e_config(&ctx->oxcf, ctx->cfg, ctx->vp8_cfg, NULL); - vp8_change_config(ctx->cpi, &ctx->oxcf); - } +static vpx_codec_err_t set_cq_level(vpx_codec_alg_priv_t *ctx, va_list args) +{ + struct vp8_extracfg extra_cfg = ctx->vp8_cfg; + extra_cfg.cq_level = CAST(VP8E_SET_CQ_LEVEL, args); + return update_extracfg(ctx, &extra_cfg); +} - return res; -#undef MAP +static vpx_codec_err_t set_rc_max_intra_bitrate_pct(vpx_codec_alg_priv_t *ctx, + va_list args) +{ + struct vp8_extracfg extra_cfg = ctx->vp8_cfg; + extra_cfg.rc_max_intra_bitrate_pct = + CAST(VP8E_SET_MAX_INTRA_BITRATE_PCT, args); + return update_extracfg(ctx, &extra_cfg); } static vpx_codec_err_t vp8e_mr_alloc_mem(const vpx_codec_enc_cfg_t *cfg, @@ -976,8 +1034,7 @@ static const vpx_codec_cx_pkt_t *vp8e_get_cxdata(vpx_codec_alg_priv_t *ctx, } static vpx_codec_err_t vp8e_set_reference(vpx_codec_alg_priv_t *ctx, - int ctr_id, - va_list args) + va_list args) { vpx_ref_frame_t *data = va_arg(args, vpx_ref_frame_t *); @@ -996,8 +1053,7 @@ static vpx_codec_err_t vp8e_set_reference(vpx_codec_alg_priv_t *ctx, } static vpx_codec_err_t vp8e_get_reference(vpx_codec_alg_priv_t *ctx, - int ctr_id, - va_list args) + va_list args) { vpx_ref_frame_t *data = va_arg(args, vpx_ref_frame_t *); @@ -1016,12 +1072,10 @@ static vpx_codec_err_t vp8e_get_reference(vpx_codec_alg_priv_t *ctx, } static vpx_codec_err_t vp8e_set_previewpp(vpx_codec_alg_priv_t *ctx, - int ctr_id, - va_list args) + va_list args) { #if CONFIG_POSTPROC vp8_postproc_cfg_t *data = va_arg(args, vp8_postproc_cfg_t *); - (void)ctr_id; if (data) { @@ -1032,7 +1086,6 @@ static vpx_codec_err_t vp8e_set_previewpp(vpx_codec_alg_priv_t *ctx, return VPX_CODEC_INVALID_PARAM; #else (void)ctx; - (void)ctr_id; (void)args; return VPX_CODEC_INCAPABLE; #endif @@ -1090,8 +1143,7 @@ static vpx_image_t *vp8e_get_preview(vpx_codec_alg_priv_t *ctx) } static vpx_codec_err_t vp8e_update_entropy(vpx_codec_alg_priv_t *ctx, - int ctr_id, - va_list args) + va_list args) { int update = va_arg(args, int); vp8_update_entropy(ctx->cpi, update); @@ -1100,8 +1152,7 @@ static vpx_codec_err_t vp8e_update_entropy(vpx_codec_alg_priv_t *ctx, } static vpx_codec_err_t vp8e_update_reference(vpx_codec_alg_priv_t *ctx, - int ctr_id, - va_list args) + va_list args) { int update = va_arg(args, int); vp8_update_reference(ctx->cpi, update); @@ -1109,8 +1160,7 @@ static vpx_codec_err_t vp8e_update_reference(vpx_codec_alg_priv_t *ctx, } static vpx_codec_err_t vp8e_use_reference(vpx_codec_alg_priv_t *ctx, - int ctr_id, - va_list args) + va_list args) { int reference_flag = va_arg(args, int); vp8_use_as_reference(ctx->cpi, reference_flag); @@ -1118,7 +1168,6 @@ static vpx_codec_err_t vp8e_use_reference(vpx_codec_alg_priv_t *ctx, } static vpx_codec_err_t vp8e_set_roi_map(vpx_codec_alg_priv_t *ctx, - int ctr_id, va_list args) { vpx_roi_map_t *data = va_arg(args, vpx_roi_map_t *); @@ -1138,8 +1187,7 @@ static vpx_codec_err_t vp8e_set_roi_map(vpx_codec_alg_priv_t *ctx, static vpx_codec_err_t vp8e_set_activemap(vpx_codec_alg_priv_t *ctx, - int ctr_id, - va_list args) + va_list args) { vpx_active_map_t *data = va_arg(args, vpx_active_map_t *); @@ -1158,8 +1206,7 @@ static vpx_codec_err_t vp8e_set_activemap(vpx_codec_alg_priv_t *ctx, } static vpx_codec_err_t vp8e_set_scalemode(vpx_codec_alg_priv_t *ctx, - int ctr_id, - va_list args) + va_list args) { vpx_scaling_mode_t *data = va_arg(args, vpx_scaling_mode_t *); @@ -1197,20 +1244,20 @@ static vpx_codec_ctrl_fn_map_t vp8e_ctf_maps[] = {VP8E_SET_ROI_MAP, vp8e_set_roi_map}, {VP8E_SET_ACTIVEMAP, vp8e_set_activemap}, {VP8E_SET_SCALEMODE, vp8e_set_scalemode}, - {VP8E_SET_CPUUSED, set_param}, - {VP8E_SET_NOISE_SENSITIVITY, set_param}, - {VP8E_SET_ENABLEAUTOALTREF, set_param}, - {VP8E_SET_SHARPNESS, set_param}, - {VP8E_SET_STATIC_THRESHOLD, set_param}, - {VP8E_SET_TOKEN_PARTITIONS, set_param}, - {VP8E_GET_LAST_QUANTIZER, get_param}, - {VP8E_GET_LAST_QUANTIZER_64, get_param}, - {VP8E_SET_ARNR_MAXFRAMES, set_param}, - {VP8E_SET_ARNR_STRENGTH , set_param}, - {VP8E_SET_ARNR_TYPE , set_param}, - {VP8E_SET_TUNING, set_param}, - {VP8E_SET_CQ_LEVEL, set_param}, - {VP8E_SET_MAX_INTRA_BITRATE_PCT, set_param}, + {VP8E_SET_CPUUSED, set_cpu_used}, + {VP8E_SET_NOISE_SENSITIVITY, set_noise_sensitivity}, + {VP8E_SET_ENABLEAUTOALTREF, set_enable_auto_alt_ref}, + {VP8E_SET_SHARPNESS, set_sharpness}, + {VP8E_SET_STATIC_THRESHOLD, set_static_thresh}, + {VP8E_SET_TOKEN_PARTITIONS, set_token_partitions}, + {VP8E_GET_LAST_QUANTIZER, get_quantizer}, + {VP8E_GET_LAST_QUANTIZER_64, get_quantizer64}, + {VP8E_SET_ARNR_MAXFRAMES, set_arnr_max_frames}, + {VP8E_SET_ARNR_STRENGTH , set_arnr_strength}, + {VP8E_SET_ARNR_TYPE , set_arnr_type}, + {VP8E_SET_TUNING, set_tuning}, + {VP8E_SET_CQ_LEVEL, set_cq_level}, + {VP8E_SET_MAX_INTRA_BITRATE_PCT, set_rc_max_intra_bitrate_pct}, { -1, NULL}, }; |