1*fb1b10abSAndroid Build Coastguard Worker /* 2*fb1b10abSAndroid Build Coastguard Worker * Copyright (c) 2020 The WebM project authors. All Rights Reserved. 3*fb1b10abSAndroid Build Coastguard Worker * 4*fb1b10abSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license 5*fb1b10abSAndroid Build Coastguard Worker * that can be found in the LICENSE file in the root of the source 6*fb1b10abSAndroid Build Coastguard Worker * tree. An additional intellectual property rights grant can be found 7*fb1b10abSAndroid Build Coastguard Worker * in the file PATENTS. All contributing project authors may 8*fb1b10abSAndroid Build Coastguard Worker * be found in the AUTHORS file in the root of the source tree. 9*fb1b10abSAndroid Build Coastguard Worker */ 10*fb1b10abSAndroid Build Coastguard Worker 11*fb1b10abSAndroid Build Coastguard Worker /*!\file 12*fb1b10abSAndroid Build Coastguard Worker * \brief Defines structs and callbacks needed for external rate control. 13*fb1b10abSAndroid Build Coastguard Worker * 14*fb1b10abSAndroid Build Coastguard Worker */ 15*fb1b10abSAndroid Build Coastguard Worker #ifndef VPX_VPX_VPX_EXT_RATECTRL_H_ 16*fb1b10abSAndroid Build Coastguard Worker #define VPX_VPX_VPX_EXT_RATECTRL_H_ 17*fb1b10abSAndroid Build Coastguard Worker 18*fb1b10abSAndroid Build Coastguard Worker #ifdef __cplusplus 19*fb1b10abSAndroid Build Coastguard Worker extern "C" { 20*fb1b10abSAndroid Build Coastguard Worker #endif 21*fb1b10abSAndroid Build Coastguard Worker 22*fb1b10abSAndroid Build Coastguard Worker #include "./vpx_integer.h" 23*fb1b10abSAndroid Build Coastguard Worker #include "./vpx_tpl.h" 24*fb1b10abSAndroid Build Coastguard Worker 25*fb1b10abSAndroid Build Coastguard Worker /*!\brief Current ABI version number 26*fb1b10abSAndroid Build Coastguard Worker * 27*fb1b10abSAndroid Build Coastguard Worker * \internal 28*fb1b10abSAndroid Build Coastguard Worker * If this file is altered in any way that changes the ABI, this value 29*fb1b10abSAndroid Build Coastguard Worker * must be bumped. Examples include, but are not limited to, changing 30*fb1b10abSAndroid Build Coastguard Worker * types, removing or reassigning enums, adding/removing/rearranging 31*fb1b10abSAndroid Build Coastguard Worker * fields to structures. 32*fb1b10abSAndroid Build Coastguard Worker */ 33*fb1b10abSAndroid Build Coastguard Worker #define VPX_EXT_RATECTRL_ABI_VERSION (5 + VPX_TPL_ABI_VERSION) 34*fb1b10abSAndroid Build Coastguard Worker 35*fb1b10abSAndroid Build Coastguard Worker /*!\brief Corresponds to MAX_STATIC_GF_GROUP_LENGTH defined in vp9_ratectrl.h 36*fb1b10abSAndroid Build Coastguard Worker */ 37*fb1b10abSAndroid Build Coastguard Worker #define VPX_RC_MAX_STATIC_GF_GROUP_LENGTH 250 38*fb1b10abSAndroid Build Coastguard Worker 39*fb1b10abSAndroid Build Coastguard Worker /*!\brief Max number of ref frames returned by the external RC. 40*fb1b10abSAndroid Build Coastguard Worker * 41*fb1b10abSAndroid Build Coastguard Worker * Corresponds to MAX_REF_FRAMES defined in vp9_blockd.h. 42*fb1b10abSAndroid Build Coastguard Worker */ 43*fb1b10abSAndroid Build Coastguard Worker #define VPX_RC_MAX_REF_FRAMES 4 44*fb1b10abSAndroid Build Coastguard Worker 45*fb1b10abSAndroid Build Coastguard Worker /*!\brief The type of the external rate control. 46*fb1b10abSAndroid Build Coastguard Worker * 47*fb1b10abSAndroid Build Coastguard Worker * This controls what encoder parameters are determined by the external rate 48*fb1b10abSAndroid Build Coastguard Worker * control. 49*fb1b10abSAndroid Build Coastguard Worker */ 50*fb1b10abSAndroid Build Coastguard Worker typedef enum vpx_rc_type { 51*fb1b10abSAndroid Build Coastguard Worker /*! 52*fb1b10abSAndroid Build Coastguard Worker * The external rate control doesn't determine anything. 53*fb1b10abSAndroid Build Coastguard Worker * This mode is used as baseline. 54*fb1b10abSAndroid Build Coastguard Worker */ 55*fb1b10abSAndroid Build Coastguard Worker VPX_RC_NONE = 0, 56*fb1b10abSAndroid Build Coastguard Worker /*! 57*fb1b10abSAndroid Build Coastguard Worker * The external rate control model determines the quantization parameter (QP) 58*fb1b10abSAndroid Build Coastguard Worker * for each frame. 59*fb1b10abSAndroid Build Coastguard Worker */ 60*fb1b10abSAndroid Build Coastguard Worker VPX_RC_QP = 1 << 0, 61*fb1b10abSAndroid Build Coastguard Worker /*! 62*fb1b10abSAndroid Build Coastguard Worker * The external rate control model determines the group of picture (GOP) of 63*fb1b10abSAndroid Build Coastguard Worker * the video sequence. 64*fb1b10abSAndroid Build Coastguard Worker */ 65*fb1b10abSAndroid Build Coastguard Worker VPX_RC_GOP = 1 << 1, 66*fb1b10abSAndroid Build Coastguard Worker /*! 67*fb1b10abSAndroid Build Coastguard Worker * The external rate control model determines the rate-distortion multiplier 68*fb1b10abSAndroid Build Coastguard Worker * (rdmult) for the current frame. 69*fb1b10abSAndroid Build Coastguard Worker */ 70*fb1b10abSAndroid Build Coastguard Worker VPX_RC_RDMULT = 1 << 2, 71*fb1b10abSAndroid Build Coastguard Worker /*! 72*fb1b10abSAndroid Build Coastguard Worker * The external rate control model determines both QP and GOP. 73*fb1b10abSAndroid Build Coastguard Worker */ 74*fb1b10abSAndroid Build Coastguard Worker VPX_RC_GOP_QP = VPX_RC_QP | VPX_RC_GOP, 75*fb1b10abSAndroid Build Coastguard Worker /*! 76*fb1b10abSAndroid Build Coastguard Worker * The external rate control model determines the QP, GOP and the rdmult. 77*fb1b10abSAndroid Build Coastguard Worker */ 78*fb1b10abSAndroid Build Coastguard Worker VPX_RC_GOP_QP_RDMULT = VPX_RC_QP | VPX_RC_GOP | VPX_RC_RDMULT 79*fb1b10abSAndroid Build Coastguard Worker } vpx_rc_type_t; 80*fb1b10abSAndroid Build Coastguard Worker 81*fb1b10abSAndroid Build Coastguard Worker /*!\brief The rate control mode for the external rate control model. 82*fb1b10abSAndroid Build Coastguard Worker */ 83*fb1b10abSAndroid Build Coastguard Worker typedef enum vpx_ext_rc_mode { 84*fb1b10abSAndroid Build Coastguard Worker VPX_RC_QMODE = 0, 85*fb1b10abSAndroid Build Coastguard Worker VPX_RC_VBR = 1, 86*fb1b10abSAndroid Build Coastguard Worker VPX_RC_CQ = 2, 87*fb1b10abSAndroid Build Coastguard Worker } vpx_ext_rc_mode_t; 88*fb1b10abSAndroid Build Coastguard Worker 89*fb1b10abSAndroid Build Coastguard Worker /*!\brief Corresponds to FRAME_UPDATE_TYPE defined in vp9_firstpass.h. 90*fb1b10abSAndroid Build Coastguard Worker */ 91*fb1b10abSAndroid Build Coastguard Worker typedef enum vpx_rc_frame_update_type { 92*fb1b10abSAndroid Build Coastguard Worker VPX_RC_INVALID_UPDATE_TYPE = -1, 93*fb1b10abSAndroid Build Coastguard Worker VPX_RC_KF_UPDATE = 0, 94*fb1b10abSAndroid Build Coastguard Worker VPX_RC_LF_UPDATE = 1, 95*fb1b10abSAndroid Build Coastguard Worker VPX_RC_GF_UPDATE = 2, 96*fb1b10abSAndroid Build Coastguard Worker VPX_RC_ARF_UPDATE = 3, 97*fb1b10abSAndroid Build Coastguard Worker VPX_RC_OVERLAY_UPDATE = 4, 98*fb1b10abSAndroid Build Coastguard Worker VPX_RC_MID_OVERLAY_UPDATE = 5, 99*fb1b10abSAndroid Build Coastguard Worker VPX_RC_USE_BUF_FRAME = 6, 100*fb1b10abSAndroid Build Coastguard Worker } vpx_rc_frame_update_type_t; 101*fb1b10abSAndroid Build Coastguard Worker 102*fb1b10abSAndroid Build Coastguard Worker /*!\brief Name for the ref frames returned by the external RC. 103*fb1b10abSAndroid Build Coastguard Worker * 104*fb1b10abSAndroid Build Coastguard Worker * Corresponds to the ref frames defined in vp9_blockd.h. 105*fb1b10abSAndroid Build Coastguard Worker */ 106*fb1b10abSAndroid Build Coastguard Worker typedef enum vpx_rc_ref_name { 107*fb1b10abSAndroid Build Coastguard Worker VPX_RC_INVALID_REF_FRAME = -1, 108*fb1b10abSAndroid Build Coastguard Worker VPX_RC_INTRA_FRAME = 0, 109*fb1b10abSAndroid Build Coastguard Worker VPX_RC_LAST_FRAME = 1, 110*fb1b10abSAndroid Build Coastguard Worker VPX_RC_GOLDEN_FRAME = 2, 111*fb1b10abSAndroid Build Coastguard Worker VPX_RC_ALTREF_FRAME = 3, 112*fb1b10abSAndroid Build Coastguard Worker } vpx_rc_ref_name_t; 113*fb1b10abSAndroid Build Coastguard Worker 114*fb1b10abSAndroid Build Coastguard Worker /*!\brief Abstract rate control model handler 115*fb1b10abSAndroid Build Coastguard Worker * 116*fb1b10abSAndroid Build Coastguard Worker * The encoder will receive the model handler from 117*fb1b10abSAndroid Build Coastguard Worker * vpx_rc_funcs_t::create_model(). 118*fb1b10abSAndroid Build Coastguard Worker */ 119*fb1b10abSAndroid Build Coastguard Worker typedef void *vpx_rc_model_t; 120*fb1b10abSAndroid Build Coastguard Worker 121*fb1b10abSAndroid Build Coastguard Worker /*!\brief A reserved value for the q index. 122*fb1b10abSAndroid Build Coastguard Worker * If the external rate control model returns this value, 123*fb1b10abSAndroid Build Coastguard Worker * the encoder will use the default q selected by libvpx's rate control 124*fb1b10abSAndroid Build Coastguard Worker * system. 125*fb1b10abSAndroid Build Coastguard Worker */ 126*fb1b10abSAndroid Build Coastguard Worker #define VPX_DEFAULT_Q -1 127*fb1b10abSAndroid Build Coastguard Worker 128*fb1b10abSAndroid Build Coastguard Worker /*!\brief A reserved value for the rdmult. 129*fb1b10abSAndroid Build Coastguard Worker * If the external rate control model returns this value, 130*fb1b10abSAndroid Build Coastguard Worker * the encoder will use the default rdmult selected by libvpx's rate control 131*fb1b10abSAndroid Build Coastguard Worker * system. 132*fb1b10abSAndroid Build Coastguard Worker */ 133*fb1b10abSAndroid Build Coastguard Worker #define VPX_DEFAULT_RDMULT -1 134*fb1b10abSAndroid Build Coastguard Worker 135*fb1b10abSAndroid Build Coastguard Worker /*!\brief Encode frame decision made by the external rate control model 136*fb1b10abSAndroid Build Coastguard Worker * 137*fb1b10abSAndroid Build Coastguard Worker * The encoder will receive the decision from the external rate control model 138*fb1b10abSAndroid Build Coastguard Worker * through vpx_rc_funcs_t::get_encodeframe_decision(). 139*fb1b10abSAndroid Build Coastguard Worker */ 140*fb1b10abSAndroid Build Coastguard Worker typedef struct vpx_rc_encodeframe_decision { 141*fb1b10abSAndroid Build Coastguard Worker int q_index; /**< Quantizer step index [0..255]*/ 142*fb1b10abSAndroid Build Coastguard Worker int rdmult; /**< Frame level Lagrangian multiplier*/ 143*fb1b10abSAndroid Build Coastguard Worker } vpx_rc_encodeframe_decision_t; 144*fb1b10abSAndroid Build Coastguard Worker 145*fb1b10abSAndroid Build Coastguard Worker /*!\brief Information for the frame to be encoded. 146*fb1b10abSAndroid Build Coastguard Worker * 147*fb1b10abSAndroid Build Coastguard Worker * The encoder will send the information to external rate control model through 148*fb1b10abSAndroid Build Coastguard Worker * vpx_rc_funcs_t::get_encodeframe_decision(). 149*fb1b10abSAndroid Build Coastguard Worker * 150*fb1b10abSAndroid Build Coastguard Worker */ 151*fb1b10abSAndroid Build Coastguard Worker typedef struct vpx_rc_encodeframe_info { 152*fb1b10abSAndroid Build Coastguard Worker /*! 153*fb1b10abSAndroid Build Coastguard Worker * 0: Key frame 154*fb1b10abSAndroid Build Coastguard Worker * 1: Inter frame 155*fb1b10abSAndroid Build Coastguard Worker * 2: Alternate reference frame 156*fb1b10abSAndroid Build Coastguard Worker * 3: Overlay frame 157*fb1b10abSAndroid Build Coastguard Worker * 4: Golden frame 158*fb1b10abSAndroid Build Coastguard Worker */ 159*fb1b10abSAndroid Build Coastguard Worker int frame_type; 160*fb1b10abSAndroid Build Coastguard Worker int show_index; /**< display index, starts from zero*/ 161*fb1b10abSAndroid Build Coastguard Worker int coding_index; /**< coding index, starts from zero*/ 162*fb1b10abSAndroid Build Coastguard Worker /*! 163*fb1b10abSAndroid Build Coastguard Worker * index of the current frame in this group of picture, starts from zero. 164*fb1b10abSAndroid Build Coastguard Worker */ 165*fb1b10abSAndroid Build Coastguard Worker int gop_index; 166*fb1b10abSAndroid Build Coastguard Worker int ref_frame_coding_indexes[3]; /**< three reference frames' coding indices*/ 167*fb1b10abSAndroid Build Coastguard Worker /*! 168*fb1b10abSAndroid Build Coastguard Worker * The validity of the three reference frames. 169*fb1b10abSAndroid Build Coastguard Worker * 0: Invalid 170*fb1b10abSAndroid Build Coastguard Worker * 1: Valid 171*fb1b10abSAndroid Build Coastguard Worker */ 172*fb1b10abSAndroid Build Coastguard Worker int ref_frame_valid_list[3]; 173*fb1b10abSAndroid Build Coastguard Worker /*! 174*fb1b10abSAndroid Build Coastguard Worker * The length of the current GOP. 175*fb1b10abSAndroid Build Coastguard Worker */ 176*fb1b10abSAndroid Build Coastguard Worker int gop_size; 177*fb1b10abSAndroid Build Coastguard Worker /*! 178*fb1b10abSAndroid Build Coastguard Worker * Whether the current GOP uses an alt ref. 179*fb1b10abSAndroid Build Coastguard Worker */ 180*fb1b10abSAndroid Build Coastguard Worker int use_alt_ref; 181*fb1b10abSAndroid Build Coastguard Worker } vpx_rc_encodeframe_info_t; 182*fb1b10abSAndroid Build Coastguard Worker 183*fb1b10abSAndroid Build Coastguard Worker /*!\brief Frame coding result 184*fb1b10abSAndroid Build Coastguard Worker * 185*fb1b10abSAndroid Build Coastguard Worker * The encoder will send the result to the external rate control model through 186*fb1b10abSAndroid Build Coastguard Worker * vpx_rc_funcs_t::update_encodeframe_result(). 187*fb1b10abSAndroid Build Coastguard Worker */ 188*fb1b10abSAndroid Build Coastguard Worker typedef struct vpx_rc_encodeframe_result { 189*fb1b10abSAndroid Build Coastguard Worker int64_t bit_count; /**< number of bits spent on coding the frame*/ 190*fb1b10abSAndroid Build Coastguard Worker int actual_encoding_qindex; /**< the actual qindex used to encode the frame*/ 191*fb1b10abSAndroid Build Coastguard Worker } vpx_rc_encodeframe_result_t; 192*fb1b10abSAndroid Build Coastguard Worker 193*fb1b10abSAndroid Build Coastguard Worker /*!\brief Status returned by rate control callback functions. 194*fb1b10abSAndroid Build Coastguard Worker */ 195*fb1b10abSAndroid Build Coastguard Worker typedef enum vpx_rc_status { 196*fb1b10abSAndroid Build Coastguard Worker VPX_RC_OK = 0, 197*fb1b10abSAndroid Build Coastguard Worker VPX_RC_ERROR = 1, 198*fb1b10abSAndroid Build Coastguard Worker } vpx_rc_status_t; 199*fb1b10abSAndroid Build Coastguard Worker 200*fb1b10abSAndroid Build Coastguard Worker /*!\brief First pass frame stats 201*fb1b10abSAndroid Build Coastguard Worker * This is a mirror of vp9's FIRSTPASS_STATS except that spatial_layer_id is 202*fb1b10abSAndroid Build Coastguard Worker * omitted 203*fb1b10abSAndroid Build Coastguard Worker */ 204*fb1b10abSAndroid Build Coastguard Worker typedef struct vpx_rc_frame_stats { 205*fb1b10abSAndroid Build Coastguard Worker /*! 206*fb1b10abSAndroid Build Coastguard Worker * Frame number in display order, if stats are for a single frame. 207*fb1b10abSAndroid Build Coastguard Worker * No real meaning for a collection of frames. 208*fb1b10abSAndroid Build Coastguard Worker */ 209*fb1b10abSAndroid Build Coastguard Worker double frame; 210*fb1b10abSAndroid Build Coastguard Worker /*! 211*fb1b10abSAndroid Build Coastguard Worker * Weight assigned to this frame (or total weight for the collection of 212*fb1b10abSAndroid Build Coastguard Worker * frames) currently based on intra factor and brightness factor. This is used 213*fb1b10abSAndroid Build Coastguard Worker * to distribute bits between easier and harder frames. 214*fb1b10abSAndroid Build Coastguard Worker */ 215*fb1b10abSAndroid Build Coastguard Worker double weight; 216*fb1b10abSAndroid Build Coastguard Worker /*! 217*fb1b10abSAndroid Build Coastguard Worker * Intra prediction error. 218*fb1b10abSAndroid Build Coastguard Worker */ 219*fb1b10abSAndroid Build Coastguard Worker double intra_error; 220*fb1b10abSAndroid Build Coastguard Worker /*! 221*fb1b10abSAndroid Build Coastguard Worker * Best of intra pred error and inter pred error using last frame as ref. 222*fb1b10abSAndroid Build Coastguard Worker */ 223*fb1b10abSAndroid Build Coastguard Worker double coded_error; 224*fb1b10abSAndroid Build Coastguard Worker /*! 225*fb1b10abSAndroid Build Coastguard Worker * Best of intra pred error and inter pred error using golden frame as ref. 226*fb1b10abSAndroid Build Coastguard Worker */ 227*fb1b10abSAndroid Build Coastguard Worker double sr_coded_error; 228*fb1b10abSAndroid Build Coastguard Worker /*! 229*fb1b10abSAndroid Build Coastguard Worker * Estimate the noise energy of the current frame. 230*fb1b10abSAndroid Build Coastguard Worker */ 231*fb1b10abSAndroid Build Coastguard Worker double frame_noise_energy; 232*fb1b10abSAndroid Build Coastguard Worker /*! 233*fb1b10abSAndroid Build Coastguard Worker * Percentage of blocks with inter pred error < intra pred error. 234*fb1b10abSAndroid Build Coastguard Worker */ 235*fb1b10abSAndroid Build Coastguard Worker double pcnt_inter; 236*fb1b10abSAndroid Build Coastguard Worker /*! 237*fb1b10abSAndroid Build Coastguard Worker * Percentage of blocks using (inter prediction and) non-zero motion vectors. 238*fb1b10abSAndroid Build Coastguard Worker */ 239*fb1b10abSAndroid Build Coastguard Worker double pcnt_motion; 240*fb1b10abSAndroid Build Coastguard Worker /*! 241*fb1b10abSAndroid Build Coastguard Worker * Percentage of blocks where golden frame was better than last or intra: 242*fb1b10abSAndroid Build Coastguard Worker * inter pred error using golden frame < inter pred error using last frame and 243*fb1b10abSAndroid Build Coastguard Worker * inter pred error using golden frame < intra pred error 244*fb1b10abSAndroid Build Coastguard Worker */ 245*fb1b10abSAndroid Build Coastguard Worker double pcnt_second_ref; 246*fb1b10abSAndroid Build Coastguard Worker /*! 247*fb1b10abSAndroid Build Coastguard Worker * Percentage of blocks where intra and inter prediction errors were very 248*fb1b10abSAndroid Build Coastguard Worker * close. 249*fb1b10abSAndroid Build Coastguard Worker */ 250*fb1b10abSAndroid Build Coastguard Worker double pcnt_neutral; 251*fb1b10abSAndroid Build Coastguard Worker /*! 252*fb1b10abSAndroid Build Coastguard Worker * Percentage of blocks that have intra error < inter error and inter error < 253*fb1b10abSAndroid Build Coastguard Worker * LOW_I_THRESH 254*fb1b10abSAndroid Build Coastguard Worker * - bit_depth 8: LOW_I_THRESH = 24000 255*fb1b10abSAndroid Build Coastguard Worker * - bit_depth 10: LOW_I_THRESH = 24000 << 4 256*fb1b10abSAndroid Build Coastguard Worker * - bit_depth 12: LOW_I_THRESH = 24000 << 8 257*fb1b10abSAndroid Build Coastguard Worker */ 258*fb1b10abSAndroid Build Coastguard Worker double pcnt_intra_low; 259*fb1b10abSAndroid Build Coastguard Worker /*! 260*fb1b10abSAndroid Build Coastguard Worker * Percentage of blocks that have intra error < inter error and intra error < 261*fb1b10abSAndroid Build Coastguard Worker * LOW_I_THRESH but inter error >= LOW_I_THRESH LOW_I_THRESH 262*fb1b10abSAndroid Build Coastguard Worker * - bit_depth 8: LOW_I_THRESH = 24000 263*fb1b10abSAndroid Build Coastguard Worker * - bit_depth 10: LOW_I_THRESH = 24000 << 4 264*fb1b10abSAndroid Build Coastguard Worker * - bit_depth 12: LOW_I_THRESH = 24000 << 8 265*fb1b10abSAndroid Build Coastguard Worker */ 266*fb1b10abSAndroid Build Coastguard Worker double pcnt_intra_high; 267*fb1b10abSAndroid Build Coastguard Worker /*! 268*fb1b10abSAndroid Build Coastguard Worker * Percentage of blocks that have almost no intra error residual 269*fb1b10abSAndroid Build Coastguard Worker * (i.e. are in effect completely flat and untextured in the intra 270*fb1b10abSAndroid Build Coastguard Worker * domain). In natural videos this is uncommon, but it is much more 271*fb1b10abSAndroid Build Coastguard Worker * common in animations, graphics and screen content, so may be used 272*fb1b10abSAndroid Build Coastguard Worker * as a signal to detect these types of content. 273*fb1b10abSAndroid Build Coastguard Worker */ 274*fb1b10abSAndroid Build Coastguard Worker double intra_skip_pct; 275*fb1b10abSAndroid Build Coastguard Worker /*! 276*fb1b10abSAndroid Build Coastguard Worker * Percentage of blocks that have intra error < SMOOTH_INTRA_THRESH 277*fb1b10abSAndroid Build Coastguard Worker * - bit_depth 8: SMOOTH_INTRA_THRESH = 4000 278*fb1b10abSAndroid Build Coastguard Worker * - bit_depth 10: SMOOTH_INTRA_THRESH = 4000 << 4 279*fb1b10abSAndroid Build Coastguard Worker * - bit_depth 12: SMOOTH_INTRA_THRESH = 4000 << 8 280*fb1b10abSAndroid Build Coastguard Worker */ 281*fb1b10abSAndroid Build Coastguard Worker double intra_smooth_pct; 282*fb1b10abSAndroid Build Coastguard Worker /*! 283*fb1b10abSAndroid Build Coastguard Worker * Image mask rows top and bottom. 284*fb1b10abSAndroid Build Coastguard Worker */ 285*fb1b10abSAndroid Build Coastguard Worker double inactive_zone_rows; 286*fb1b10abSAndroid Build Coastguard Worker /*! 287*fb1b10abSAndroid Build Coastguard Worker * Image mask columns at left and right edges. 288*fb1b10abSAndroid Build Coastguard Worker */ 289*fb1b10abSAndroid Build Coastguard Worker double inactive_zone_cols; 290*fb1b10abSAndroid Build Coastguard Worker /*! 291*fb1b10abSAndroid Build Coastguard Worker * Mean of row motion vectors. 292*fb1b10abSAndroid Build Coastguard Worker */ 293*fb1b10abSAndroid Build Coastguard Worker double MVr; 294*fb1b10abSAndroid Build Coastguard Worker /*! 295*fb1b10abSAndroid Build Coastguard Worker * Mean of absolute value of row motion vectors. 296*fb1b10abSAndroid Build Coastguard Worker */ 297*fb1b10abSAndroid Build Coastguard Worker double mvr_abs; 298*fb1b10abSAndroid Build Coastguard Worker /*! 299*fb1b10abSAndroid Build Coastguard Worker * Mean of column motion vectors. 300*fb1b10abSAndroid Build Coastguard Worker */ 301*fb1b10abSAndroid Build Coastguard Worker double MVc; 302*fb1b10abSAndroid Build Coastguard Worker /*! 303*fb1b10abSAndroid Build Coastguard Worker * Mean of absolute value of column motion vectors. 304*fb1b10abSAndroid Build Coastguard Worker */ 305*fb1b10abSAndroid Build Coastguard Worker double mvc_abs; 306*fb1b10abSAndroid Build Coastguard Worker /*! 307*fb1b10abSAndroid Build Coastguard Worker * Variance of row motion vectors. 308*fb1b10abSAndroid Build Coastguard Worker */ 309*fb1b10abSAndroid Build Coastguard Worker double MVrv; 310*fb1b10abSAndroid Build Coastguard Worker /*! 311*fb1b10abSAndroid Build Coastguard Worker * Variance of column motion vectors. 312*fb1b10abSAndroid Build Coastguard Worker */ 313*fb1b10abSAndroid Build Coastguard Worker double MVcv; 314*fb1b10abSAndroid Build Coastguard Worker /*! 315*fb1b10abSAndroid Build Coastguard Worker * Value in range [-1,1] indicating fraction of row and column motion vectors 316*fb1b10abSAndroid Build Coastguard Worker * that point inwards (negative MV value) or outwards (positive MV value). 317*fb1b10abSAndroid Build Coastguard Worker * For example, value of 1 indicates, all row/column MVs are inwards. 318*fb1b10abSAndroid Build Coastguard Worker */ 319*fb1b10abSAndroid Build Coastguard Worker double mv_in_out_count; 320*fb1b10abSAndroid Build Coastguard Worker /*! 321*fb1b10abSAndroid Build Coastguard Worker * Duration of the frame / collection of frames. 322*fb1b10abSAndroid Build Coastguard Worker */ 323*fb1b10abSAndroid Build Coastguard Worker double duration; 324*fb1b10abSAndroid Build Coastguard Worker /*! 325*fb1b10abSAndroid Build Coastguard Worker * 1.0 if stats are for a single frame, or 326*fb1b10abSAndroid Build Coastguard Worker * number of frames whose stats are accumulated. 327*fb1b10abSAndroid Build Coastguard Worker */ 328*fb1b10abSAndroid Build Coastguard Worker double count; 329*fb1b10abSAndroid Build Coastguard Worker /*! 330*fb1b10abSAndroid Build Coastguard Worker * Number of new mv in a frame. 331*fb1b10abSAndroid Build Coastguard Worker */ 332*fb1b10abSAndroid Build Coastguard Worker double new_mv_count; 333*fb1b10abSAndroid Build Coastguard Worker } vpx_rc_frame_stats_t; 334*fb1b10abSAndroid Build Coastguard Worker 335*fb1b10abSAndroid Build Coastguard Worker /*!\brief Collection of first pass frame stats 336*fb1b10abSAndroid Build Coastguard Worker */ 337*fb1b10abSAndroid Build Coastguard Worker typedef struct vpx_rc_firstpass_stats { 338*fb1b10abSAndroid Build Coastguard Worker /*! 339*fb1b10abSAndroid Build Coastguard Worker * Pointer to first pass frame stats. 340*fb1b10abSAndroid Build Coastguard Worker * The pointed array of vpx_rc_frame_stats_t should have length equal to 341*fb1b10abSAndroid Build Coastguard Worker * number of show frames in the video. 342*fb1b10abSAndroid Build Coastguard Worker */ 343*fb1b10abSAndroid Build Coastguard Worker vpx_rc_frame_stats_t *frame_stats; 344*fb1b10abSAndroid Build Coastguard Worker /*! 345*fb1b10abSAndroid Build Coastguard Worker * Number of show frames in the video. 346*fb1b10abSAndroid Build Coastguard Worker */ 347*fb1b10abSAndroid Build Coastguard Worker int num_frames; 348*fb1b10abSAndroid Build Coastguard Worker } vpx_rc_firstpass_stats_t; 349*fb1b10abSAndroid Build Coastguard Worker 350*fb1b10abSAndroid Build Coastguard Worker /*!\brief Encode config sent to external rate control model 351*fb1b10abSAndroid Build Coastguard Worker */ 352*fb1b10abSAndroid Build Coastguard Worker typedef struct vpx_rc_config { 353*fb1b10abSAndroid Build Coastguard Worker int frame_width; /**< frame width */ 354*fb1b10abSAndroid Build Coastguard Worker int frame_height; /**< frame height */ 355*fb1b10abSAndroid Build Coastguard Worker int show_frame_count; /**< number of visible frames in the video */ 356*fb1b10abSAndroid Build Coastguard Worker int max_gf_interval; /**< max GOP size in number of show frames */ 357*fb1b10abSAndroid Build Coastguard Worker int min_gf_interval; /**< min GOP size in number of show frames */ 358*fb1b10abSAndroid Build Coastguard Worker /*! 359*fb1b10abSAndroid Build Coastguard Worker * Target bitrate in kilobytes per second 360*fb1b10abSAndroid Build Coastguard Worker */ 361*fb1b10abSAndroid Build Coastguard Worker int target_bitrate_kbps; 362*fb1b10abSAndroid Build Coastguard Worker int frame_rate_num; /**< numerator of frame rate */ 363*fb1b10abSAndroid Build Coastguard Worker int frame_rate_den; /**< denominator of frame rate */ 364*fb1b10abSAndroid Build Coastguard Worker /*! 365*fb1b10abSAndroid Build Coastguard Worker * The following fields are only for external rate control models that support 366*fb1b10abSAndroid Build Coastguard Worker * different rate control modes. 367*fb1b10abSAndroid Build Coastguard Worker */ 368*fb1b10abSAndroid Build Coastguard Worker vpx_ext_rc_mode_t rc_mode; /**< Q mode or VBR mode */ 369*fb1b10abSAndroid Build Coastguard Worker int overshoot_percent; /**< for VBR mode only */ 370*fb1b10abSAndroid Build Coastguard Worker int undershoot_percent; /**< for VBR mode only */ 371*fb1b10abSAndroid Build Coastguard Worker int min_base_q_index; /**< for VBR mode only */ 372*fb1b10abSAndroid Build Coastguard Worker int max_base_q_index; /**< for VBR mode only */ 373*fb1b10abSAndroid Build Coastguard Worker int base_qp; /**< base QP for leaf frames, 0-255 */ 374*fb1b10abSAndroid Build Coastguard Worker } vpx_rc_config_t; 375*fb1b10abSAndroid Build Coastguard Worker 376*fb1b10abSAndroid Build Coastguard Worker /*!\brief Control what ref frame to use and its index. 377*fb1b10abSAndroid Build Coastguard Worker */ 378*fb1b10abSAndroid Build Coastguard Worker typedef struct vpx_rc_ref_frame { 379*fb1b10abSAndroid Build Coastguard Worker /*! 380*fb1b10abSAndroid Build Coastguard Worker * Ref frame index. Corresponding to |lst_fb_idx|, |gld_fb_idx| or 381*fb1b10abSAndroid Build Coastguard Worker * |alt_fb_idx| in VP9_COMP depending on the ref frame #name. 382*fb1b10abSAndroid Build Coastguard Worker */ 383*fb1b10abSAndroid Build Coastguard Worker int index[VPX_RC_MAX_REF_FRAMES]; 384*fb1b10abSAndroid Build Coastguard Worker /*! 385*fb1b10abSAndroid Build Coastguard Worker * Ref frame name. This decides whether the #index is used as 386*fb1b10abSAndroid Build Coastguard Worker * |lst_fb_idx|, |gld_fb_idx| or |alt_fb_idx| in VP9_COMP. 387*fb1b10abSAndroid Build Coastguard Worker * 388*fb1b10abSAndroid Build Coastguard Worker */ 389*fb1b10abSAndroid Build Coastguard Worker vpx_rc_ref_name_t name[VPX_RC_MAX_REF_FRAMES]; 390*fb1b10abSAndroid Build Coastguard Worker } vpx_rc_ref_frame_t; 391*fb1b10abSAndroid Build Coastguard Worker 392*fb1b10abSAndroid Build Coastguard Worker /*!\brief The decision made by the external rate control model to set the 393*fb1b10abSAndroid Build Coastguard Worker * group of picture. 394*fb1b10abSAndroid Build Coastguard Worker */ 395*fb1b10abSAndroid Build Coastguard Worker typedef struct vpx_rc_gop_decision { 396*fb1b10abSAndroid Build Coastguard Worker int gop_coding_frames; /**< The number of frames of this GOP */ 397*fb1b10abSAndroid Build Coastguard Worker int use_alt_ref; /**< Whether to use alt ref for this GOP */ 398*fb1b10abSAndroid Build Coastguard Worker int use_key_frame; /**< Whether to set key frame for this GOP */ 399*fb1b10abSAndroid Build Coastguard Worker /*! 400*fb1b10abSAndroid Build Coastguard Worker * Frame type for each frame in this GOP. 401*fb1b10abSAndroid Build Coastguard Worker * This will be populated to |update_type| in GF_GROUP defined in 402*fb1b10abSAndroid Build Coastguard Worker * vp9_firstpass.h 403*fb1b10abSAndroid Build Coastguard Worker */ 404*fb1b10abSAndroid Build Coastguard Worker vpx_rc_frame_update_type_t update_type[VPX_RC_MAX_STATIC_GF_GROUP_LENGTH + 2]; 405*fb1b10abSAndroid Build Coastguard Worker /*! Ref frame buffer index to be updated for each frame in this GOP. */ 406*fb1b10abSAndroid Build Coastguard Worker int update_ref_index[VPX_RC_MAX_STATIC_GF_GROUP_LENGTH + 2]; 407*fb1b10abSAndroid Build Coastguard Worker /*! Ref frame list to be used for each frame in this GOP. */ 408*fb1b10abSAndroid Build Coastguard Worker vpx_rc_ref_frame_t ref_frame_list[VPX_RC_MAX_STATIC_GF_GROUP_LENGTH + 2]; 409*fb1b10abSAndroid Build Coastguard Worker } vpx_rc_gop_decision_t; 410*fb1b10abSAndroid Build Coastguard Worker 411*fb1b10abSAndroid Build Coastguard Worker /*!\brief The decision made by the external rate control model to set the 412*fb1b10abSAndroid Build Coastguard Worker * key frame location and the show frame count in the key frame group 413*fb1b10abSAndroid Build Coastguard Worker */ 414*fb1b10abSAndroid Build Coastguard Worker typedef struct vpx_rc_key_frame_decision { 415*fb1b10abSAndroid Build Coastguard Worker int key_frame_show_index; /**< This key frame's show index in the video */ 416*fb1b10abSAndroid Build Coastguard Worker int key_frame_group_size; /**< Show frame count of this key frame group */ 417*fb1b10abSAndroid Build Coastguard Worker } vpx_rc_key_frame_decision_t; 418*fb1b10abSAndroid Build Coastguard Worker 419*fb1b10abSAndroid Build Coastguard Worker /*!\brief Create an external rate control model callback prototype 420*fb1b10abSAndroid Build Coastguard Worker * 421*fb1b10abSAndroid Build Coastguard Worker * This callback is invoked by the encoder to create an external rate control 422*fb1b10abSAndroid Build Coastguard Worker * model. 423*fb1b10abSAndroid Build Coastguard Worker * 424*fb1b10abSAndroid Build Coastguard Worker * \param[in] priv Callback's private data 425*fb1b10abSAndroid Build Coastguard Worker * \param[in] ratectrl_config Pointer to vpx_rc_config_t 426*fb1b10abSAndroid Build Coastguard Worker * \param[out] rate_ctrl_model_ptr Pointer to vpx_rc_model_t 427*fb1b10abSAndroid Build Coastguard Worker */ 428*fb1b10abSAndroid Build Coastguard Worker typedef vpx_rc_status_t (*vpx_rc_create_model_cb_fn_t)( 429*fb1b10abSAndroid Build Coastguard Worker void *priv, const vpx_rc_config_t *ratectrl_config, 430*fb1b10abSAndroid Build Coastguard Worker vpx_rc_model_t *rate_ctrl_model_ptr); 431*fb1b10abSAndroid Build Coastguard Worker 432*fb1b10abSAndroid Build Coastguard Worker /*!\brief Send first pass stats to the external rate control model callback 433*fb1b10abSAndroid Build Coastguard Worker * prototype 434*fb1b10abSAndroid Build Coastguard Worker * 435*fb1b10abSAndroid Build Coastguard Worker * This callback is invoked by the encoder to send first pass stats to the 436*fb1b10abSAndroid Build Coastguard Worker * external rate control model. 437*fb1b10abSAndroid Build Coastguard Worker * 438*fb1b10abSAndroid Build Coastguard Worker * \param[in] rate_ctrl_model rate control model 439*fb1b10abSAndroid Build Coastguard Worker * \param[in] first_pass_stats first pass stats 440*fb1b10abSAndroid Build Coastguard Worker */ 441*fb1b10abSAndroid Build Coastguard Worker typedef vpx_rc_status_t (*vpx_rc_send_firstpass_stats_cb_fn_t)( 442*fb1b10abSAndroid Build Coastguard Worker vpx_rc_model_t rate_ctrl_model, 443*fb1b10abSAndroid Build Coastguard Worker const vpx_rc_firstpass_stats_t *first_pass_stats); 444*fb1b10abSAndroid Build Coastguard Worker 445*fb1b10abSAndroid Build Coastguard Worker /*!\brief Send TPL stats for the current GOP to the external rate control model 446*fb1b10abSAndroid Build Coastguard Worker * callback prototype 447*fb1b10abSAndroid Build Coastguard Worker * 448*fb1b10abSAndroid Build Coastguard Worker * This callback is invoked by the encoder to send TPL stats for the GOP to the 449*fb1b10abSAndroid Build Coastguard Worker * external rate control model. 450*fb1b10abSAndroid Build Coastguard Worker * 451*fb1b10abSAndroid Build Coastguard Worker * \param[in] rate_ctrl_model rate control model 452*fb1b10abSAndroid Build Coastguard Worker * \param[in] tpl_gop_stats TPL stats for current GOP 453*fb1b10abSAndroid Build Coastguard Worker */ 454*fb1b10abSAndroid Build Coastguard Worker typedef vpx_rc_status_t (*vpx_rc_send_tpl_gop_stats_cb_fn_t)( 455*fb1b10abSAndroid Build Coastguard Worker vpx_rc_model_t rate_ctrl_model, const VpxTplGopStats *tpl_gop_stats); 456*fb1b10abSAndroid Build Coastguard Worker 457*fb1b10abSAndroid Build Coastguard Worker /*!\brief Receive encode frame decision callback prototype 458*fb1b10abSAndroid Build Coastguard Worker * 459*fb1b10abSAndroid Build Coastguard Worker * This callback is invoked by the encoder to receive encode frame decision from 460*fb1b10abSAndroid Build Coastguard Worker * the external rate control model. 461*fb1b10abSAndroid Build Coastguard Worker * 462*fb1b10abSAndroid Build Coastguard Worker * \param[in] rate_ctrl_model rate control model 463*fb1b10abSAndroid Build Coastguard Worker * \param[in] frame_gop_index index of the frame in current gop 464*fb1b10abSAndroid Build Coastguard Worker * \param[out] frame_decision encode decision of the coding frame 465*fb1b10abSAndroid Build Coastguard Worker */ 466*fb1b10abSAndroid Build Coastguard Worker typedef vpx_rc_status_t (*vpx_rc_get_encodeframe_decision_cb_fn_t)( 467*fb1b10abSAndroid Build Coastguard Worker vpx_rc_model_t rate_ctrl_model, const int frame_gop_index, 468*fb1b10abSAndroid Build Coastguard Worker vpx_rc_encodeframe_decision_t *frame_decision); 469*fb1b10abSAndroid Build Coastguard Worker 470*fb1b10abSAndroid Build Coastguard Worker /*!\brief Update encode frame result callback prototype 471*fb1b10abSAndroid Build Coastguard Worker * 472*fb1b10abSAndroid Build Coastguard Worker * This callback is invoked by the encoder to update encode frame result to the 473*fb1b10abSAndroid Build Coastguard Worker * external rate control model. 474*fb1b10abSAndroid Build Coastguard Worker * 475*fb1b10abSAndroid Build Coastguard Worker * \param[in] rate_ctrl_model rate control model 476*fb1b10abSAndroid Build Coastguard Worker * \param[out] encode_frame_result encode result of the coding frame 477*fb1b10abSAndroid Build Coastguard Worker */ 478*fb1b10abSAndroid Build Coastguard Worker typedef vpx_rc_status_t (*vpx_rc_update_encodeframe_result_cb_fn_t)( 479*fb1b10abSAndroid Build Coastguard Worker vpx_rc_model_t rate_ctrl_model, 480*fb1b10abSAndroid Build Coastguard Worker const vpx_rc_encodeframe_result_t *encode_frame_result); 481*fb1b10abSAndroid Build Coastguard Worker 482*fb1b10abSAndroid Build Coastguard Worker /*!\brief Get the key frame decision from the external rate control model. 483*fb1b10abSAndroid Build Coastguard Worker * 484*fb1b10abSAndroid Build Coastguard Worker * This callback is invoked by the encoder to get key frame decision from 485*fb1b10abSAndroid Build Coastguard Worker * the external rate control model. 486*fb1b10abSAndroid Build Coastguard Worker * 487*fb1b10abSAndroid Build Coastguard Worker * \param[in] rate_ctrl_model rate control model 488*fb1b10abSAndroid Build Coastguard Worker * \param[out] key_frame_decision key frame decision from the model 489*fb1b10abSAndroid Build Coastguard Worker */ 490*fb1b10abSAndroid Build Coastguard Worker typedef vpx_rc_status_t (*vpx_rc_get_key_frame_decision_cb_fn_t)( 491*fb1b10abSAndroid Build Coastguard Worker vpx_rc_model_t rate_ctrl_model, 492*fb1b10abSAndroid Build Coastguard Worker vpx_rc_key_frame_decision_t *key_frame_decision); 493*fb1b10abSAndroid Build Coastguard Worker 494*fb1b10abSAndroid Build Coastguard Worker /*!\brief Get the GOP structure from the external rate control model. 495*fb1b10abSAndroid Build Coastguard Worker * 496*fb1b10abSAndroid Build Coastguard Worker * This callback is invoked by the encoder to get GOP decisions from 497*fb1b10abSAndroid Build Coastguard Worker * the external rate control model. 498*fb1b10abSAndroid Build Coastguard Worker * 499*fb1b10abSAndroid Build Coastguard Worker * \param[in] rate_ctrl_model rate control model 500*fb1b10abSAndroid Build Coastguard Worker * \param[out] gop_decision GOP decision from the model 501*fb1b10abSAndroid Build Coastguard Worker */ 502*fb1b10abSAndroid Build Coastguard Worker typedef vpx_rc_status_t (*vpx_rc_get_gop_decision_cb_fn_t)( 503*fb1b10abSAndroid Build Coastguard Worker vpx_rc_model_t rate_ctrl_model, vpx_rc_gop_decision_t *gop_decision); 504*fb1b10abSAndroid Build Coastguard Worker 505*fb1b10abSAndroid Build Coastguard Worker /*!\brief Get the frame rdmult from the external rate control model. 506*fb1b10abSAndroid Build Coastguard Worker * 507*fb1b10abSAndroid Build Coastguard Worker * This callback is invoked by the encoder to get rdmult from 508*fb1b10abSAndroid Build Coastguard Worker * the external rate control model. 509*fb1b10abSAndroid Build Coastguard Worker * 510*fb1b10abSAndroid Build Coastguard Worker * \param[in] rate_ctrl_model rate control model 511*fb1b10abSAndroid Build Coastguard Worker * \param[in] frame_info information collected from the encoder 512*fb1b10abSAndroid Build Coastguard Worker * \param[out] rdmult frame rate-distortion multiplier from the model 513*fb1b10abSAndroid Build Coastguard Worker */ 514*fb1b10abSAndroid Build Coastguard Worker typedef vpx_rc_status_t (*vpx_rc_get_frame_rdmult_cb_fn_t)( 515*fb1b10abSAndroid Build Coastguard Worker vpx_rc_model_t rate_ctrl_model, const vpx_rc_encodeframe_info_t *frame_info, 516*fb1b10abSAndroid Build Coastguard Worker int *rdmult); 517*fb1b10abSAndroid Build Coastguard Worker 518*fb1b10abSAndroid Build Coastguard Worker /*!\brief Delete the external rate control model callback prototype 519*fb1b10abSAndroid Build Coastguard Worker * 520*fb1b10abSAndroid Build Coastguard Worker * This callback is invoked by the encoder to delete the external rate control 521*fb1b10abSAndroid Build Coastguard Worker * model. 522*fb1b10abSAndroid Build Coastguard Worker * 523*fb1b10abSAndroid Build Coastguard Worker * \param[in] rate_ctrl_model rate control model 524*fb1b10abSAndroid Build Coastguard Worker */ 525*fb1b10abSAndroid Build Coastguard Worker typedef vpx_rc_status_t (*vpx_rc_delete_model_cb_fn_t)( 526*fb1b10abSAndroid Build Coastguard Worker vpx_rc_model_t rate_ctrl_model); 527*fb1b10abSAndroid Build Coastguard Worker 528*fb1b10abSAndroid Build Coastguard Worker /*!\brief Callback function set for external rate control. 529*fb1b10abSAndroid Build Coastguard Worker * 530*fb1b10abSAndroid Build Coastguard Worker * The user can enable external rate control by registering 531*fb1b10abSAndroid Build Coastguard Worker * a set of callback functions with the codec control flag 532*fb1b10abSAndroid Build Coastguard Worker * #VP9E_SET_EXTERNAL_RATE_CONTROL. 533*fb1b10abSAndroid Build Coastguard Worker */ 534*fb1b10abSAndroid Build Coastguard Worker typedef struct vpx_rc_funcs { 535*fb1b10abSAndroid Build Coastguard Worker /*! 536*fb1b10abSAndroid Build Coastguard Worker * The rate control type of this API. 537*fb1b10abSAndroid Build Coastguard Worker */ 538*fb1b10abSAndroid Build Coastguard Worker vpx_rc_type_t rc_type; 539*fb1b10abSAndroid Build Coastguard Worker /*! 540*fb1b10abSAndroid Build Coastguard Worker * Create an external rate control model. 541*fb1b10abSAndroid Build Coastguard Worker */ 542*fb1b10abSAndroid Build Coastguard Worker vpx_rc_create_model_cb_fn_t create_model; 543*fb1b10abSAndroid Build Coastguard Worker /*! 544*fb1b10abSAndroid Build Coastguard Worker * Send first pass stats to the external rate control model. 545*fb1b10abSAndroid Build Coastguard Worker */ 546*fb1b10abSAndroid Build Coastguard Worker vpx_rc_send_firstpass_stats_cb_fn_t send_firstpass_stats; 547*fb1b10abSAndroid Build Coastguard Worker /*! 548*fb1b10abSAndroid Build Coastguard Worker * Send TPL stats for current GOP to the external rate control model. 549*fb1b10abSAndroid Build Coastguard Worker */ 550*fb1b10abSAndroid Build Coastguard Worker vpx_rc_send_tpl_gop_stats_cb_fn_t send_tpl_gop_stats; 551*fb1b10abSAndroid Build Coastguard Worker /*! 552*fb1b10abSAndroid Build Coastguard Worker * Get encodeframe decision from the external rate control model. 553*fb1b10abSAndroid Build Coastguard Worker */ 554*fb1b10abSAndroid Build Coastguard Worker vpx_rc_get_encodeframe_decision_cb_fn_t get_encodeframe_decision; 555*fb1b10abSAndroid Build Coastguard Worker /*! 556*fb1b10abSAndroid Build Coastguard Worker * Update encodeframe result to the external rate control model. 557*fb1b10abSAndroid Build Coastguard Worker */ 558*fb1b10abSAndroid Build Coastguard Worker vpx_rc_update_encodeframe_result_cb_fn_t update_encodeframe_result; 559*fb1b10abSAndroid Build Coastguard Worker /*! 560*fb1b10abSAndroid Build Coastguard Worker * Get key frame decision from the external rate control model. 561*fb1b10abSAndroid Build Coastguard Worker */ 562*fb1b10abSAndroid Build Coastguard Worker vpx_rc_get_key_frame_decision_cb_fn_t get_key_frame_decision; 563*fb1b10abSAndroid Build Coastguard Worker /*! 564*fb1b10abSAndroid Build Coastguard Worker * Get GOP decisions from the external rate control model. 565*fb1b10abSAndroid Build Coastguard Worker */ 566*fb1b10abSAndroid Build Coastguard Worker vpx_rc_get_gop_decision_cb_fn_t get_gop_decision; 567*fb1b10abSAndroid Build Coastguard Worker /*! 568*fb1b10abSAndroid Build Coastguard Worker * Get rdmult for the frame from the external rate control model. 569*fb1b10abSAndroid Build Coastguard Worker */ 570*fb1b10abSAndroid Build Coastguard Worker vpx_rc_get_frame_rdmult_cb_fn_t get_frame_rdmult; 571*fb1b10abSAndroid Build Coastguard Worker /*! 572*fb1b10abSAndroid Build Coastguard Worker * Delete the external rate control model. 573*fb1b10abSAndroid Build Coastguard Worker */ 574*fb1b10abSAndroid Build Coastguard Worker vpx_rc_delete_model_cb_fn_t delete_model; 575*fb1b10abSAndroid Build Coastguard Worker 576*fb1b10abSAndroid Build Coastguard Worker /*! 577*fb1b10abSAndroid Build Coastguard Worker * Rate control log path. 578*fb1b10abSAndroid Build Coastguard Worker */ 579*fb1b10abSAndroid Build Coastguard Worker const char *rate_ctrl_log_path; 580*fb1b10abSAndroid Build Coastguard Worker /*! 581*fb1b10abSAndroid Build Coastguard Worker * Private data for the external rate control model. 582*fb1b10abSAndroid Build Coastguard Worker */ 583*fb1b10abSAndroid Build Coastguard Worker void *priv; 584*fb1b10abSAndroid Build Coastguard Worker } vpx_rc_funcs_t; 585*fb1b10abSAndroid Build Coastguard Worker 586*fb1b10abSAndroid Build Coastguard Worker #ifdef __cplusplus 587*fb1b10abSAndroid Build Coastguard Worker } // extern "C" 588*fb1b10abSAndroid Build Coastguard Worker #endif 589*fb1b10abSAndroid Build Coastguard Worker 590*fb1b10abSAndroid Build Coastguard Worker #endif // VPX_VPX_VPX_EXT_RATECTRL_H_ 591