1 /******************************************************************************
2 *
3 * Copyright (C) 2012 Ittiam Systems Pvt Ltd, Bangalore
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 /**
19 *******************************************************************************
20 * @file
21 *  ihevcd_trace.h
22 *
23 * @brief
24 *  Header for codec trace messages
25 *
26 * @author
27 *  Ittiam
28 *
29 * @remarks
30 *  None
31 *
32 *******************************************************************************
33 */
34 #ifndef _IHEVCD_TRACE_H_
35 #define _IHEVCD_TRACE_H_
36 
37 #define FULLRANGE 1
38 
39 
40 #define RANGE_NUMBITS 31
41 #define RANGE_SHIFT  (RANGE_NUMBITS - 9)
42 
43 #ifdef TRACE
44 /**
45  * Context for trace
46  */
47 typedef struct
48 {
49     /**
50      * fp
51      */
52     FILE    *fp;
53 
54     /**
55      * u8_cnt
56      */
57     ULWORD64  u8_cnt;
58 }trace_t;
59 
60 /**
61  * Global context for trace info
62  */
63 extern trace_t g_trace;
64 
65 /**
66  * Call ihevcd_bits_get() to read from bitstream and dumps the data to trace file
67  */
68 #define BITS_PARSE(m_str, m_value, m_ps_bitstrm, m_numbits)                 \
69 {                                                                           \
70     m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);                     \
71     fprintf( g_trace.fp, "%-40s u(%d) : %d\n", m_str, m_numbits, m_value ); \
72     fflush ( g_trace.fp);                                                   \
73 }
74 
75 /**
76  * Call ihevcd_uev() to read from bitstream and dumps the data to trace file
77  */
78 
79 #define UEV_PARSE(m_str, m_value, m_ps_bitstrm)                             \
80 {                                                                           \
81     m_value = ihevcd_uev(m_ps_bitstrm);                                     \
82     fprintf( g_trace.fp, "%-40s ue(v) : %d\n", m_str, m_value );            \
83     fflush ( g_trace.fp);                                                   \
84 }
85 /**
86  * Call ihevcd_sev() to read from bitstream and dumps the data to trace file
87  */
88 #define SEV_PARSE(m_str, m_value, m_ps_bitstrm)                             \
89 {                                                                           \
90     m_value = ihevcd_sev(m_ps_bitstrm);                                     \
91     fprintf( g_trace.fp, "%-40s se(v) : %d\n", m_str, m_value );            \
92     fflush ( g_trace.fp);                                                   \
93 }
94 
95 
96 #if FULLRANGE
97 #define TRACE_CABAC_CTXT(m_string, m_range, m_ctxt_idx)                  \
98 {                                                                        \
99     UWORD32 m_clz, m_range_shift, m_state_mps;                           \
100     m_state_mps = ps_cabac->au1_ctxt_models[m_ctxt_idx];                  \
101     m_clz = CLZ(m_range);                                                \
102     m_clz -= (32 - RANGE_NUMBITS);                                       \
103     m_range_shift = m_range << m_clz;                                    \
104     m_range_shift = m_range_shift >> RANGE_SHIFT;                        \
105     fprintf( g_trace.fp, "%-40s: Range:%3d State:%3d MPS:%1d\n",         \
106         m_string, m_range_shift, m_state_mps >> 1, m_state_mps & 1);     \
107     fflush ( g_trace.fp);                                                \
108 }
109 #define AEV_TRACE(m_str, m_value, m_range)                                  \
110 {                                                                           \
111     UWORD32 m_clz, m_range_shift;                                           \
112     m_clz = CLZ(m_range);                                                   \
113     m_clz -= (32 - RANGE_NUMBITS);                                       \
114     m_range_shift = m_range << m_clz;                                       \
115     m_range_shift = m_range_shift >> RANGE_SHIFT;                           \
116     fprintf( g_trace.fp, "%-40s:%8d R:%d\n", m_str, m_value, m_range_shift);\
117     fflush ( g_trace.fp);                                                   \
118 }
119 #else
120 #define TRACE_CABAC_CTXT(m_string, m_range, m_ctxt_idx)                  \
121 {                                                                        \
122     UWORD32 m_state_mps;                                                 \
123     m_state_mps = ps_cabac->au1_ctxt_models[m_ctxt_idx];                 \
124     fprintf( g_trace.fp, "%-40s: Range:%3d State:%3d MPS:%1d\n",         \
125         m_string, m_range, m_state_mps >> 1, m_state_mps & 1);           \
126     fflush ( g_trace.fp);                                                \
127 }
128 
129 #define AEV_TRACE(m_str, m_value, m_range)                              \
130 {                                                                       \
131     fprintf( g_trace.fp, "%-40s:%8d R:%d\n", m_str, m_value, m_range);  \
132     fflush ( g_trace.fp);                                               \
133 }
134 #endif
135 
136 #define TUV_PARSE(m_str, m_value, m_ps_bitstrm)                      \
137     m_value = ihevcd_bits_get(m_ps_bitstrm, 1);
138 
139 #define TRACE_INIT(a)   ihevcd_trace_init(a)
140 #define TRACE_DEINIT(a) ihevcd_trace_deinit(a)
141 
142 #else /* TRACE */
143 /**
144  * Call ihevcd_bits_get() to read from bitstream
145  */
146 
147 #define BITS_PARSE(m_str, m_value, m_ps_bitstrm, m_numbits)           \
148     m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
149 
150 /**
151  * Call ihevcd_uev() to read from bitstream
152  */
153 
154 #define UEV_PARSE(m_str, m_value, m_ps_bitstrm)                       \
155     m_value = ihevcd_uev(m_ps_bitstrm);
156 
157 /**
158  * Call ihevcd_sev() to read from bitstream
159  */
160 
161 #define SEV_PARSE(m_str, m_value, m_ps_bitstrm)                       \
162     m_value = ihevcd_sev(m_ps_bitstrm);
163 
164 #define TUV_PARSE(m_str, m_value, m_ps_bitstrm)                      \
165     m_value = ihevcd_bits_get(m_ps_bitstrm, 1);
166 
167 #define TRACE_CABAC_CTXT(m_string, m_range, m_state_mps)
168 
169 #define AEV_TRACE(m_str, m_value, m_range)
170 
171 
172 #define TRACE_INIT(a)
173 #define TRACE_DEINIT(a)
174 #endif /* TRACE */
175 #endif /* _IHEVCD_TRACE_H_ */
176