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