/* * Copyright (c) 2020 The WebM project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ /*!\file * \brief Defines structs and callbacks needed for external rate control. * */ #ifndef VPX_VPX_VPX_EXT_RATECTRL_H_ #define VPX_VPX_VPX_EXT_RATECTRL_H_ #ifdef __cplusplus extern "C" { #endif #include "./vpx_integer.h" #include "./vpx_tpl.h" /*!\brief Current ABI version number * * \internal * If this file is altered in any way that changes the ABI, this value * must be bumped. Examples include, but are not limited to, changing * types, removing or reassigning enums, adding/removing/rearranging * fields to structures. */ #define VPX_EXT_RATECTRL_ABI_VERSION … /*!\brief Corresponds to MAX_STATIC_GF_GROUP_LENGTH defined in vp9_ratectrl.h */ #define VPX_RC_MAX_STATIC_GF_GROUP_LENGTH … /*!\brief Max number of ref frames returned by the external RC. * * Corresponds to MAX_REF_FRAMES defined in vp9_blockd.h. */ #define VPX_RC_MAX_REF_FRAMES … /*!\brief The type of the external rate control. * * This controls what encoder parameters are determined by the external rate * control. */ vpx_rc_type_t; /*!\brief The rate control mode for the external rate control model. */ vpx_ext_rc_mode_t; /*!\brief Corresponds to FRAME_UPDATE_TYPE defined in vp9_firstpass.h. */ vpx_rc_frame_update_type_t; /*!\brief Name for the ref frames returned by the external RC. * * Corresponds to the ref frames defined in vp9_blockd.h. */ vpx_rc_ref_name_t; /*!\brief Abstract rate control model handler * * The encoder will receive the model handler from * vpx_rc_funcs_t::create_model(). */ vpx_rc_model_t; /*!\brief A reserved value for the q index. * If the external rate control model returns this value, * the encoder will use the default q selected by libvpx's rate control * system. */ #define VPX_DEFAULT_Q … /*!\brief A reserved value for the rdmult. * If the external rate control model returns this value, * the encoder will use the default rdmult selected by libvpx's rate control * system. */ #define VPX_DEFAULT_RDMULT … /*!\brief Encode frame decision made by the external rate control model * * The encoder will receive the decision from the external rate control model * through vpx_rc_funcs_t::get_encodeframe_decision(). */ vpx_rc_encodeframe_decision_t; /*!\brief Information for the frame to be encoded. * * The encoder will send the information to external rate control model through * vpx_rc_funcs_t::get_encodeframe_decision(). * */ vpx_rc_encodeframe_info_t; /*!\brief Frame coding result * * The encoder will send the result to the external rate control model through * vpx_rc_funcs_t::update_encodeframe_result(). */ vpx_rc_encodeframe_result_t; /*!\brief Status returned by rate control callback functions. */ vpx_rc_status_t; /*!\brief First pass frame stats * This is a mirror of vp9's FIRSTPASS_STATS except that spatial_layer_id is * omitted */ vpx_rc_frame_stats_t; /*!\brief Collection of first pass frame stats */ vpx_rc_firstpass_stats_t; /*!\brief Encode config sent to external rate control model */ vpx_rc_config_t; /*!\brief Control what ref frame to use and its index. */ vpx_rc_ref_frame_t; /*!\brief The decision made by the external rate control model to set the * group of picture. */ vpx_rc_gop_decision_t; /*!\brief The decision made by the external rate control model to set the * key frame location and the show frame count in the key frame group */ vpx_rc_key_frame_decision_t; /*!\brief Create an external rate control model callback prototype * * This callback is invoked by the encoder to create an external rate control * model. * * \param[in] priv Callback's private data * \param[in] ratectrl_config Pointer to vpx_rc_config_t * \param[out] rate_ctrl_model_ptr Pointer to vpx_rc_model_t */ vpx_rc_create_model_cb_fn_t; /*!\brief Send first pass stats to the external rate control model callback * prototype * * This callback is invoked by the encoder to send first pass stats to the * external rate control model. * * \param[in] rate_ctrl_model rate control model * \param[in] first_pass_stats first pass stats */ vpx_rc_send_firstpass_stats_cb_fn_t; /*!\brief Send TPL stats for the current GOP to the external rate control model * callback prototype * * This callback is invoked by the encoder to send TPL stats for the GOP to the * external rate control model. * * \param[in] rate_ctrl_model rate control model * \param[in] tpl_gop_stats TPL stats for current GOP */ vpx_rc_send_tpl_gop_stats_cb_fn_t; /*!\brief Receive encode frame decision callback prototype * * This callback is invoked by the encoder to receive encode frame decision from * the external rate control model. * * \param[in] rate_ctrl_model rate control model * \param[in] frame_gop_index index of the frame in current gop * \param[out] frame_decision encode decision of the coding frame */ vpx_rc_get_encodeframe_decision_cb_fn_t; /*!\brief Update encode frame result callback prototype * * This callback is invoked by the encoder to update encode frame result to the * external rate control model. * * \param[in] rate_ctrl_model rate control model * \param[out] encode_frame_result encode result of the coding frame */ vpx_rc_update_encodeframe_result_cb_fn_t; /*!\brief Get the key frame decision from the external rate control model. * * This callback is invoked by the encoder to get key frame decision from * the external rate control model. * * \param[in] rate_ctrl_model rate control model * \param[out] key_frame_decision key frame decision from the model */ vpx_rc_get_key_frame_decision_cb_fn_t; /*!\brief Get the GOP structure from the external rate control model. * * This callback is invoked by the encoder to get GOP decisions from * the external rate control model. * * \param[in] rate_ctrl_model rate control model * \param[out] gop_decision GOP decision from the model */ vpx_rc_get_gop_decision_cb_fn_t; /*!\brief Get the frame rdmult from the external rate control model. * * This callback is invoked by the encoder to get rdmult from * the external rate control model. * * \param[in] rate_ctrl_model rate control model * \param[in] frame_info information collected from the encoder * \param[out] rdmult frame rate-distortion multiplier from the model */ vpx_rc_get_frame_rdmult_cb_fn_t; /*!\brief Delete the external rate control model callback prototype * * This callback is invoked by the encoder to delete the external rate control * model. * * \param[in] rate_ctrl_model rate control model */ vpx_rc_delete_model_cb_fn_t; /*!\brief Callback function set for external rate control. * * The user can enable external rate control by registering * a set of callback functions with the codec control flag * #VP9E_SET_EXTERNAL_RATE_CONTROL. */ vpx_rc_funcs_t; #ifdef __cplusplus } // extern "C" #endif #endif // VPX_VPX_VPX_EXT_RATECTRL_H_