diff --git a/vp9/common/vp9_ppflags.h b/vp9/common/vp9_ppflags.h index 8168935fcc160e3f821cd02b69bc7a9acd30ca10..e8b04d2e68b3ebf17af2247bf4ad5456c8628211 100644 --- a/vp9/common/vp9_ppflags.h +++ b/vp9/common/vp9_ppflags.h @@ -33,10 +33,12 @@ typedef struct { int post_proc_flag; int deblocking_level; int noise_level; +#if CONFIG_POSTPROC_VISUALIZER int display_ref_frame_flag; int display_mb_modes_flag; int display_b_modes_flag; int display_mv_flag; +#endif // CONFIG_POSTPROC_VISUALIZER } vp9_ppflags_t; #ifdef __cplusplus diff --git a/vp9/decoder/vp9_decoder.c b/vp9/decoder/vp9_decoder.c index b3e3f9c15fa216bcfe33a8d0aae0f497956fec52..fb3666cbeedac547a3660ede0a5aeb89beb8dc6f 100644 --- a/vp9/decoder/vp9_decoder.c +++ b/vp9/decoder/vp9_decoder.c @@ -110,8 +110,8 @@ void vp9_initialize_dec() { } } -VP9D_COMP *vp9_create_decompressor(const VP9D_CONFIG *oxcf) { - VP9D_COMP *const pbi = vpx_memalign(32, sizeof(VP9D_COMP)); +VP9D_COMP *vp9_decoder_create(const VP9D_CONFIG *oxcf) { + VP9D_COMP *const pbi = vpx_memalign(32, sizeof(*pbi)); VP9_COMMON *const cm = pbi ? &pbi->common : NULL; if (!cm) @@ -119,12 +119,9 @@ VP9D_COMP *vp9_create_decompressor(const VP9D_CONFIG *oxcf) { vp9_zero(*pbi); - // Initialize the references to not point to any frame buffers. - memset(&cm->ref_frame_map, -1, sizeof(cm->ref_frame_map)); - if (setjmp(cm->error.jmp)) { cm->error.setjmp = 0; - vp9_remove_decompressor(pbi); + vp9_decoder_remove(pbi); return NULL; } @@ -133,9 +130,13 @@ VP9D_COMP *vp9_create_decompressor(const VP9D_CONFIG *oxcf) { vp9_rtcd(); + // Initialize the references to not point to any frame buffers. + vpx_memset(&cm->ref_frame_map, -1, sizeof(cm->ref_frame_map)); + + cm->current_video_frame = 0; pbi->oxcf = *oxcf; pbi->ready_for_new_data = 1; - cm->current_video_frame = 0; + pbi->decoded_key_frame = 0; // vp9_init_dequantizer() is first called here. Add check in // frame_init_dequantizer() to avoid unnecessary calling of @@ -145,14 +146,13 @@ VP9D_COMP *vp9_create_decompressor(const VP9D_CONFIG *oxcf) { vp9_loop_filter_init(cm); cm->error.setjmp = 0; - pbi->decoded_key_frame = 0; vp9_worker_init(&pbi->lf_worker); return pbi; } -void vp9_remove_decompressor(VP9D_COMP *pbi) { +void vp9_decoder_remove(VP9D_COMP *pbi) { VP9_COMMON *const cm = &pbi->common; int i; diff --git a/vp9/decoder/vp9_decoder.h b/vp9/decoder/vp9_decoder.h index f220ccd0277961802104a2817e5fa3ccbcc009cc..2e8bebdae9d281b14836ade384c389f919219756 100644 --- a/vp9/decoder/vp9_decoder.h +++ b/vp9/decoder/vp9_decoder.h @@ -84,9 +84,9 @@ int vp9_get_reference_dec(struct VP9Decompressor *pbi, int index, YV12_BUFFER_CONFIG **fb); -struct VP9Decompressor *vp9_create_decompressor(const VP9D_CONFIG *oxcf); +struct VP9Decompressor *vp9_decoder_create(const VP9D_CONFIG *oxcf); -void vp9_remove_decompressor(struct VP9Decompressor *pbi); +void vp9_decoder_remove(struct VP9Decompressor *pbi); #ifdef __cplusplus } // extern "C" diff --git a/vp9/vp9_cx_iface.c b/vp9/vp9_cx_iface.c index 37a214e0536593d6e3a1ee240fcc71618f387cd1..dfcec783cc67c3b5e8fc44fdfa076353554c647c 100644 --- a/vp9/vp9_cx_iface.c +++ b/vp9/vp9_cx_iface.c @@ -277,9 +277,8 @@ static vpx_codec_err_t validate_img(vpx_codec_alg_priv_t *ctx, } -static vpx_codec_err_t set_vp9e_config(VP9_CONFIG *oxcf, - const vpx_codec_enc_cfg_t *cfg, - const struct vp9_extracfg *extra_cfg) { +static vpx_codec_err_t set_encoder_config(VP9_CONFIG *oxcf, + const vpx_codec_enc_cfg_t *cfg, const struct vp9_extracfg *extra_cfg) { oxcf->version = cfg->g_profile; oxcf->width = cfg->g_w; oxcf->height = cfg->g_h; @@ -414,8 +413,8 @@ static vpx_codec_err_t set_vp9e_config(VP9_CONFIG *oxcf, return VPX_CODEC_OK; } -static vpx_codec_err_t vp9e_set_config(vpx_codec_alg_priv_t *ctx, - const vpx_codec_enc_cfg_t *cfg) { +static vpx_codec_err_t encoder_set_config(vpx_codec_alg_priv_t *ctx, + const vpx_codec_enc_cfg_t *cfg) { vpx_codec_err_t res; if (cfg->g_w != ctx->cfg.g_w || cfg->g_h != ctx->cfg.g_h) @@ -432,7 +431,7 @@ static vpx_codec_err_t vp9e_set_config(vpx_codec_alg_priv_t *ctx, if (res == VPX_CODEC_OK) { ctx->cfg = *cfg; - set_vp9e_config(&ctx->oxcf, &ctx->cfg, &ctx->extra_cfg); + set_encoder_config(&ctx->oxcf, &ctx->cfg, &ctx->extra_cfg); vp9_change_config(ctx->cpi, &ctx->oxcf); } @@ -443,7 +442,7 @@ static vpx_codec_err_t vp9e_set_config(vpx_codec_alg_priv_t *ctx, int vp9_reverse_trans(int q); -static vpx_codec_err_t get_param(vpx_codec_alg_priv_t *ctx, int ctrl_id, +static vpx_codec_err_t ctrl_get_param(vpx_codec_alg_priv_t *ctx, int ctrl_id, va_list args) { void *arg = va_arg(args, void *); @@ -463,8 +462,8 @@ static vpx_codec_err_t get_param(vpx_codec_alg_priv_t *ctx, int ctrl_id, } -static vpx_codec_err_t set_param(vpx_codec_alg_priv_t *ctx, int ctrl_id, - va_list args) { +static vpx_codec_err_t ctrl_set_param(vpx_codec_alg_priv_t *ctx, int ctrl_id, + va_list args) { vpx_codec_err_t res = VPX_CODEC_OK; struct vp9_extracfg extra_cfg = ctx->extra_cfg; @@ -495,7 +494,7 @@ static vpx_codec_err_t set_param(vpx_codec_alg_priv_t *ctx, int ctrl_id, if (res == VPX_CODEC_OK) { ctx->extra_cfg = extra_cfg; - set_vp9e_config(&ctx->oxcf, &ctx->cfg, &ctx->extra_cfg); + set_encoder_config(&ctx->oxcf, &ctx->cfg, &ctx->extra_cfg); vp9_change_config(ctx->cpi, &ctx->oxcf); } @@ -503,8 +502,7 @@ static vpx_codec_err_t set_param(vpx_codec_alg_priv_t *ctx, int ctrl_id, #undef MAP } - -static vpx_codec_err_t vp9e_common_init(vpx_codec_ctx_t *ctx) { +static vpx_codec_err_t encoder_common_init(vpx_codec_ctx_t *ctx) { vpx_codec_err_t res = VPX_CODEC_OK; if (ctx->priv == NULL) { @@ -555,7 +553,7 @@ static vpx_codec_err_t vp9e_common_init(vpx_codec_ctx_t *ctx) { if (res == VPX_CODEC_OK) { VP9_COMP *cpi; - set_vp9e_config(&ctx->priv->alg_priv->oxcf, + set_encoder_config(&ctx->priv->alg_priv->oxcf, &ctx->priv->alg_priv->cfg, &ctx->priv->alg_priv->extra_cfg); cpi = vp9_create_compressor(&ctx->priv->alg_priv->oxcf); @@ -570,12 +568,12 @@ static vpx_codec_err_t vp9e_common_init(vpx_codec_ctx_t *ctx) { } -static vpx_codec_err_t vp9e_init(vpx_codec_ctx_t *ctx, - vpx_codec_priv_enc_mr_cfg_t *data) { - return vp9e_common_init(ctx); +static vpx_codec_err_t encoder_init(vpx_codec_ctx_t *ctx, + vpx_codec_priv_enc_mr_cfg_t *data) { + return encoder_common_init(ctx); } -static vpx_codec_err_t vp9e_destroy(vpx_codec_alg_priv_t *ctx) { +static vpx_codec_err_t encoder_destroy(vpx_codec_alg_priv_t *ctx) { free(ctx->cx_data); vp9_remove_compressor(ctx->cpi); free(ctx); @@ -653,12 +651,12 @@ static int write_superframe_index(vpx_codec_alg_priv_t *ctx) { return index_sz; } -static vpx_codec_err_t vp9e_encode(vpx_codec_alg_priv_t *ctx, - const vpx_image_t *img, - vpx_codec_pts_t pts, - unsigned long duration, - vpx_enc_frame_flags_t flags, - unsigned long deadline) { +static vpx_codec_err_t encoder_encode(vpx_codec_alg_priv_t *ctx, + const vpx_image_t *img, + vpx_codec_pts_t pts, + unsigned long duration, + vpx_enc_frame_flags_t flags, + unsigned long deadline) { vpx_codec_err_t res = VPX_CODEC_OK; if (img) @@ -850,14 +848,13 @@ static vpx_codec_err_t vp9e_encode(vpx_codec_alg_priv_t *ctx, } -static const vpx_codec_cx_pkt_t *vp9e_get_cxdata(vpx_codec_alg_priv_t *ctx, - vpx_codec_iter_t *iter) { +static const vpx_codec_cx_pkt_t *encoder_get_cxdata(vpx_codec_alg_priv_t *ctx, + vpx_codec_iter_t *iter) { return vpx_codec_pkt_list_get(&ctx->pkt_list.head, iter); } -static vpx_codec_err_t vp9e_set_reference(vpx_codec_alg_priv_t *ctx, - int ctr_id, - va_list args) { +static vpx_codec_err_t ctrl_set_reference(vpx_codec_alg_priv_t *ctx, + int ctr_id, va_list args) { vpx_ref_frame_t *const frame = va_arg(args, vpx_ref_frame_t *); if (frame != NULL) { @@ -872,9 +869,8 @@ static vpx_codec_err_t vp9e_set_reference(vpx_codec_alg_priv_t *ctx, } } -static vpx_codec_err_t vp9e_copy_reference(vpx_codec_alg_priv_t *ctx, - int ctr_id, - va_list args) { +static vpx_codec_err_t ctrl_copy_reference(vpx_codec_alg_priv_t *ctx, + int ctr_id, va_list args) { vpx_ref_frame_t *const frame = va_arg(args, vpx_ref_frame_t *); if (frame != NULL) { @@ -889,9 +885,8 @@ static vpx_codec_err_t vp9e_copy_reference(vpx_codec_alg_priv_t *ctx, } } -static vpx_codec_err_t get_reference(vpx_codec_alg_priv_t *ctx, - int ctr_id, - va_list args) { +static vpx_codec_err_t ctrl_get_reference(vpx_codec_alg_priv_t *ctx, + int ctr_id, va_list args) { vp9_ref_frame_t *frame = va_arg(args, vp9_ref_frame_t *); if (frame != NULL) { @@ -905,9 +900,8 @@ static vpx_codec_err_t get_reference(vpx_codec_alg_priv_t *ctx, } } -static vpx_codec_err_t vp9e_set_previewpp(vpx_codec_alg_priv_t *ctx, - int ctr_id, - va_list args) { +static vpx_codec_err_t ctrl_set_previewpp(vpx_codec_alg_priv_t *ctx, + int ctr_id, va_list args) { #if CONFIG_VP9_POSTPROC vp8_postproc_cfg_t *config = va_arg(args, vp8_postproc_cfg_t *); (void)ctr_id; @@ -927,7 +921,7 @@ static vpx_codec_err_t vp9e_set_previewpp(vpx_codec_alg_priv_t *ctx, } -static vpx_image_t *vp9e_get_preview(vpx_codec_alg_priv_t *ctx) { +static vpx_image_t *encoder_get_preview(vpx_codec_alg_priv_t *ctx) { YV12_BUFFER_CONFIG sd; vp9_ppflags_t flags = {0}; @@ -945,41 +939,36 @@ static vpx_image_t *vp9e_get_preview(vpx_codec_alg_priv_t *ctx) { } } -static vpx_codec_err_t vp9e_update_entropy(vpx_codec_alg_priv_t *ctx, - int ctr_id, - va_list args) { +static vpx_codec_err_t ctrl_update_entropy(vpx_codec_alg_priv_t *ctx, + int ctr_id, va_list args) { const int update = va_arg(args, int); vp9_update_entropy(ctx->cpi, update); return VPX_CODEC_OK; } -static vpx_codec_err_t vp9e_update_reference(vpx_codec_alg_priv_t *ctx, - int ctr_id, - va_list args) { +static vpx_codec_err_t ctrl_update_reference(vpx_codec_alg_priv_t *ctx, + int ctr_id, va_list args) { const int ref_frame_flags = va_arg(args, int); vp9_update_reference(ctx->cpi, ref_frame_flags); return VPX_CODEC_OK; } -static vpx_codec_err_t vp9e_use_reference(vpx_codec_alg_priv_t *ctx, - int ctr_id, - va_list args) { +static vpx_codec_err_t ctrl_use_reference(vpx_codec_alg_priv_t *ctx, + int ctr_id, va_list args) { const int reference_flag = va_arg(args, int); vp9_use_as_reference(ctx->cpi, reference_flag); return VPX_CODEC_OK; } -static vpx_codec_err_t vp9e_set_roi_map(vpx_codec_alg_priv_t *ctx, - int ctr_id, - va_list args) { +static vpx_codec_err_t ctrl_set_roi_map(vpx_codec_alg_priv_t *ctx, + int ctr_id, va_list args) { // TODO(yaowu): Need to re-implement and test for VP9. return VPX_CODEC_INVALID_PARAM; } -static vpx_codec_err_t vp9e_set_activemap(vpx_codec_alg_priv_t *ctx, - int ctr_id, - va_list args) { +static vpx_codec_err_t ctrl_set_active_map(vpx_codec_alg_priv_t *ctx, + int ctr_id, va_list args) { vpx_active_map_t *const map = va_arg(args, vpx_active_map_t *); if (map) { @@ -992,8 +981,8 @@ static vpx_codec_err_t vp9e_set_activemap(vpx_codec_alg_priv_t *ctx, } } -static vpx_codec_err_t vp9e_set_scalemode(vpx_codec_alg_priv_t *ctx, - int ctr_id, va_list args) { +static vpx_codec_err_t ctrl_set_scale_mode(vpx_codec_alg_priv_t *ctx, + int ctr_id, va_list args) { vpx_scaling_mode_t *const mode = va_arg(args, vpx_scaling_mode_t *); if (mode) { @@ -1006,7 +995,7 @@ static vpx_codec_err_t vp9e_set_scalemode(vpx_codec_alg_priv_t *ctx, } } -static vpx_codec_err_t vp9e_set_svc(vpx_codec_alg_priv_t *ctx, int ctr_id, +static vpx_codec_err_t ctrl_set_svc(vpx_codec_alg_priv_t *ctx, int ctr_id, va_list args) { int data = va_arg(args, int); const vpx_codec_enc_cfg_t *cfg = &ctx->cfg; @@ -1024,7 +1013,7 @@ static vpx_codec_err_t vp9e_set_svc(vpx_codec_alg_priv_t *ctx, int ctr_id, return VPX_CODEC_OK; } -static vpx_codec_err_t vp9e_set_svc_layer_id(vpx_codec_alg_priv_t *ctx, +static vpx_codec_err_t ctrl_set_svc_layer_id(vpx_codec_alg_priv_t *ctx, int ctr_id, va_list args) { vpx_svc_layer_id_t *const data = va_arg(args, vpx_svc_layer_id_t *); @@ -1044,7 +1033,7 @@ static vpx_codec_err_t vp9e_set_svc_layer_id(vpx_codec_alg_priv_t *ctx, return VPX_CODEC_OK; } -static vpx_codec_err_t vp9e_set_svc_parameters(vpx_codec_alg_priv_t *ctx, +static vpx_codec_err_t ctrl_set_svc_parameters(vpx_codec_alg_priv_t *ctx, int ctr_id, va_list args) { VP9_COMP *const cpi = ctx->cpi; vpx_svc_parameters_t *const params = va_arg(args, vpx_svc_parameters_t *); @@ -1065,135 +1054,139 @@ static vpx_codec_err_t vp9e_set_svc_parameters(vpx_codec_alg_priv_t *ctx, ctx->cfg.rc_max_quantizer = params->max_quantizer; ctx->cfg.rc_min_quantizer = params->min_quantizer; - set_vp9e_config(&ctx->oxcf, &ctx->cfg, &ctx->extra_cfg); + set_encoder_config(&ctx->oxcf, &ctx->cfg, &ctx->extra_cfg); vp9_change_config(ctx->cpi, &ctx->oxcf); 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}, - {VP8_SET_POSTPROC, vp9e_set_previewpp}, - {VP8E_UPD_ENTROPY, vp9e_update_entropy}, - {VP8E_UPD_REFERENCE, vp9e_update_reference}, - {VP8E_USE_REFERENCE, vp9e_use_reference}, - {VP8E_SET_ROI_MAP, vp9e_set_roi_map}, - {VP8E_SET_ACTIVEMAP, vp9e_set_activemap}, - {VP8E_SET_SCALEMODE, vp9e_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}, - {VP9E_SET_TILE_COLUMNS, set_param}, - {VP9E_SET_TILE_ROWS, 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}, - {VP9E_SET_LOSSLESS, set_param}, - {VP9E_SET_FRAME_PARALLEL_DECODING, set_param}, - {VP9E_SET_AQ_MODE, set_param}, - {VP9E_SET_FRAME_PERIODIC_BOOST, set_param}, - {VP9_GET_REFERENCE, get_reference}, - {VP9E_SET_SVC, vp9e_set_svc}, - {VP9E_SET_SVC_PARAMETERS, vp9e_set_svc_parameters}, - {VP9E_SET_SVC_LAYER_ID, vp9e_set_svc_layer_id}, +static vpx_codec_ctrl_fn_map_t encoder_ctrl_maps[] = { + {VP8_COPY_REFERENCE, ctrl_copy_reference}, + {VP8E_UPD_ENTROPY, ctrl_update_entropy}, + {VP8E_UPD_REFERENCE, ctrl_update_reference}, + {VP8E_USE_REFERENCE, ctrl_use_reference}, + + // Setters + {VP8_SET_REFERENCE, ctrl_set_reference}, + {VP8_SET_POSTPROC, ctrl_set_previewpp}, + {VP8E_SET_ROI_MAP, ctrl_set_roi_map}, + {VP8E_SET_ACTIVEMAP, ctrl_set_active_map}, + {VP8E_SET_SCALEMODE, ctrl_set_scale_mode}, + {VP8E_SET_CPUUSED, ctrl_set_param}, + {VP8E_SET_NOISE_SENSITIVITY, ctrl_set_param}, + {VP8E_SET_ENABLEAUTOALTREF, ctrl_set_param}, + {VP8E_SET_SHARPNESS, ctrl_set_param}, + {VP8E_SET_STATIC_THRESHOLD, ctrl_set_param}, + {VP9E_SET_TILE_COLUMNS, ctrl_set_param}, + {VP9E_SET_TILE_ROWS, ctrl_set_param}, + {VP8E_SET_ARNR_MAXFRAMES, ctrl_set_param}, + {VP8E_SET_ARNR_STRENGTH, ctrl_set_param}, + {VP8E_SET_ARNR_TYPE, ctrl_set_param}, + {VP8E_SET_TUNING, ctrl_set_param}, + {VP8E_SET_CQ_LEVEL, ctrl_set_param}, + {VP8E_SET_MAX_INTRA_BITRATE_PCT, ctrl_set_param}, + {VP9E_SET_LOSSLESS, ctrl_set_param}, + {VP9E_SET_FRAME_PARALLEL_DECODING, ctrl_set_param}, + {VP9E_SET_AQ_MODE, ctrl_set_param}, + {VP9E_SET_FRAME_PERIODIC_BOOST, ctrl_set_param}, + {VP9E_SET_SVC, ctrl_set_svc}, + {VP9E_SET_SVC_PARAMETERS, ctrl_set_svc_parameters}, + {VP9E_SET_SVC_LAYER_ID, ctrl_set_svc_layer_id}, + + // Getters + {VP8E_GET_LAST_QUANTIZER, ctrl_get_param}, + {VP8E_GET_LAST_QUANTIZER_64, ctrl_get_param}, + {VP9_GET_REFERENCE, ctrl_get_reference}, + { -1, NULL}, }; -static vpx_codec_enc_cfg_map_t vp9e_usage_cfg_map[] = { +static vpx_codec_enc_cfg_map_t encoder_usage_cfg_map[] = { { 0, { // NOLINT - 0, /* g_usage */ - 0, /* g_threads */ - 0, /* g_profile */ + 0, // g_usage + 0, // g_threads + 0, // g_profile - 320, /* g_width */ - 240, /* g_height */ - {1, 30}, /* g_timebase */ + 320, // g_width + 240, // g_height + {1, 30}, // g_timebase - 0, /* g_error_resilient */ + 0, // g_error_resilient - VPX_RC_ONE_PASS, /* g_pass */ + VPX_RC_ONE_PASS, // g_pass - 25, /* g_lag_in_frames */ + 25, // g_lag_in_frames - 0, /* rc_dropframe_thresh */ - 0, /* rc_resize_allowed */ - 60, /* rc_resize_down_thresold */ - 30, /* rc_resize_up_thresold */ + 0, // rc_dropframe_thresh + 0, // rc_resize_allowed + 60, // rc_resize_down_thresold + 30, // rc_resize_up_thresold - VPX_VBR, /* rc_end_usage */ + VPX_VBR, // rc_end_usage #if VPX_ENCODER_ABI_VERSION > (1 + VPX_CODEC_ABI_VERSION) - {0}, /* rc_twopass_stats_in */ + {0}, // rc_twopass_stats_in #endif - 256, /* rc_target_bandwidth */ - 0, /* rc_min_quantizer */ - 63, /* rc_max_quantizer */ - 100, /* rc_undershoot_pct */ - 100, /* rc_overshoot_pct */ - - 6000, /* rc_max_buffer_size */ - 4000, /* rc_buffer_initial_size; */ - 5000, /* rc_buffer_optimal_size; */ - - 50, /* rc_two_pass_vbrbias */ - 0, /* rc_two_pass_vbrmin_section */ - 2000, /* rc_two_pass_vbrmax_section */ - - /* keyframing settings (kf) */ - VPX_KF_AUTO, /* g_kfmode*/ - 0, /* kf_min_dist */ - 9999, /* kf_max_dist */ - - VPX_SS_DEFAULT_LAYERS, /* ss_number_layers */ - {0}, /* ss_target_bitrate */ - 1, /* ts_number_layers */ - {0}, /* ts_target_bitrate */ - {0}, /* ts_rate_decimator */ - 0, /* ts_periodicity */ - {0}, /* ts_layer_id */ + 256, // rc_target_bandwidth + 0, // rc_min_quantizer + 63, // rc_max_quantizer + 100, // rc_undershoot_pct + 100, // rc_overshoot_pct + + 6000, // rc_max_buffer_size + 4000, // rc_buffer_initial_size + 5000, // rc_buffer_optimal_size + + 50, // rc_two_pass_vbrbias + 0, // rc_two_pass_vbrmin_section + 2000, // rc_two_pass_vbrmax_section + + // keyframing settings (kf) + VPX_KF_AUTO, // g_kfmode + 0, // kf_min_dist + 9999, // kf_max_dist + + VPX_SS_DEFAULT_LAYERS, // ss_number_layers + {0}, // ss_target_bitrate + 1, // ts_number_layers + {0}, // ts_target_bitrate + {0}, // ts_rate_decimator + 0, // ts_periodicity + {0}, // ts_layer_id #if VPX_ENCODER_ABI_VERSION == (1 + VPX_CODEC_ABI_VERSION) - "vp8.fpf" /* first pass filename */ + "vp8.fpf" // first pass filename #endif } }, { -1, {NOT_IMPLEMENTED}} }; - #ifndef VERSION_STRING #define VERSION_STRING #endif CODEC_INTERFACE(vpx_codec_vp9_cx) = { "WebM Project VP9 Encoder" VERSION_STRING, VPX_CODEC_INTERNAL_ABI_VERSION, - VPX_CODEC_CAP_ENCODER | VPX_CODEC_CAP_PSNR, - /* vpx_codec_caps_t caps; */ - vp9e_init, /* vpx_codec_init_fn_t init; */ - vp9e_destroy, /* vpx_codec_destroy_fn_t destroy; */ - vp9e_ctf_maps, /* vpx_codec_ctrl_fn_map_t *ctrl_maps; */ - NOT_IMPLEMENTED, /* vpx_codec_get_mmap_fn_t get_mmap; */ - NOT_IMPLEMENTED, /* vpx_codec_set_mmap_fn_t set_mmap; */ + VPX_CODEC_CAP_ENCODER | VPX_CODEC_CAP_PSNR, // vpx_codec_caps_t + encoder_init, // vpx_codec_init_fn_t + encoder_destroy, // vpx_codec_destroy_fn_t + encoder_ctrl_maps, // vpx_codec_ctrl_fn_map_t + NOT_IMPLEMENTED, // vpx_codec_get_mmap_fn_t + NOT_IMPLEMENTED, // vpx_codec_set_mmap_fn_t { // NOLINT - NOT_IMPLEMENTED, /* vpx_codec_peek_si_fn_t peek_si; */ - NOT_IMPLEMENTED, /* vpx_codec_get_si_fn_t get_si; */ - NOT_IMPLEMENTED, /* vpx_codec_decode_fn_t decode; */ - NOT_IMPLEMENTED, /* vpx_codec_frame_get_fn_t frame_get; */ + NOT_IMPLEMENTED, // vpx_codec_peek_si_fn_t + NOT_IMPLEMENTED, // vpx_codec_get_si_fn_t + NOT_IMPLEMENTED, // vpx_codec_decode_fn_t + NOT_IMPLEMENTED, // vpx_codec_frame_get_fn_t }, { // NOLINT - vp9e_usage_cfg_map, /* vpx_codec_enc_cfg_map_t peek_si; */ - vp9e_encode, /* vpx_codec_encode_fn_t encode; */ - vp9e_get_cxdata, /* vpx_codec_get_cx_data_fn_t frame_get; */ - vp9e_set_config, - NOT_IMPLEMENTED, - vp9e_get_preview, - } /* encoder functions */ + encoder_usage_cfg_map, // vpx_codec_enc_cfg_map_t + encoder_encode, // vpx_codec_encode_fn_t + encoder_get_cxdata, // vpx_codec_get_cx_data_fn_t + encoder_set_config, // vpx_codec_enc_config_set_fn_t + NOT_IMPLEMENTED, // vpx_codec_get_global_headers_fn_t + encoder_get_preview, // vpx_codec_get_preview_frame_fn_t + NOT_IMPLEMENTED , // vpx_codec_enc_mr_get_mem_loc_fn_t + } }; diff --git a/vp9/vp9_dx_iface.c b/vp9/vp9_dx_iface.c index 7272205d919ddd3deb01d2cce0f92740717ba1bb..2163b7bae50c305cc2dfc9f508f31e346227a1a3 100644 --- a/vp9/vp9_dx_iface.c +++ b/vp9/vp9_dx_iface.c @@ -8,20 +8,25 @@ * be found in the AUTHORS file in the root of the source tree. */ - #include <stdlib.h> #include <string.h> -#include "vpx/vpx_decoder.h" -#include "vpx/vp8dx.h" -#include "vpx/internal/vpx_codec_internal.h" + #include "./vpx_version.h" + +#include "vpx/internal/vpx_codec_internal.h" +#include "vpx/vp8dx.h" +#include "vpx/vpx_decoder.h" + #include "vp9/common/vp9_frame_buffers.h" + #include "vp9/decoder/vp9_decoder.h" #include "vp9/decoder/vp9_read_bit_buffer.h" + #include "vp9/vp9_iface_common.h" #define VP9_CAP_POSTPROC (CONFIG_VP9_POSTPROC ? VPX_CODEC_CAP_POSTPROC : 0) -typedef vpx_codec_stream_info_t vp9_stream_info_t; + +typedef vpx_codec_stream_info_t vp9_stream_info_t; struct vpx_codec_alg_priv { vpx_codec_priv_t base; @@ -49,21 +54,22 @@ struct vpx_codec_alg_priv { vpx_release_frame_buffer_cb_fn_t release_ext_fb_cb; }; -static vpx_codec_err_t vp9_init(vpx_codec_ctx_t *ctx, - vpx_codec_priv_enc_mr_cfg_t *data) { +static vpx_codec_err_t decoder_init(vpx_codec_ctx_t *ctx, + vpx_codec_priv_enc_mr_cfg_t *data) { // This function only allocates space for the vpx_codec_alg_priv_t // structure. More memory may be required at the time the stream // information becomes known. if (!ctx->priv) { - void *base = vpx_memalign(32, sizeof(vpx_codec_alg_priv_t)); - if (base == NULL) + vpx_codec_alg_priv_t *alg_priv = vpx_memalign(32, sizeof(*alg_priv)); + if (alg_priv == NULL) return VPX_CODEC_MEM_ERROR; - memset(base, 0, sizeof(vpx_codec_alg_priv_t)); - ctx->priv = (vpx_codec_priv_t *)base; + vp9_zero(*alg_priv); + + ctx->priv = (vpx_codec_priv_t *)alg_priv; ctx->priv->sz = sizeof(*ctx->priv); ctx->priv->iface = ctx->iface; - ctx->priv->alg_priv = (vpx_codec_alg_priv_t *)base; + ctx->priv->alg_priv = alg_priv; ctx->priv->alg_priv->si.sz = sizeof(ctx->priv->alg_priv->si); ctx->priv->init_flags = ctx->init_flags; @@ -77,17 +83,23 @@ static vpx_codec_err_t vp9_init(vpx_codec_ctx_t *ctx, return VPX_CODEC_OK; } -static vpx_codec_err_t vp9_destroy(vpx_codec_alg_priv_t *ctx) { - if (ctx->pbi) - vp9_remove_decompressor(ctx->pbi); +static vpx_codec_err_t decoder_destroy(vpx_codec_alg_priv_t *ctx) { + if (ctx->pbi) { + vp9_decoder_remove(ctx->pbi); + ctx->pbi = NULL; + } return VPX_CODEC_OK; } -static vpx_codec_err_t vp9_peek_si(const uint8_t *data, unsigned int data_sz, - vpx_codec_stream_info_t *si) { - if (data_sz <= 8) return VPX_CODEC_UNSUP_BITSTREAM; - if (data + data_sz <= data) return VPX_CODEC_INVALID_PARAM; +static vpx_codec_err_t decoder_peek_si(const uint8_t *data, + unsigned int data_sz, + vpx_codec_stream_info_t *si) { + if (data_sz <= 8) + return VPX_CODEC_UNSUP_BITSTREAM; + + if (data + data_sz <= data) + return VPX_CODEC_INVALID_PARAM; si->is_kf = 0; si->w = si->h = 0; @@ -145,8 +157,8 @@ static vpx_codec_err_t vp9_peek_si(const uint8_t *data, unsigned int data_sz, return VPX_CODEC_OK; } -static vpx_codec_err_t vp9_get_si(vpx_codec_alg_priv_t *ctx, - vpx_codec_stream_info_t *si) { +static vpx_codec_err_t decoder_get_si(vpx_codec_alg_priv_t *ctx, + vpx_codec_stream_info_t *si) { const size_t sz = (si->sz >= sizeof(vp9_stream_info_t)) ? sizeof(vp9_stream_info_t) : sizeof(vpx_codec_stream_info_t); @@ -156,7 +168,6 @@ static vpx_codec_err_t vp9_get_si(vpx_codec_alg_priv_t *ctx, return VPX_CODEC_OK; } - static vpx_codec_err_t update_error_state(vpx_codec_alg_priv_t *ctx, const struct vpx_internal_error_info *error) { if (error->error_code) @@ -168,7 +179,7 @@ static vpx_codec_err_t update_error_state(vpx_codec_alg_priv_t *ctx, static void init_buffer_callbacks(vpx_codec_alg_priv_t *ctx) { VP9_COMMON *const cm = &ctx->pbi->common; - cm->new_fb_idx = -1; // Set index to not initialized. + cm->new_fb_idx = -1; if (ctx->get_ext_fb_cb != NULL && ctx->release_ext_fb_cb != NULL) { cm->get_fb_cb = ctx->get_ext_fb_cb; @@ -221,7 +232,7 @@ static void init_decoder(vpx_codec_alg_priv_t *ctx) { oxcf.max_threads = ctx->cfg.threads; oxcf.inv_tile_order = ctx->invert_tile_order; - ctx->pbi = vp9_create_decompressor(&oxcf); + ctx->pbi = vp9_decoder_create(&oxcf); if (ctx->pbi == NULL) return; @@ -299,7 +310,7 @@ static void parse_superframe_index(const uint8_t *data, size_t data_sz, if (data_sz >= index_sz && data[data_sz - index_sz] == marker) { // found a valid superframe index uint32_t i, j; - const uint8_t *x = data + data_sz - index_sz + 1; + const uint8_t *x = &data[data_sz - index_sz + 1]; for (i = 0; i < frames; i++) { uint32_t this_sz = 0; @@ -314,18 +325,17 @@ static void parse_superframe_index(const uint8_t *data, size_t data_sz, } } -static vpx_codec_err_t vp9_decode(vpx_codec_alg_priv_t *ctx, - const uint8_t *data, - unsigned int data_sz, - void *user_priv, - long deadline) { +static vpx_codec_err_t decoder_decode(vpx_codec_alg_priv_t *ctx, + const uint8_t *data, unsigned int data_sz, + void *user_priv, long deadline) { const uint8_t *data_start = data; const uint8_t *data_end = data + data_sz; vpx_codec_err_t res = VPX_CODEC_OK; uint32_t sizes[8]; int frames_this_pts, frame_count = 0; - if (data == NULL || data_sz == 0) return VPX_CODEC_INVALID_PARAM; + if (data == NULL || data_sz == 0) + return VPX_CODEC_INVALID_PARAM; parse_superframe_index(data, data_sz, sizes, &frames_this_pts); @@ -364,27 +374,27 @@ static vpx_codec_err_t vp9_decode(vpx_codec_alg_priv_t *ctx, assert(data_start >= data); assert(data_start <= data_end); - /* Early exit if there was a decode error */ + // Early exit if there was a decode error if (res) break; - /* Account for suboptimal termination by the encoder. */ + // Account for suboptimal termination by the encoder. while (data_start < data_end && *data_start == 0) data_start++; data_sz = (unsigned int)(data_end - data_start); } while (data_start < data_end); + return res; } -static vpx_image_t *vp9_get_frame(vpx_codec_alg_priv_t *ctx, - vpx_codec_iter_t *iter) { +static vpx_image_t *decoder_get_frame(vpx_codec_alg_priv_t *ctx, + vpx_codec_iter_t *iter) { vpx_image_t *img = NULL; if (ctx->img_avail) { - /* iter acts as a flip flop, so an image is only returned on the first - * call to get_frame. - */ + // iter acts as a flip flop, so an image is only returned on the first + // call to get_frame. if (!(*iter)) { img = &ctx->img; *iter = img; @@ -395,7 +405,7 @@ static vpx_image_t *vp9_get_frame(vpx_codec_alg_priv_t *ctx, return img; } -static vpx_codec_err_t vp9_set_fb_fn( +static vpx_codec_err_t decoder_set_fb_fn( vpx_codec_alg_priv_t *ctx, vpx_get_frame_buffer_cb_fn_t cb_get, vpx_release_frame_buffer_cb_fn_t cb_release, void *cb_priv) { @@ -413,8 +423,8 @@ static vpx_codec_err_t vp9_set_fb_fn( return VPX_CODEC_ERROR; } -static vpx_codec_err_t set_reference(vpx_codec_alg_priv_t *ctx, int ctr_id, - va_list args) { +static vpx_codec_err_t ctrl_set_reference(vpx_codec_alg_priv_t *ctx, + int ctr_id, va_list args) { vpx_ref_frame_t *const data = va_arg(args, vpx_ref_frame_t *); if (data) { @@ -429,8 +439,8 @@ static vpx_codec_err_t set_reference(vpx_codec_alg_priv_t *ctx, int ctr_id, } } -static vpx_codec_err_t copy_reference(vpx_codec_alg_priv_t *ctx, int ctr_id, - va_list args) { +static vpx_codec_err_t ctrl_copy_reference(vpx_codec_alg_priv_t *ctx, + int ctr_id, va_list args) { vpx_ref_frame_t *data = va_arg(args, vpx_ref_frame_t *); if (data) { @@ -446,8 +456,8 @@ static vpx_codec_err_t copy_reference(vpx_codec_alg_priv_t *ctx, int ctr_id, } } -static vpx_codec_err_t get_reference(vpx_codec_alg_priv_t *ctx, int ctr_id, - va_list args) { +static vpx_codec_err_t ctrl_get_reference(vpx_codec_alg_priv_t *ctx, + int ctr_id, va_list args) { vp9_ref_frame_t *data = va_arg(args, vp9_ref_frame_t *); if (data) { @@ -461,8 +471,8 @@ static vpx_codec_err_t get_reference(vpx_codec_alg_priv_t *ctx, int ctr_id, } } -static vpx_codec_err_t set_postproc(vpx_codec_alg_priv_t *ctx, int ctr_id, - va_list args) { +static vpx_codec_err_t ctrl_set_postproc(vpx_codec_alg_priv_t *ctx, + int ctr_id, va_list args) { #if CONFIG_VP9_POSTPROC vp8_postproc_cfg_t *data = va_arg(args, vp8_postproc_cfg_t *); @@ -478,8 +488,8 @@ static vpx_codec_err_t set_postproc(vpx_codec_alg_priv_t *ctx, int ctr_id, #endif } -static vpx_codec_err_t set_dbg_options(vpx_codec_alg_priv_t *ctx, int ctrl_id, - va_list args) { +static vpx_codec_err_t ctrl_set_dbg_options(vpx_codec_alg_priv_t *ctx, + int ctrl_id, va_list args) { #if CONFIG_POSTPROC_VISUALIZER && CONFIG_POSTPROC int data = va_arg(args, int); @@ -498,8 +508,8 @@ static vpx_codec_err_t set_dbg_options(vpx_codec_alg_priv_t *ctx, int ctrl_id, #endif } -static vpx_codec_err_t get_last_ref_updates(vpx_codec_alg_priv_t *ctx, - int ctrl_id, va_list args) { +static vpx_codec_err_t ctrl_get_last_ref_updates(vpx_codec_alg_priv_t *ctx, + int ctrl_id, va_list args) { int *const update_info = va_arg(args, int *); if (update_info) { @@ -514,8 +524,8 @@ static vpx_codec_err_t get_last_ref_updates(vpx_codec_alg_priv_t *ctx, } -static vpx_codec_err_t get_frame_corrupted(vpx_codec_alg_priv_t *ctx, - int ctrl_id, va_list args) { +static vpx_codec_err_t ctrl_get_frame_corrupted(vpx_codec_alg_priv_t *ctx, + int ctrl_id, va_list args) { int *corrupted = va_arg(args, int *); if (corrupted) { @@ -529,8 +539,8 @@ static vpx_codec_err_t get_frame_corrupted(vpx_codec_alg_priv_t *ctx, } } -static vpx_codec_err_t get_display_size(vpx_codec_alg_priv_t *ctx, - int ctrl_id, va_list args) { +static vpx_codec_err_t ctrl_get_display_size(vpx_codec_alg_priv_t *ctx, + int ctrl_id, va_list args) { int *const display_size = va_arg(args, int *); if (display_size) { @@ -547,30 +557,33 @@ static vpx_codec_err_t get_display_size(vpx_codec_alg_priv_t *ctx, } } -static vpx_codec_err_t set_invert_tile_order(vpx_codec_alg_priv_t *ctx, - int ctr_id, - va_list args) { +static vpx_codec_err_t ctrl_set_invert_tile_order(vpx_codec_alg_priv_t *ctx, + int ctr_id, va_list args) { ctx->invert_tile_order = va_arg(args, int); return VPX_CODEC_OK; } -static vpx_codec_ctrl_fn_map_t ctf_maps[] = { - {VP8_SET_REFERENCE, set_reference}, - {VP8_COPY_REFERENCE, copy_reference}, - {VP8_SET_POSTPROC, set_postproc}, - {VP8_SET_DBG_COLOR_REF_FRAME, set_dbg_options}, - {VP8_SET_DBG_COLOR_MB_MODES, set_dbg_options}, - {VP8_SET_DBG_COLOR_B_MODES, set_dbg_options}, - {VP8_SET_DBG_DISPLAY_MV, set_dbg_options}, - {VP8D_GET_LAST_REF_UPDATES, get_last_ref_updates}, - {VP8D_GET_FRAME_CORRUPTED, get_frame_corrupted}, - {VP9_GET_REFERENCE, get_reference}, - {VP9D_GET_DISPLAY_SIZE, get_display_size}, - {VP9_INVERT_TILE_DECODE_ORDER, set_invert_tile_order}, +static vpx_codec_ctrl_fn_map_t decoder_ctrl_maps[] = { + {VP8_COPY_REFERENCE, ctrl_copy_reference}, + + // Setters + {VP8_SET_REFERENCE, ctrl_set_reference}, + {VP8_SET_POSTPROC, ctrl_set_postproc}, + {VP8_SET_DBG_COLOR_REF_FRAME, ctrl_set_dbg_options}, + {VP8_SET_DBG_COLOR_MB_MODES, ctrl_set_dbg_options}, + {VP8_SET_DBG_COLOR_B_MODES, ctrl_set_dbg_options}, + {VP8_SET_DBG_DISPLAY_MV, ctrl_set_dbg_options}, + {VP9_INVERT_TILE_DECODE_ORDER, ctrl_set_invert_tile_order}, + + // Getters + {VP8D_GET_LAST_REF_UPDATES, ctrl_get_last_ref_updates}, + {VP8D_GET_FRAME_CORRUPTED, ctrl_get_frame_corrupted}, + {VP9_GET_REFERENCE, ctrl_get_reference}, + {VP9D_GET_DISPLAY_SIZE, ctrl_get_display_size}, + { -1, NULL}, }; - #ifndef VERSION_STRING #define VERSION_STRING #endif @@ -578,22 +591,20 @@ CODEC_INTERFACE(vpx_codec_vp9_dx) = { "WebM Project VP9 Decoder" VERSION_STRING, VPX_CODEC_INTERNAL_ABI_VERSION, VPX_CODEC_CAP_DECODER | VP9_CAP_POSTPROC | - VPX_CODEC_CAP_EXTERNAL_FRAME_BUFFER, - /* vpx_codec_caps_t caps; */ - vp9_init, /* vpx_codec_init_fn_t init; */ - vp9_destroy, /* vpx_codec_destroy_fn_t destroy; */ - ctf_maps, /* vpx_codec_ctrl_fn_map_t *ctrl_maps; */ - NOT_IMPLEMENTED, /* vpx_codec_get_mmap_fn_t get_mmap; */ - NOT_IMPLEMENTED, /* vpx_codec_set_mmap_fn_t set_mmap; */ + VPX_CODEC_CAP_EXTERNAL_FRAME_BUFFER, // vpx_codec_caps_t + decoder_init, // vpx_codec_init_fn_t + decoder_destroy, // vpx_codec_destroy_fn_t + decoder_ctrl_maps, // vpx_codec_ctrl_fn_map_t + NOT_IMPLEMENTED, // vpx_codec_get_mmap_fn_t + NOT_IMPLEMENTED, // vpx_codec_set_mmap_fn_t { // NOLINT - vp9_peek_si, /* vpx_codec_peek_si_fn_t peek_si; */ - vp9_get_si, /* vpx_codec_get_si_fn_t get_si; */ - vp9_decode, /* vpx_codec_decode_fn_t decode; */ - vp9_get_frame, /* vpx_codec_frame_get_fn_t frame_get; */ - vp9_set_fb_fn, /* vpx_codec_set_fb_fn_t set_fb_fn; */ + decoder_peek_si, // vpx_codec_peek_si_fn_t + decoder_get_si, // vpx_codec_get_si_fn_t + decoder_decode, // vpx_codec_decode_fn_t + decoder_get_frame, // vpx_codec_frame_get_fn_t + decoder_set_fb_fn, // vpx_codec_set_fb_fn_t }, { // NOLINT - /* encoder functions */ NOT_IMPLEMENTED, NOT_IMPLEMENTED, NOT_IMPLEMENTED,