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 */
47typedef 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 */
63extern 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