VP9E_GET_ACTIVE_MAP API function.
This is useful when aq mode 3 (cyclic refresh) reactivates segments for refresh. Change-Id: I3ad1d9410b899ede393d82bb8db14e2da4d84eca
This commit is contained in:
parent
a1e20ec58f
commit
4dcb839607
@ -183,6 +183,33 @@ int vp9_set_active_map(VP9_COMP* cpi,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int vp9_get_active_map(VP9_COMP* cpi,
|
||||||
|
unsigned char* new_map_16x16,
|
||||||
|
int rows,
|
||||||
|
int cols) {
|
||||||
|
if (rows == cpi->common.mb_rows && cols == cpi->common.mb_cols &&
|
||||||
|
new_map_16x16) {
|
||||||
|
unsigned char* const seg_map_8x8 = cpi->segmentation_map;
|
||||||
|
const int mi_rows = cpi->common.mi_rows;
|
||||||
|
const int mi_cols = cpi->common.mi_cols;
|
||||||
|
vpx_memset(new_map_16x16, !cpi->active_map.enabled, rows * cols);
|
||||||
|
if (cpi->active_map.enabled) {
|
||||||
|
int r, c;
|
||||||
|
for (r = 0; r < mi_rows; ++r) {
|
||||||
|
for (c = 0; c < mi_cols; ++c) {
|
||||||
|
// Cyclic refresh segments are considered active despite not having
|
||||||
|
// AM_SEGMENT_ID_ACTIVE
|
||||||
|
new_map_16x16[(r >> 1) * cols + (c >> 1)] |=
|
||||||
|
seg_map_8x8[r * mi_cols + c] != AM_SEGMENT_ID_INACTIVE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void vp9_set_high_precision_mv(VP9_COMP *cpi, int allow_high_precision_mv) {
|
void vp9_set_high_precision_mv(VP9_COMP *cpi, int allow_high_precision_mv) {
|
||||||
MACROBLOCK *const mb = &cpi->td.mb;
|
MACROBLOCK *const mb = &cpi->td.mb;
|
||||||
cpi->common.allow_high_precision_mv = allow_high_precision_mv;
|
cpi->common.allow_high_precision_mv = allow_high_precision_mv;
|
||||||
|
@ -508,6 +508,8 @@ int vp9_update_entropy(VP9_COMP *cpi, int update);
|
|||||||
|
|
||||||
int vp9_set_active_map(VP9_COMP *cpi, unsigned char *map, int rows, int cols);
|
int vp9_set_active_map(VP9_COMP *cpi, unsigned char *map, int rows, int cols);
|
||||||
|
|
||||||
|
int vp9_get_active_map(VP9_COMP *cpi, unsigned char *map, int rows, int cols);
|
||||||
|
|
||||||
int vp9_set_internal_size(VP9_COMP *cpi,
|
int vp9_set_internal_size(VP9_COMP *cpi,
|
||||||
VPX_SCALING horiz_mode, VPX_SCALING vert_mode);
|
VPX_SCALING horiz_mode, VPX_SCALING vert_mode);
|
||||||
|
|
||||||
|
@ -1260,6 +1260,21 @@ static vpx_codec_err_t ctrl_set_active_map(vpx_codec_alg_priv_t *ctx,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static vpx_codec_err_t ctrl_get_active_map(vpx_codec_alg_priv_t *ctx,
|
||||||
|
va_list args) {
|
||||||
|
vpx_active_map_t *const map = va_arg(args, vpx_active_map_t *);
|
||||||
|
|
||||||
|
if (map) {
|
||||||
|
if (!vp9_get_active_map(ctx->cpi, map->active_map,
|
||||||
|
(int)map->rows, (int)map->cols))
|
||||||
|
return VPX_CODEC_OK;
|
||||||
|
else
|
||||||
|
return VPX_CODEC_INVALID_PARAM;
|
||||||
|
} else {
|
||||||
|
return VPX_CODEC_INVALID_PARAM;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static vpx_codec_err_t ctrl_set_scale_mode(vpx_codec_alg_priv_t *ctx,
|
static vpx_codec_err_t ctrl_set_scale_mode(vpx_codec_alg_priv_t *ctx,
|
||||||
va_list args) {
|
va_list args) {
|
||||||
vpx_scaling_mode_t *const mode = va_arg(args, vpx_scaling_mode_t *);
|
vpx_scaling_mode_t *const mode = va_arg(args, vpx_scaling_mode_t *);
|
||||||
@ -1417,6 +1432,7 @@ static vpx_codec_ctrl_fn_map_t encoder_ctrl_maps[] = {
|
|||||||
#if VPX_ENCODER_ABI_VERSION > (4 + VPX_CODEC_ABI_VERSION)
|
#if VPX_ENCODER_ABI_VERSION > (4 + VPX_CODEC_ABI_VERSION)
|
||||||
{VP9E_GET_SVC_LAYER_ID, ctrl_get_svc_layer_id},
|
{VP9E_GET_SVC_LAYER_ID, ctrl_get_svc_layer_id},
|
||||||
#endif
|
#endif
|
||||||
|
{VP9E_GET_ACTIVEMAP, ctrl_get_active_map},
|
||||||
|
|
||||||
{ -1, NULL},
|
{ -1, NULL},
|
||||||
};
|
};
|
||||||
|
@ -508,6 +508,12 @@ enum vp8e_enc_control_id {
|
|||||||
* Supported in codecs: VP9
|
* Supported in codecs: VP9
|
||||||
*/
|
*/
|
||||||
VP9E_SET_COLOR_SPACE,
|
VP9E_SET_COLOR_SPACE,
|
||||||
|
|
||||||
|
/*!\brief Codec control function to get an Active map back from the encoder.
|
||||||
|
*
|
||||||
|
* Supported in codecs: VP9
|
||||||
|
*/
|
||||||
|
VP9E_GET_ACTIVEMAP,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*!\brief vpx 1-D scaling mode
|
/*!\brief vpx 1-D scaling mode
|
||||||
@ -691,6 +697,8 @@ VPX_CTRL_USE_TYPE(VP9E_SET_NOISE_SENSITIVITY, unsigned int)
|
|||||||
VPX_CTRL_USE_TYPE(VP9E_SET_TUNE_CONTENT, int) /* vp9e_tune_content */
|
VPX_CTRL_USE_TYPE(VP9E_SET_TUNE_CONTENT, int) /* vp9e_tune_content */
|
||||||
|
|
||||||
VPX_CTRL_USE_TYPE(VP9E_SET_COLOR_SPACE, int)
|
VPX_CTRL_USE_TYPE(VP9E_SET_COLOR_SPACE, int)
|
||||||
|
|
||||||
|
VPX_CTRL_USE_TYPE(VP9E_GET_ACTIVEMAP, vpx_active_map_t *)
|
||||||
/*! @} - end defgroup vp8_encoder */
|
/*! @} - end defgroup vp8_encoder */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} // extern "C"
|
} // extern "C"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user