Merge "Cleaning up vp9_{cx, dx}_iface.c files."
This commit is contained in:
commit
1e96d3a50e
@ -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
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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"
|
||||
|
@ -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
|
||||
}
|
||||
};
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user