1*c83a76b0SSuyog Pawar /****************************************************************************** 2*c83a76b0SSuyog Pawar * 3*c83a76b0SSuyog Pawar * Copyright (C) 2018 The Android Open Source Project 4*c83a76b0SSuyog Pawar * 5*c83a76b0SSuyog Pawar * Licensed under the Apache License, Version 2.0 (the "License"); 6*c83a76b0SSuyog Pawar * you may not use this file except in compliance with the License. 7*c83a76b0SSuyog Pawar * You may obtain a copy of the License at: 8*c83a76b0SSuyog Pawar * 9*c83a76b0SSuyog Pawar * http://www.apache.org/licenses/LICENSE-2.0 10*c83a76b0SSuyog Pawar * 11*c83a76b0SSuyog Pawar * Unless required by applicable law or agreed to in writing, software 12*c83a76b0SSuyog Pawar * distributed under the License is distributed on an "AS IS" BASIS, 13*c83a76b0SSuyog Pawar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*c83a76b0SSuyog Pawar * See the License for the specific language governing permissions and 15*c83a76b0SSuyog Pawar * limitations under the License. 16*c83a76b0SSuyog Pawar * 17*c83a76b0SSuyog Pawar ***************************************************************************** 18*c83a76b0SSuyog Pawar * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 19*c83a76b0SSuyog Pawar */ 20*c83a76b0SSuyog Pawar /*! 21*c83a76b0SSuyog Pawar ****************************************************************************** 22*c83a76b0SSuyog Pawar * \file rc_common.h 23*c83a76b0SSuyog Pawar * 24*c83a76b0SSuyog Pawar * \brief 25*c83a76b0SSuyog Pawar * This file contains common macro used by rate control module 26*c83a76b0SSuyog Pawar * 27*c83a76b0SSuyog Pawar * \date 28*c83a76b0SSuyog Pawar * 29*c83a76b0SSuyog Pawar * \author 30*c83a76b0SSuyog Pawar * ittiam 31*c83a76b0SSuyog Pawar * 32*c83a76b0SSuyog Pawar ****************************************************************************** 33*c83a76b0SSuyog Pawar */ 34*c83a76b0SSuyog Pawar #ifndef _RC_COMMON_H_ 35*c83a76b0SSuyog Pawar #define _RC_COMMON_H_ 36*c83a76b0SSuyog Pawar 37*c83a76b0SSuyog Pawar /*****************************************************************************/ 38*c83a76b0SSuyog Pawar /* Constant Macros */ 39*c83a76b0SSuyog Pawar /*****************************************************************************/ 40*c83a76b0SSuyog Pawar /**************************************************************************** 41*c83a76b0SSuyog Pawar NOTE : Put only those things into this file which are common across many 42*c83a76b0SSuyog Pawar files, say I_TO_P_BIT_RATIO macro is used across bit_allocation.c 43*c83a76b0SSuyog Pawar and rate_control_api.c.If anything is exclusive only to one file, 44*c83a76b0SSuyog Pawar define it in the same file 45*c83a76b0SSuyog Pawar 46*c83a76b0SSuyog Pawar This file is an RC private file. It should not be exported to Codec 47*c83a76b0SSuyog Pawar ****************************************************************************/ 48*c83a76b0SSuyog Pawar 49*c83a76b0SSuyog Pawar /* Defines the maximum and the minimum quantizer allowed in the stream.*/ 50*c83a76b0SSuyog Pawar #define MAX_MPEG2_QP (4095) /*255*/ /* 127*/ 51*c83a76b0SSuyog Pawar #define ERR_2PASS_DISTR_GOP 5 52*c83a76b0SSuyog Pawar 53*c83a76b0SSuyog Pawar #define ENABLE_SSD_CALC_RC 0 54*c83a76b0SSuyog Pawar 55*c83a76b0SSuyog Pawar #ifdef ARM9 56*c83a76b0SSuyog Pawar /* Mem tab alignment to 4 bytes */ 57*c83a76b0SSuyog Pawar #define MEM_TAB_ALIGNMENT 32 /*ALIGN_WORD32*/ 58*c83a76b0SSuyog Pawar #else /* ARM968 */ 59*c83a76b0SSuyog Pawar /* Mem tab alignment to 128 bytes */ 60*c83a76b0SSuyog Pawar #define MEM_TAB_ALIGNMENT ALIGN_128_BYTE 61*c83a76b0SSuyog Pawar #endif /* ARM968 */ 62*c83a76b0SSuyog Pawar 63*c83a76b0SSuyog Pawar #define COMP_TO_BITS_MAP(X, factor) \ 64*c83a76b0SSuyog Pawar ((-1.7561f * (X * X * X * X) + (2.5547f * X * X * X) - 0.3408f * (X * X) + (0.5343f * X) - \ 65*c83a76b0SSuyog Pawar 0.003f) * \ 66*c83a76b0SSuyog Pawar factor) 67*c83a76b0SSuyog Pawar 68*c83a76b0SSuyog Pawar #define COMP_TO_BITS_MAP_2_PASS(X, factor) \ 69*c83a76b0SSuyog Pawar ((-1.7561f * (X * X * X * X) + (2.5547f * X * X * X) - 0.3408f * (X * X) + (0.5343f * X) - \ 70*c83a76b0SSuyog Pawar 0.003f) * \ 71*c83a76b0SSuyog Pawar factor) 72*c83a76b0SSuyog Pawar /* Calculates P = (X*Y/Z) (Assuming all the four are in integers)*/ 73*c83a76b0SSuyog Pawar #define X_PROD_Y_DIV_Z(X1, Y1, Z1, P1) \ 74*c83a76b0SSuyog Pawar { \ 75*c83a76b0SSuyog Pawar number_t vq_a, vq_b, vq_c; \ 76*c83a76b0SSuyog Pawar SET_VAR_Q(vq_a, (X1), 0); \ 77*c83a76b0SSuyog Pawar SET_VAR_Q(vq_b, (Y1), 0); \ 78*c83a76b0SSuyog Pawar SET_VAR_Q(vq_c, (Z1), 0); \ 79*c83a76b0SSuyog Pawar mult32_var_q(vq_a, vq_b, &vq_a); \ 80*c83a76b0SSuyog Pawar div32_var_q(vq_a, vq_c, &vq_a); \ 81*c83a76b0SSuyog Pawar number_t_to_word32(vq_a, &(P1)); \ 82*c83a76b0SSuyog Pawar } 83*c83a76b0SSuyog Pawar 84*c83a76b0SSuyog Pawar /* Maximum number of drain-rates supported. Currently a maximum of only 2 85*c83a76b0SSuyog Pawar drain-rates supported. One for 86*c83a76b0SSuyog Pawar I pictures and the other for P & B pictures */ 87*c83a76b0SSuyog Pawar #define MAX_NUM_DRAIN_RATES 2 88*c83a76b0SSuyog Pawar 89*c83a76b0SSuyog Pawar /* The ratios between I to P and P to B Qp is specified here */ 90*c83a76b0SSuyog Pawar #define K_Q 4 91*c83a76b0SSuyog Pawar #define I_TO_P_RATIO (18) /*(16)*/ /* In K_Q Q factor */ 92*c83a76b0SSuyog Pawar #define P_TO_B_RATIO (18) /* In K_Q Q factor */ 93*c83a76b0SSuyog Pawar #define B_TO_B1_RATIO (18) 94*c83a76b0SSuyog Pawar #define B1_TO_B2_RATIO (18) 95*c83a76b0SSuyog Pawar #define P_TO_I_RATIO (14) 96*c83a76b0SSuyog Pawar #define I_TO_B_RATIO ((P_TO_B_RATIO * I_TO_P_RATIO) >> K_Q) 97*c83a76b0SSuyog Pawar #define I_TO_B1_RATIO ((B_TO_B1_RATIO * P_TO_B_RATIO * I_TO_P_RATIO) >> (K_Q + K_Q)) 98*c83a76b0SSuyog Pawar #define I_TO_B2_RATIO \ 99*c83a76b0SSuyog Pawar ((B1_TO_B2_RATIO * B_TO_B1_RATIO * P_TO_B_RATIO * I_TO_P_RATIO) >> (K_Q + K_Q + K_Q)) 100*c83a76b0SSuyog Pawar 101*c83a76b0SSuyog Pawar #define P_TO_B_RATIO_HBR (16) 102*c83a76b0SSuyog Pawar #define I_TO_P_RATIO_LOW_MOTION (20) 103*c83a76b0SSuyog Pawar #define I_TO_P_RATIO_VLOW_MOTION (23) 104*c83a76b0SSuyog Pawar #define I_TO_P_RATIO_VVLOW_MOTION (26) 105*c83a76b0SSuyog Pawar 106*c83a76b0SSuyog Pawar /* #define I_TO_P_RATIO (16) In K_Q Q factor */ 107*c83a76b0SSuyog Pawar /* #define P_TO_B_RATIO (16) In K_Q Q factor */ 108*c83a76b0SSuyog Pawar 109*c83a76b0SSuyog Pawar /*Ratio of I frame bit consumptin vs average bit consumption for rest of the GOP 110*c83a76b0SSuyog Pawar * This is based on experimaental runs over different seqience(same resolution scaled)*/ 111*c83a76b0SSuyog Pawar #define I_TO_AVG_REST_GOP_BIT (8) 112*c83a76b0SSuyog Pawar #define MINIMUM_VISIBILITY_B4_STATIC_I \ 113*c83a76b0SSuyog Pawar (18) //assumes this minimum lap window for bit allocation of static frame 114*c83a76b0SSuyog Pawar #define MINIMUM_FRM_I_TO_REST_LAP_ENABLED (8) 115*c83a76b0SSuyog Pawar #define I_TO_AVG_REST_GOP_BIT_MIN (1) 116*c83a76b0SSuyog Pawar #define I_TO_AVG_REST_GOP_BIT_MAX (20) 117*c83a76b0SSuyog Pawar #define I_TO_AVG_REST_GOP_BIT_MAX_INFINITE (80) 118*c83a76b0SSuyog Pawar #define I_TO_AVG_REST_GOP_BIT_MAX_2_PASS (40) 119*c83a76b0SSuyog Pawar #define I_TO_AVG_REST_GOP_BIT_MIN_2_PASS (0.5f) 120*c83a76b0SSuyog Pawar 121*c83a76b0SSuyog Pawar #define UPPER_THRESHOLD_EBF_Q4 (15) 122*c83a76b0SSuyog Pawar #define STATIC_I_TO_REST_MULTIPLIER (6) 123*c83a76b0SSuyog Pawar 124*c83a76b0SSuyog Pawar /*also present in encoder herader file with same name*/ 125*c83a76b0SSuyog Pawar #define MAX_LAP_COMPLEXITY_Q7 (90) 126*c83a76b0SSuyog Pawar #define DEFAULT_TEX_PERCENTAGE_Q5 24 127*c83a76b0SSuyog Pawar 128*c83a76b0SSuyog Pawar #ifdef DISABLE_NON_STEADY_STATE_CODE 129*c83a76b0SSuyog Pawar #define NON_STEADSTATE_CODE (0) 130*c83a76b0SSuyog Pawar #else 131*c83a76b0SSuyog Pawar #define NON_STEADSTATE_CODE (1) 132*c83a76b0SSuyog Pawar #endif 133*c83a76b0SSuyog Pawar 134*c83a76b0SSuyog Pawar /*HEVC_hierarchy*/ 135*c83a76b0SSuyog Pawar #define I_TO_P_BIT_RATIO (6) 136*c83a76b0SSuyog Pawar #define P_TO_B_BIT_RATIO (2) 137*c83a76b0SSuyog Pawar #define B_TO_B1_BIT_RATO0 (2) 138*c83a76b0SSuyog Pawar #define B1_TO_B2_BIT_RATIO (2) 139*c83a76b0SSuyog Pawar 140*c83a76b0SSuyog Pawar /*define static I_TO_P ratio for all pic types*/ 141*c83a76b0SSuyog Pawar /* Trying to detect a static content and fixing the quality for that content. The trigger for such a 142*c83a76b0SSuyog Pawar content is if the ratio between the estimated I frame to that of P is more than 18 times. If such 143*c83a76b0SSuyog Pawar a simple content is detected then the bit ditribution is fixed to a ration of 36:2:1 (I:P:B) */ 144*c83a76b0SSuyog Pawar #define STATIC_I_TO_B2_RATIO (100) //(24) 145*c83a76b0SSuyog Pawar #define STATIC_P_TO_B2_RATIO (2) 146*c83a76b0SSuyog Pawar #define STATIC_B_TO_B2_RATIO (1) 147*c83a76b0SSuyog Pawar #define STATIC_B1_TO_B2_RATIO (1) 148*c83a76b0SSuyog Pawar 149*c83a76b0SSuyog Pawar /*Fsim limits*/ 150*c83a76b0SSuyog Pawar #define RC_FSIM_LOW_THR_SCD 64 151*c83a76b0SSuyog Pawar 152*c83a76b0SSuyog Pawar #define RC_FSIM_HIGH_THR_STATIC 115 153*c83a76b0SSuyog Pawar 154*c83a76b0SSuyog Pawar #endif /* _RC_COMMON_H_ */ 155