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