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 /**
22 *******************************************************************************
23 * @file
24 *  ih264e_statistics.h
25 *
26 * @brief
27 *  Contains macros for generating stats about h264 encoder
28 *
29 * @author
30 *  ittiam
31 *
32 * @remarks
33 *  None
34 *
35 *******************************************************************************
36 */
37 
38 #ifndef IH264E_STATISTICS_H_
39 #define IH264E_STATISTICS_H_
40 
41 #if  CAVLC_LEVEL_STATS
42 
43 /*****************************************************************************/
44 /* Extern global declarations                                                */
45 /*****************************************************************************/
46 
47 /**
48  ******************************************************************************
49  * @brief  In cavlc encoding, a lut is used for encoding levels. It is not possible
50  * to use look up for all possible levels. The extent to which look up is generated
51  * is based on the statistics that were collected in the following global variables.
52  *
53  * gu4_cavlc_level_bin_lt_4 represents the number coefficients with abs(level) < 4
54  * gu4_cavlc_level_bin_lt_16 represents the number coefficients with 4 < abs(level) < 16
55  * gu4_cavlc_level_bin_lt_32 represents the number coefficients with 16 < abs(level) < 32
56  * and so on ...
57  * ******************************************************************************
58  */
59 extern UWORD32 gu4_cavlc_level_bin_lt_4;
60 extern UWORD32 gu4_cavlc_level_bin_lt_16;
61 extern UWORD32 gu4_cavlc_level_bin_lt_32;
62 extern UWORD32 gu4_cavlc_level_bin_lt_64;
63 extern UWORD32 gu4_cavlc_level_bin_lt_128;
64 extern UWORD32 gu4_cavlc_level_bin_else_where;
65 extern UWORD32 gu4_cavlc_level_lut_hit_rate;
66 
67 /*****************************************************************************/
68 /* Extern function declarations                                              */
69 /*****************************************************************************/
70 
71 /**
72 ******************************************************************************
73 *  @brief print cavlc stats
74 ******************************************************************************
75 */
76 void print_cavlc_level_stats(void);
77 
78 #define GATHER_CAVLC_STATS1() \
79     if (u4_abs_level < 4)\
80         gu4_cavlc_level_bin_lt_4 ++; \
81     else if  (u4_abs_level < 16) \
82         gu4_cavlc_level_bin_lt_16 ++; \
83     else if  (u4_abs_level < 32) \
84         gu4_cavlc_level_bin_lt_32 ++; \
85     else if  (u4_abs_level < 64) \
86         gu4_cavlc_level_bin_lt_64 ++; \
87     else if  (u4_abs_level < 128) \
88         gu4_cavlc_level_bin_lt_128 ++; \
89     else \
90         gu4_cavlc_level_bin_else_where ++;
91 
92 #define GATHER_CAVLC_STATS2() \
93                 gu4_cavlc_level_lut_hit_rate ++;
94 
95 #else
96 
97 #define GATHER_CAVLC_STATS1()
98 
99 #define GATHER_CAVLC_STATS2()
100 
101 #endif
102 
103 
104 #if  GATING_STATS
105 
106 /*****************************************************************************/
107 /* Extern global declarations                                                */
108 /*****************************************************************************/
109 
110 /**
111 ******************************************************************************
112 * @brief  During encoding at fastest preset, some times if the inter threshold
113 * is lesser than the predefined threshold, intra analysis is not done. The
114 * below variable keeps track of the number of mb for which intra analysis is not
115 * done
116 * ******************************************************************************
117 */
118 extern UWORD32 gu4_mb_gated_cnt;
119 
120 /*****************************************************************************/
121 /* Extern function declarations                                              */
122 /*****************************************************************************/
123 
124 /**
125 ******************************************************************************
126 *  @brief print gating stats
127 ******************************************************************************
128 */
129 void print_gating_stats(void);
130 
131 #define GATHER_GATING_STATS() \
132         gu4_mb_gated_cnt ++;
133 
134 #else
135 
136 #define GATHER_GATING_STATS()
137 
138 #endif
139 
140 
141 #endif /* IH264E_STATISTICS_H_ */
142