static INLINE int get_num_unit_16x16(int size) { return (size + 15) >> 4; }
#endif // CONFIG_RATE_CTRL
+#define MAX_EXT_RATECTRL_BUF_SIZE 500
+typedef struct EXT_RATECTRL {
+ char library_path[MAX_EXT_RATECTRL_BUF_SIZE];
+ char config[MAX_EXT_RATECTRL_BUF_SIZE];
+} EXT_RATECTRL;
+
typedef struct VP9_COMP {
FRAME_INFO frame_info;
QUANTS quants;
RATE_QSTEP_MODEL rq_model[ENCODE_FRAME_TYPES];
#endif
+ EXT_RATECTRL ext_ratectrl;
} VP9_COMP;
#if CONFIG_RATE_CTRL
return VPX_CODEC_OK;
}
+static vpx_codec_err_t ctrl_set_external_rate_control(vpx_codec_alg_priv_t *ctx,
+ va_list args) {
+ EXT_RATECTRL *ext_ratectrl = &ctx->cpi->ext_ratectrl;
+ char **str_ptr = CAST(VP9E_SET_EXTERNAL_RATE_CONTROL, args);
+ const char *library_path = str_ptr[0];
+ const char *config = str_ptr[1];
+ if (strlen(library_path) >= MAX_EXT_RATECTRL_BUF_SIZE) {
+ return VPX_CODEC_ERROR;
+ }
+ if (strlen(config) >= MAX_EXT_RATECTRL_BUF_SIZE) {
+ return VPX_CODEC_ERROR;
+ }
+ snprintf(ext_ratectrl->library_path, MAX_EXT_RATECTRL_BUF_SIZE, "%s",
+ library_path);
+ snprintf(ext_ratectrl->config, MAX_EXT_RATECTRL_BUF_SIZE, "%s", config);
+ return VPX_CODEC_OK;
+}
+
static vpx_codec_ctrl_fn_map_t encoder_ctrl_maps[] = {
{ VP8_COPY_REFERENCE, ctrl_copy_reference },
{ VP9E_SET_SVC_SPATIAL_LAYER_SYNC, ctrl_set_svc_spatial_layer_sync },
{ VP9E_SET_DELTA_Q_UV, ctrl_set_delta_q_uv },
{ VP9E_SET_DISABLE_LOOPFILTER, ctrl_set_disable_loopfilter },
+ { VP9E_SET_EXTERNAL_RATE_CONTROL, ctrl_set_external_rate_control },
// Getters
{ VP8E_GET_LAST_QUANTIZER, ctrl_get_quantizer },
* Supported in codecs: VP9
*/
VP9E_SET_DISABLE_LOOPFILTER,
+
+ /*!\brief Codec control function to enable external rate control library.
+ *
+ * args[0]: path of the rate control library
+ *
+ * args[1]: private config of the rate control library
+ *
+ * Supported in codecs: VP9
+ */
+ VP9E_SET_EXTERNAL_RATE_CONTROL,
};
/*!\brief vpx 1-D scaling mode
VPX_CTRL_USE_TYPE(VP9E_SET_DISABLE_LOOPFILTER, int)
#define VPX_CTRL_VP9E_SET_DISABLE_LOOPFILTER
+
+VPX_CTRL_USE_TYPE(VP9E_SET_EXTERNAL_RATE_CONTROL, char **)
+#define VPX_CTRL_VP9E_SET_EXTERNAL_RATE_CONTROL
+
/*!\endcond */
/*! @} - end defgroup vp8_encoder */
#ifdef __cplusplus