Home | History | Annotate | Download | only in encoder
      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 */
    100 #define P_TO_B_RATIO (32) /* In K_Q Q factor */
    101 #define P_TO_I_RATIO (13) /* In K_Q Q factor */
    102 
    103 #endif /* _RC_COMMON_H_ */
    104 
    105