Merge "Cleaning up vp9_{cx, dx}_iface.c files."

This commit is contained in:
Dmitry Kovalev 2014-04-07 13:06:01 -07:00 committed by Gerrit Code Review
commit 1e96d3a50e
5 changed files with 252 additions and 246 deletions

View File

@ -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

View File

@ -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;

View File

@ -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"

View File

@ -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 */
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; */
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 */
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 */
// 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 */
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
}
};

View File

@ -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,