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