| Index: source/libvpx/vp9/vp9_cx_iface.c
|
| ===================================================================
|
| --- source/libvpx/vp9/vp9_cx_iface.c (revision 223100)
|
| +++ source/libvpx/vp9/vp9_cx_iface.c (working copy)
|
| @@ -89,6 +89,18 @@
|
| unsigned int fixed_kf_cntr;
|
| };
|
|
|
| +static const VP9_REFFRAME ref_frame_to_vp9_reframe(vpx_ref_frame_type_t frame) {
|
| + switch (frame) {
|
| + case VP8_LAST_FRAME:
|
| + return VP9_LAST_FLAG;
|
| + case VP8_GOLD_FRAME:
|
| + return VP9_GOLD_FLAG;
|
| + case VP8_ALTR_FRAME:
|
| + return VP9_ALT_FLAG;
|
| + }
|
| + assert(!"Invalid Reference Frame");
|
| + return VP9_LAST_FLAG;
|
| +}
|
|
|
| static vpx_codec_err_t
|
| update_error_state(vpx_codec_alg_priv_t *ctx,
|
| @@ -148,7 +160,7 @@
|
|
|
| RANGE_CHECK_HI(cfg, g_threads, 64);
|
| RANGE_CHECK_HI(cfg, g_lag_in_frames, MAX_LAG_BUFFERS);
|
| - RANGE_CHECK(cfg, rc_end_usage, VPX_VBR, VPX_CQ);
|
| + RANGE_CHECK(cfg, rc_end_usage, VPX_VBR, VPX_Q);
|
| RANGE_CHECK_HI(cfg, rc_undershoot_pct, 1000);
|
| RANGE_CHECK_HI(cfg, rc_overshoot_pct, 1000);
|
| RANGE_CHECK_HI(cfg, rc_2pass_vbr_bias_pct, 100);
|
| @@ -160,6 +172,8 @@
|
| RANGE_CHECK_HI(cfg, rc_resize_down_thresh, 100);
|
| RANGE_CHECK(cfg, g_pass, VPX_RC_ONE_PASS, VPX_RC_LAST_PASS);
|
|
|
| + RANGE_CHECK(cfg, ss_number_layers, 1,
|
| + VPX_SS_MAX_LAYERS); /*Spatial layers max */
|
| /* VP8 does not support a lower bound on the keyframe interval in
|
| * automatic keyframe placement mode.
|
| */
|
| @@ -262,13 +276,15 @@
|
| // VBR only supported for now.
|
| // CBR code has been deprectated for experimental phase.
|
| // CQ mode not yet tested
|
| - oxcf->end_usage = USAGE_LOCAL_FILE_PLAYBACK;
|
| - /*if (cfg.rc_end_usage == VPX_CQ)
|
| - oxcf->end_usage = USAGE_CONSTRAINED_QUALITY;
|
| - else
|
| - oxcf->end_usage = USAGE_LOCAL_FILE_PLAYBACK;*/
|
| + oxcf->end_usage = USAGE_LOCAL_FILE_PLAYBACK;
|
| + /*
|
| + if (cfg.rc_end_usage == VPX_CQ)
|
| + oxcf->end_usage = USAGE_CONSTRAINED_QUALITY;
|
| + */
|
| + if (cfg.rc_end_usage == VPX_Q)
|
| + oxcf->end_usage = USAGE_CONSTANT_QUALITY;
|
|
|
| - oxcf->target_bandwidth = cfg.rc_target_bitrate;
|
| + oxcf->target_bandwidth = cfg.rc_target_bitrate;
|
| oxcf->rc_max_intra_bitrate_pct = vp8_cfg.rc_max_intra_bitrate_pct;
|
|
|
| oxcf->best_allowed_q = cfg.rc_min_quantizer;
|
| @@ -317,6 +333,8 @@
|
|
|
| oxcf->error_resilient_mode = cfg.g_error_resilient;
|
| oxcf->frame_parallel_decoding_mode = vp8_cfg.frame_parallel_decoding_mode;
|
| +
|
| + oxcf->ss_number_layers = cfg.ss_number_layers;
|
| /*
|
| printf("Current VP9 Settings: \n");
|
| printf("target_bandwidth: %d\n", oxcf->target_bandwidth);
|
| @@ -423,6 +441,8 @@
|
| MAP(VP8E_SET_ARNR_TYPE, xcfg.arnr_type);
|
| MAP(VP8E_SET_TUNING, xcfg.tuning);
|
| MAP(VP8E_SET_CQ_LEVEL, xcfg.cq_level);
|
| + MAP(VP9E_SET_MAX_Q, ctx->cfg.rc_max_quantizer);
|
| + MAP(VP9E_SET_MIN_Q, ctx->cfg.rc_min_quantizer);
|
| MAP(VP8E_SET_MAX_INTRA_BITRATE_PCT, xcfg.rc_max_intra_bitrate_pct);
|
| MAP(VP9E_SET_LOSSLESS, xcfg.lossless);
|
| MAP(VP9E_SET_FRAME_PARALLEL_DECODING, xcfg.frame_parallel_decoding_mode);
|
| @@ -845,7 +865,8 @@
|
| YV12_BUFFER_CONFIG sd;
|
|
|
| image2yuvconfig(&frame->img, &sd);
|
| - vp9_set_reference_enc(ctx->cpi, frame->frame_type, &sd);
|
| + vp9_set_reference_enc(ctx->cpi, ref_frame_to_vp9_reframe(frame->frame_type),
|
| + &sd);
|
| return VPX_CODEC_OK;
|
| } else
|
| return VPX_CODEC_INVALID_PARAM;
|
| @@ -863,7 +884,8 @@
|
| YV12_BUFFER_CONFIG sd;
|
|
|
| image2yuvconfig(&frame->img, &sd);
|
| - vp9_copy_reference_enc(ctx->cpi, frame->frame_type, &sd);
|
| + vp9_copy_reference_enc(ctx->cpi,
|
| + ref_frame_to_vp9_reframe(frame->frame_type), &sd);
|
| return VPX_CODEC_OK;
|
| } else
|
| return VPX_CODEC_INVALID_PARAM;
|
| @@ -888,7 +910,7 @@
|
| static vpx_codec_err_t vp9e_set_previewpp(vpx_codec_alg_priv_t *ctx,
|
| int ctr_id,
|
| va_list args) {
|
| -#if CONFIG_POSTPROC
|
| +#if CONFIG_VP9_POSTPROC
|
| vp8_postproc_cfg_t *data = va_arg(args, vp8_postproc_cfg_t *);
|
| (void)ctr_id;
|
|
|
| @@ -1004,7 +1026,69 @@
|
| return VPX_CODEC_INVALID_PARAM;
|
| }
|
|
|
| +static vpx_codec_err_t vp9e_set_width(vpx_codec_alg_priv_t *ctx, int ctr_id,
|
| + va_list args) {
|
| + unsigned int *data = va_arg(args, unsigned int *);
|
| + if (data) {
|
| + int res;
|
| + res = vp9_set_size_literal(ctx->cpi, *data, 0);
|
| + if (!res) {
|
| + return VPX_CODEC_OK;
|
| + } else {
|
| + return VPX_CODEC_INVALID_PARAM;
|
| + }
|
| + } else {
|
| + return VPX_CODEC_INVALID_PARAM;
|
| + }
|
| +}
|
|
|
| +static vpx_codec_err_t vp9e_set_height(vpx_codec_alg_priv_t *ctx,
|
| + int ctr_id,
|
| + va_list args) {
|
| + unsigned int *data = va_arg(args, unsigned int *);
|
| +
|
| + if (data) {
|
| + int res;
|
| + res = vp9_set_size_literal(ctx->cpi, 0, *data);
|
| +
|
| + if (!res) {
|
| + return VPX_CODEC_OK;
|
| + } else {
|
| + return VPX_CODEC_INVALID_PARAM;
|
| + }
|
| + } else {
|
| + return VPX_CODEC_INVALID_PARAM;
|
| + }
|
| +}
|
| +
|
| +static vpx_codec_err_t vp9e_set_layer(vpx_codec_alg_priv_t *ctx,
|
| + int ctr_id,
|
| + va_list args) {
|
| + unsigned int *data = va_arg(args, unsigned int *);
|
| +
|
| + if (data) {
|
| + int res;
|
| + res = 0;
|
| +
|
| + res = vp9_switch_layer(ctx->cpi, *data);
|
| +
|
| + if (!res) {
|
| + return VPX_CODEC_OK;
|
| + } else {
|
| + return VPX_CODEC_INVALID_PARAM;
|
| + }
|
| + } else {
|
| + return VPX_CODEC_INVALID_PARAM;
|
| + }
|
| +}
|
| +
|
| +static vpx_codec_err_t vp9e_set_svc(vpx_codec_alg_priv_t *ctx, int ctr_id,
|
| + va_list args) {
|
| + int data = va_arg(args, int);
|
| + vp9_set_svc(ctx->cpi, data);
|
| + return VPX_CODEC_OK;
|
| +}
|
| +
|
| static vpx_codec_ctrl_fn_map_t vp9e_ctf_maps[] = {
|
| {VP8_SET_REFERENCE, vp9e_set_reference},
|
| {VP8_COPY_REFERENCE, vp9e_copy_reference},
|
| @@ -1029,10 +1113,16 @@
|
| {VP8E_SET_ARNR_TYPE, set_param},
|
| {VP8E_SET_TUNING, set_param},
|
| {VP8E_SET_CQ_LEVEL, set_param},
|
| + {VP9E_SET_MAX_Q, set_param},
|
| + {VP9E_SET_MIN_Q, set_param},
|
| {VP8E_SET_MAX_INTRA_BITRATE_PCT, set_param},
|
| {VP9E_SET_LOSSLESS, set_param},
|
| {VP9E_SET_FRAME_PARALLEL_DECODING, set_param},
|
| {VP9_GET_REFERENCE, get_reference},
|
| + {VP9E_SET_WIDTH, vp9e_set_width},
|
| + {VP9E_SET_HEIGHT, vp9e_set_height},
|
| + {VP9E_SET_LAYER, vp9e_set_layer},
|
| + {VP9E_SET_SVC, vp9e_set_svc},
|
| { -1, NULL},
|
| };
|
|
|
| @@ -1082,6 +1172,8 @@
|
| 0, /* kf_min_dist */
|
| 9999, /* kf_max_dist */
|
|
|
| + VPX_SS_DEFAULT_LAYERS, /* ss_number_layers */
|
| +
|
| #if VPX_ENCODER_ABI_VERSION == (1 + VPX_CODEC_ABI_VERSION)
|
| 1, /* g_delete_first_pass_file */
|
| "vp8.fpf" /* first pass filename */
|
|
|