xref: /aosp_15_r20/external/libhevc/decoder/ihevcd_trace.h (revision c83a76b084498d55f252f48b2e3786804cdf24b7)
1*c83a76b0SSuyog Pawar /******************************************************************************
2*c83a76b0SSuyog Pawar *
3*c83a76b0SSuyog Pawar * Copyright (C) 2012 Ittiam Systems Pvt Ltd, Bangalore
4*c83a76b0SSuyog Pawar *
5*c83a76b0SSuyog Pawar * Licensed under the Apache License, Version 2.0 (the "License");
6*c83a76b0SSuyog Pawar * you may not use this file except in compliance with the License.
7*c83a76b0SSuyog Pawar * You may obtain a copy of the License at:
8*c83a76b0SSuyog Pawar *
9*c83a76b0SSuyog Pawar * http://www.apache.org/licenses/LICENSE-2.0
10*c83a76b0SSuyog Pawar *
11*c83a76b0SSuyog Pawar * Unless required by applicable law or agreed to in writing, software
12*c83a76b0SSuyog Pawar * distributed under the License is distributed on an "AS IS" BASIS,
13*c83a76b0SSuyog Pawar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*c83a76b0SSuyog Pawar * See the License for the specific language governing permissions and
15*c83a76b0SSuyog Pawar * limitations under the License.
16*c83a76b0SSuyog Pawar *
17*c83a76b0SSuyog Pawar ******************************************************************************/
18*c83a76b0SSuyog Pawar /**
19*c83a76b0SSuyog Pawar *******************************************************************************
20*c83a76b0SSuyog Pawar * @file
21*c83a76b0SSuyog Pawar *  ihevcd_trace.h
22*c83a76b0SSuyog Pawar *
23*c83a76b0SSuyog Pawar * @brief
24*c83a76b0SSuyog Pawar *  Header for codec trace messages
25*c83a76b0SSuyog Pawar *
26*c83a76b0SSuyog Pawar * @author
27*c83a76b0SSuyog Pawar *  Ittiam
28*c83a76b0SSuyog Pawar *
29*c83a76b0SSuyog Pawar * @remarks
30*c83a76b0SSuyog Pawar *  None
31*c83a76b0SSuyog Pawar *
32*c83a76b0SSuyog Pawar *******************************************************************************
33*c83a76b0SSuyog Pawar */
34*c83a76b0SSuyog Pawar #ifndef _IHEVCD_TRACE_H_
35*c83a76b0SSuyog Pawar #define _IHEVCD_TRACE_H_
36*c83a76b0SSuyog Pawar 
37*c83a76b0SSuyog Pawar #define FULLRANGE 1
38*c83a76b0SSuyog Pawar 
39*c83a76b0SSuyog Pawar 
40*c83a76b0SSuyog Pawar #define RANGE_NUMBITS 31
41*c83a76b0SSuyog Pawar #define RANGE_SHIFT  (RANGE_NUMBITS - 9)
42*c83a76b0SSuyog Pawar 
43*c83a76b0SSuyog Pawar #ifdef TRACE
44*c83a76b0SSuyog Pawar /**
45*c83a76b0SSuyog Pawar  * Context for trace
46*c83a76b0SSuyog Pawar  */
47*c83a76b0SSuyog Pawar typedef struct
48*c83a76b0SSuyog Pawar {
49*c83a76b0SSuyog Pawar     /**
50*c83a76b0SSuyog Pawar      * fp
51*c83a76b0SSuyog Pawar      */
52*c83a76b0SSuyog Pawar     FILE    *fp;
53*c83a76b0SSuyog Pawar 
54*c83a76b0SSuyog Pawar     /**
55*c83a76b0SSuyog Pawar      * u8_cnt
56*c83a76b0SSuyog Pawar      */
57*c83a76b0SSuyog Pawar     ULWORD64  u8_cnt;
58*c83a76b0SSuyog Pawar }trace_t;
59*c83a76b0SSuyog Pawar 
60*c83a76b0SSuyog Pawar /**
61*c83a76b0SSuyog Pawar  * Global context for trace info
62*c83a76b0SSuyog Pawar  */
63*c83a76b0SSuyog Pawar extern trace_t g_trace;
64*c83a76b0SSuyog Pawar 
65*c83a76b0SSuyog Pawar /**
66*c83a76b0SSuyog Pawar  * Call ihevcd_bits_get() to read from bitstream and dumps the data to trace file
67*c83a76b0SSuyog Pawar  */
68*c83a76b0SSuyog Pawar #define BITS_PARSE(m_str, m_value, m_ps_bitstrm, m_numbits)                 \
69*c83a76b0SSuyog Pawar {                                                                           \
70*c83a76b0SSuyog Pawar     m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);                     \
71*c83a76b0SSuyog Pawar     fprintf( g_trace.fp, "%-40s u(%d) : %d\n", m_str, m_numbits, m_value ); \
72*c83a76b0SSuyog Pawar     fflush ( g_trace.fp);                                                   \
73*c83a76b0SSuyog Pawar }
74*c83a76b0SSuyog Pawar 
75*c83a76b0SSuyog Pawar /**
76*c83a76b0SSuyog Pawar  * Call ihevcd_uev() to read from bitstream and dumps the data to trace file
77*c83a76b0SSuyog Pawar  */
78*c83a76b0SSuyog Pawar 
79*c83a76b0SSuyog Pawar #define UEV_PARSE(m_str, m_value, m_ps_bitstrm)                             \
80*c83a76b0SSuyog Pawar {                                                                           \
81*c83a76b0SSuyog Pawar     m_value = ihevcd_uev(m_ps_bitstrm);                                     \
82*c83a76b0SSuyog Pawar     fprintf( g_trace.fp, "%-40s ue(v) : %d\n", m_str, m_value );            \
83*c83a76b0SSuyog Pawar     fflush ( g_trace.fp);                                                   \
84*c83a76b0SSuyog Pawar }
85*c83a76b0SSuyog Pawar /**
86*c83a76b0SSuyog Pawar  * Call ihevcd_sev() to read from bitstream and dumps the data to trace file
87*c83a76b0SSuyog Pawar  */
88*c83a76b0SSuyog Pawar #define SEV_PARSE(m_str, m_value, m_ps_bitstrm)                             \
89*c83a76b0SSuyog Pawar {                                                                           \
90*c83a76b0SSuyog Pawar     m_value = ihevcd_sev(m_ps_bitstrm);                                     \
91*c83a76b0SSuyog Pawar     fprintf( g_trace.fp, "%-40s se(v) : %d\n", m_str, m_value );            \
92*c83a76b0SSuyog Pawar     fflush ( g_trace.fp);                                                   \
93*c83a76b0SSuyog Pawar }
94*c83a76b0SSuyog Pawar 
95*c83a76b0SSuyog Pawar 
96*c83a76b0SSuyog Pawar #if FULLRANGE
97*c83a76b0SSuyog Pawar #define TRACE_CABAC_CTXT(m_string, m_range, m_ctxt_idx)                  \
98*c83a76b0SSuyog Pawar {                                                                        \
99*c83a76b0SSuyog Pawar     UWORD32 m_clz, m_range_shift, m_state_mps;                           \
100*c83a76b0SSuyog Pawar     m_state_mps = ps_cabac->au1_ctxt_models[m_ctxt_idx];                  \
101*c83a76b0SSuyog Pawar     m_clz = CLZ(m_range);                                                \
102*c83a76b0SSuyog Pawar     m_clz -= (32 - RANGE_NUMBITS);                                       \
103*c83a76b0SSuyog Pawar     m_range_shift = m_range << m_clz;                                    \
104*c83a76b0SSuyog Pawar     m_range_shift = m_range_shift >> RANGE_SHIFT;                        \
105*c83a76b0SSuyog Pawar     fprintf( g_trace.fp, "%-40s: Range:%3d State:%3d MPS:%1d\n",         \
106*c83a76b0SSuyog Pawar         m_string, m_range_shift, m_state_mps >> 1, m_state_mps & 1);     \
107*c83a76b0SSuyog Pawar     fflush ( g_trace.fp);                                                \
108*c83a76b0SSuyog Pawar }
109*c83a76b0SSuyog Pawar #define AEV_TRACE(m_str, m_value, m_range)                                  \
110*c83a76b0SSuyog Pawar {                                                                           \
111*c83a76b0SSuyog Pawar     UWORD32 m_clz, m_range_shift;                                           \
112*c83a76b0SSuyog Pawar     m_clz = CLZ(m_range);                                                   \
113*c83a76b0SSuyog Pawar     m_clz -= (32 - RANGE_NUMBITS);                                       \
114*c83a76b0SSuyog Pawar     m_range_shift = m_range << m_clz;                                       \
115*c83a76b0SSuyog Pawar     m_range_shift = m_range_shift >> RANGE_SHIFT;                           \
116*c83a76b0SSuyog Pawar     fprintf( g_trace.fp, "%-40s:%8d R:%d\n", m_str, m_value, m_range_shift);\
117*c83a76b0SSuyog Pawar     fflush ( g_trace.fp);                                                   \
118*c83a76b0SSuyog Pawar }
119*c83a76b0SSuyog Pawar #else
120*c83a76b0SSuyog Pawar #define TRACE_CABAC_CTXT(m_string, m_range, m_ctxt_idx)                  \
121*c83a76b0SSuyog Pawar {                                                                        \
122*c83a76b0SSuyog Pawar     UWORD32 m_state_mps;                                                 \
123*c83a76b0SSuyog Pawar     m_state_mps = ps_cabac->au1_ctxt_models[m_ctxt_idx];                 \
124*c83a76b0SSuyog Pawar     fprintf( g_trace.fp, "%-40s: Range:%3d State:%3d MPS:%1d\n",         \
125*c83a76b0SSuyog Pawar         m_string, m_range, m_state_mps >> 1, m_state_mps & 1);           \
126*c83a76b0SSuyog Pawar     fflush ( g_trace.fp);                                                \
127*c83a76b0SSuyog Pawar }
128*c83a76b0SSuyog Pawar 
129*c83a76b0SSuyog Pawar #define AEV_TRACE(m_str, m_value, m_range)                              \
130*c83a76b0SSuyog Pawar {                                                                       \
131*c83a76b0SSuyog Pawar     fprintf( g_trace.fp, "%-40s:%8d R:%d\n", m_str, m_value, m_range);  \
132*c83a76b0SSuyog Pawar     fflush ( g_trace.fp);                                               \
133*c83a76b0SSuyog Pawar }
134*c83a76b0SSuyog Pawar #endif
135*c83a76b0SSuyog Pawar 
136*c83a76b0SSuyog Pawar #define TUV_PARSE(m_str, m_value, m_ps_bitstrm)                      \
137*c83a76b0SSuyog Pawar     m_value = ihevcd_bits_get(m_ps_bitstrm, 1);
138*c83a76b0SSuyog Pawar 
139*c83a76b0SSuyog Pawar #define TRACE_INIT(a)   ihevcd_trace_init(a)
140*c83a76b0SSuyog Pawar #define TRACE_DEINIT(a) ihevcd_trace_deinit(a)
141*c83a76b0SSuyog Pawar 
142*c83a76b0SSuyog Pawar #else /* TRACE */
143*c83a76b0SSuyog Pawar /**
144*c83a76b0SSuyog Pawar  * Call ihevcd_bits_get() to read from bitstream
145*c83a76b0SSuyog Pawar  */
146*c83a76b0SSuyog Pawar 
147*c83a76b0SSuyog Pawar #define BITS_PARSE(m_str, m_value, m_ps_bitstrm, m_numbits)           \
148*c83a76b0SSuyog Pawar     m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
149*c83a76b0SSuyog Pawar 
150*c83a76b0SSuyog Pawar /**
151*c83a76b0SSuyog Pawar  * Call ihevcd_uev() to read from bitstream
152*c83a76b0SSuyog Pawar  */
153*c83a76b0SSuyog Pawar 
154*c83a76b0SSuyog Pawar #define UEV_PARSE(m_str, m_value, m_ps_bitstrm)                       \
155*c83a76b0SSuyog Pawar     m_value = ihevcd_uev(m_ps_bitstrm);
156*c83a76b0SSuyog Pawar 
157*c83a76b0SSuyog Pawar /**
158*c83a76b0SSuyog Pawar  * Call ihevcd_sev() to read from bitstream
159*c83a76b0SSuyog Pawar  */
160*c83a76b0SSuyog Pawar 
161*c83a76b0SSuyog Pawar #define SEV_PARSE(m_str, m_value, m_ps_bitstrm)                       \
162*c83a76b0SSuyog Pawar     m_value = ihevcd_sev(m_ps_bitstrm);
163*c83a76b0SSuyog Pawar 
164*c83a76b0SSuyog Pawar #define TUV_PARSE(m_str, m_value, m_ps_bitstrm)                      \
165*c83a76b0SSuyog Pawar     m_value = ihevcd_bits_get(m_ps_bitstrm, 1);
166*c83a76b0SSuyog Pawar 
167*c83a76b0SSuyog Pawar #define TRACE_CABAC_CTXT(m_string, m_range, m_state_mps)
168*c83a76b0SSuyog Pawar 
169*c83a76b0SSuyog Pawar #define AEV_TRACE(m_str, m_value, m_range)
170*c83a76b0SSuyog Pawar 
171*c83a76b0SSuyog Pawar 
172*c83a76b0SSuyog Pawar #define TRACE_INIT(a)
173*c83a76b0SSuyog Pawar #define TRACE_DEINIT(a)
174*c83a76b0SSuyog Pawar #endif /* TRACE */
175*c83a76b0SSuyog Pawar #endif /* _IHEVCD_TRACE_H_ */
176