1*495ae853SAndroid Build Coastguard Worker /****************************************************************************** 2*495ae853SAndroid Build Coastguard Worker * 3*495ae853SAndroid Build Coastguard Worker * Copyright (C) 2015 The Android Open Source Project 4*495ae853SAndroid Build Coastguard Worker * 5*495ae853SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 6*495ae853SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 7*495ae853SAndroid Build Coastguard Worker * You may obtain a copy of the License at: 8*495ae853SAndroid Build Coastguard Worker * 9*495ae853SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 10*495ae853SAndroid Build Coastguard Worker * 11*495ae853SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 12*495ae853SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 13*495ae853SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*495ae853SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 15*495ae853SAndroid Build Coastguard Worker * limitations under the License. 16*495ae853SAndroid Build Coastguard Worker * 17*495ae853SAndroid Build Coastguard Worker ***************************************************************************** 18*495ae853SAndroid Build Coastguard Worker * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 19*495ae853SAndroid Build Coastguard Worker */ 20*495ae853SAndroid Build Coastguard Worker 21*495ae853SAndroid Build Coastguard Worker #ifndef _RC_COMMON_H_ 22*495ae853SAndroid Build Coastguard Worker #define _RC_COMMON_H_ 23*495ae853SAndroid Build Coastguard Worker 24*495ae853SAndroid Build Coastguard Worker /**************************************************************************** 25*495ae853SAndroid Build Coastguard Worker NOTE : Put only those things into this file which are common across many 26*495ae853SAndroid Build Coastguard Worker files, say I_TO_P_BIT_RATIO macro is used across irc_bit_allocation.c 27*495ae853SAndroid Build Coastguard Worker and irc_rate_control_api.c.If anything is exclusive only to one file, 28*495ae853SAndroid Build Coastguard Worker define it in the same file 29*495ae853SAndroid Build Coastguard Worker 30*495ae853SAndroid Build Coastguard Worker This file is an RC private file. It should not be exported to Codec 31*495ae853SAndroid Build Coastguard Worker ****************************************************************************/ 32*495ae853SAndroid Build Coastguard Worker 33*495ae853SAndroid Build Coastguard Worker #define UNUSED(x) ((void)(x)) 34*495ae853SAndroid Build Coastguard Worker 35*495ae853SAndroid Build Coastguard Worker typedef float number_t; 36*495ae853SAndroid Build Coastguard Worker 37*495ae853SAndroid Build Coastguard Worker #define mult32_var_q(a,b,c) *c = a * b 38*495ae853SAndroid Build Coastguard Worker 39*495ae853SAndroid Build Coastguard Worker #define div32_var_q(a,b,c) (*c = ((b == 0)? a : (a / b))) 40*495ae853SAndroid Build Coastguard Worker 41*495ae853SAndroid Build Coastguard Worker #define add32_var_q(a,b,c) *c = a + b 42*495ae853SAndroid Build Coastguard Worker 43*495ae853SAndroid Build Coastguard Worker #define sub32_var_q(a,b,c) *c = a - b 44*495ae853SAndroid Build Coastguard Worker 45*495ae853SAndroid Build Coastguard Worker #define sqrt32_var_q(a, c) *c = sqrt(a) 46*495ae853SAndroid Build Coastguard Worker 47*495ae853SAndroid Build Coastguard Worker #define number_t_to_word32(num_a, a) *a = (WORD32)num_a 48*495ae853SAndroid Build Coastguard Worker 49*495ae853SAndroid Build Coastguard Worker #define convert_float_to_fix(a_f, a) *a = (WORD32)a_f 50*495ae853SAndroid Build Coastguard Worker 51*495ae853SAndroid Build Coastguard Worker #define convert_fix_to_float(a, a_f) *a_f = (float) a 52*495ae853SAndroid Build Coastguard Worker 53*495ae853SAndroid Build Coastguard Worker #define SET_VAR_Q(a,b,c) {a = (float) b;} 54*495ae853SAndroid Build Coastguard Worker 55*495ae853SAndroid Build Coastguard Worker 56*495ae853SAndroid Build Coastguard Worker /* Defines the maximum and the minimum quantizer allowed in the stream.*/ 57*495ae853SAndroid Build Coastguard Worker #define MAX_MPEG2_QP 255 /* 127*/ 58*495ae853SAndroid Build Coastguard Worker 59*495ae853SAndroid Build Coastguard Worker /* Bits ratio between I and P frame */ 60*495ae853SAndroid Build Coastguard Worker #define I_TO_P_BIT_RATIO 5 61*495ae853SAndroid Build Coastguard Worker 62*495ae853SAndroid Build Coastguard Worker /* Calculates P = (X*Y/Z) (Assuming all the four are in integers)*/ 63*495ae853SAndroid Build Coastguard Worker #define X_PROD_Y_DIV_Z(X1,Y1,Z1,P1)\ 64*495ae853SAndroid Build Coastguard Worker {\ 65*495ae853SAndroid Build Coastguard Worker number_t vq_a,vq_b,vq_c;\ 66*495ae853SAndroid Build Coastguard Worker SET_VAR_Q(vq_a,(X1),0);\ 67*495ae853SAndroid Build Coastguard Worker SET_VAR_Q(vq_b,(Y1),0);\ 68*495ae853SAndroid Build Coastguard Worker SET_VAR_Q(vq_c,(Z1),0);\ 69*495ae853SAndroid Build Coastguard Worker mult32_var_q(vq_a,vq_b,&vq_a);\ 70*495ae853SAndroid Build Coastguard Worker div32_var_q(vq_a,vq_c,&vq_a);\ 71*495ae853SAndroid Build Coastguard Worker number_t_to_word32(vq_a,&(P1));\ 72*495ae853SAndroid Build Coastguard Worker } 73*495ae853SAndroid Build Coastguard Worker #define VQ_A_LT_VQ_B(A,B, Z) Z = A < B; 74*495ae853SAndroid Build Coastguard Worker #define VQ_A_GT_VQ_B(A,B, Z) Z = A > B; 75*495ae853SAndroid Build Coastguard Worker 76*495ae853SAndroid Build Coastguard Worker /* Z=MAX(A,B) where A, B and Z are var_q variables */ 77*495ae853SAndroid Build Coastguard Worker #define MAX_VARQ(A,B, Z)\ 78*495ae853SAndroid Build Coastguard Worker {\ 79*495ae853SAndroid Build Coastguard Worker WORD32 a_gt_b;\ 80*495ae853SAndroid Build Coastguard Worker VQ_A_GT_VQ_B((A), (B), a_gt_b);\ 81*495ae853SAndroid Build Coastguard Worker (Z) = (a_gt_b) ? (A) : (B);\ 82*495ae853SAndroid Build Coastguard Worker } 83*495ae853SAndroid Build Coastguard Worker 84*495ae853SAndroid Build Coastguard Worker /* Z=MIN(A,B) where A, B and Z are var_q variables */ 85*495ae853SAndroid Build Coastguard Worker #define MIN_VARQ(A,B, Z)\ 86*495ae853SAndroid Build Coastguard Worker {\ 87*495ae853SAndroid Build Coastguard Worker WORD32 a_lt_b;\ 88*495ae853SAndroid Build Coastguard Worker VQ_A_LT_VQ_B((A), (B), a_lt_b);\ 89*495ae853SAndroid Build Coastguard Worker (Z) = (a_lt_b) ? (A) : (B);\ 90*495ae853SAndroid Build Coastguard Worker } 91*495ae853SAndroid Build Coastguard Worker 92*495ae853SAndroid Build Coastguard Worker /* Maximum number of drain-rates supported. Currently a maximum of only 2 93*495ae853SAndroid Build Coastguard Worker drain-rates supported. One for 94*495ae853SAndroid Build Coastguard Worker I pictures and the other for P & B pictures */ 95*495ae853SAndroid Build Coastguard Worker #define MAX_NUM_DRAIN_RATES 2 96*495ae853SAndroid Build Coastguard Worker 97*495ae853SAndroid Build Coastguard Worker /* The ratios between I to P and P to B Qp is specified here */ 98*495ae853SAndroid Build Coastguard Worker #define K_Q 4 99*495ae853SAndroid Build Coastguard Worker #define I_TO_P_RATIO (19) /* In K_Q Q factor */ 100*495ae853SAndroid Build Coastguard Worker #define P_TO_B_RATIO (32) /* In K_Q Q factor */ 101*495ae853SAndroid Build Coastguard Worker #define P_TO_I_RATIO (13) /* In K_Q Q factor */ 102*495ae853SAndroid Build Coastguard Worker 103*495ae853SAndroid Build Coastguard Worker #endif /* _RC_COMMON_H_ */ 104*495ae853SAndroid Build Coastguard Worker 105