/******************************************************************************
*
* Copyright (C) 2012 Ittiam Systems Pvt Ltd, Bangalore
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
******************************************************************************/
/**
*******************************************************************************
* @file
* ihevcd_trace.h
*
* @brief
* Header for codec trace messages
*
* @author
* Ittiam
*
* @remarks
* None
*
*******************************************************************************
*/
#ifndef _IHEVCD_TRACE_H_
#define _IHEVCD_TRACE_H_
#define FULLRANGE 1
#define RANGE_NUMBITS 31
#define RANGE_SHIFT (RANGE_NUMBITS - 9)
#ifdef TRACE
/**
* Context for trace
*/
typedef struct
{
/**
* fp
*/
FILE *fp;
/**
* u8_cnt
*/
ULWORD64 u8_cnt;
}trace_t;
/**
* Global context for trace info
*/
extern trace_t g_trace;
/**
* Call ihevcd_bits_get() to read from bitstream and dumps the data to trace file
*/
#define BITS_PARSE(m_str, m_value, m_ps_bitstrm, m_numbits) \
{ \
m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits); \
fprintf( g_trace.fp, "%-40s u(%d) : %d\n", m_str, m_numbits, m_value ); \
fflush ( g_trace.fp); \
}
/**
* Call ihevcd_uev() to read from bitstream and dumps the data to trace file
*/
#define UEV_PARSE(m_str, m_value, m_ps_bitstrm) \
{ \
m_value = ihevcd_uev(m_ps_bitstrm); \
fprintf( g_trace.fp, "%-40s ue(v) : %d\n", m_str, m_value ); \
fflush ( g_trace.fp); \
}
/**
* Call ihevcd_sev() to read from bitstream and dumps the data to trace file
*/
#define SEV_PARSE(m_str, m_value, m_ps_bitstrm) \
{ \
m_value = ihevcd_sev(m_ps_bitstrm); \
fprintf( g_trace.fp, "%-40s se(v) : %d\n", m_str, m_value ); \
fflush ( g_trace.fp); \
}
#if FULLRANGE
#define TRACE_CABAC_CTXT(m_string, m_range, m_ctxt_idx) \
{ \
UWORD32 m_clz, m_range_shift, m_state_mps; \
m_state_mps = ps_cabac->au1_ctxt_models[m_ctxt_idx]; \
m_clz = CLZ(m_range); \
m_clz -= (32 - RANGE_NUMBITS); \
m_range_shift = m_range << m_clz; \
m_range_shift = m_range_shift >> RANGE_SHIFT; \
fprintf( g_trace.fp, "%-40s: Range:%3d State:%3d MPS:%1d\n", \
m_string, m_range_shift, m_state_mps >> 1, m_state_mps & 1); \
fflush ( g_trace.fp); \
}
#define AEV_TRACE(m_str, m_value, m_range) \
{ \
UWORD32 m_clz, m_range_shift; \
m_clz = CLZ(m_range); \
m_clz -= (32 - RANGE_NUMBITS); \
m_range_shift = m_range << m_clz; \
m_range_shift = m_range_shift >> RANGE_SHIFT; \
fprintf( g_trace.fp, "%-40s:%8d R:%d\n", m_str, m_value, m_range_shift);\
fflush ( g_trace.fp); \
}
#else
#define TRACE_CABAC_CTXT(m_string, m_range, m_ctxt_idx) \
{ \
UWORD32 m_state_mps; \
m_state_mps = ps_cabac->au1_ctxt_models[m_ctxt_idx]; \
fprintf( g_trace.fp, "%-40s: Range:%3d State:%3d MPS:%1d\n", \
m_string, m_range, m_state_mps >> 1, m_state_mps & 1); \
fflush ( g_trace.fp); \
}
#define AEV_TRACE(m_str, m_value, m_range) \
{ \
fprintf( g_trace.fp, "%-40s:%8d R:%d\n", m_str, m_value, m_range); \
fflush ( g_trace.fp); \
}
#endif
#define TUV_PARSE(m_str, m_value, m_ps_bitstrm) \
m_value = ihevcd_bits_get(m_ps_bitstrm, 1);
#define TRACE_INIT(a) ihevcd_trace_init(a)
#define TRACE_DEINIT(a) ihevcd_trace_deinit(a)
#else /* TRACE */
/**
* Call ihevcd_bits_get() to read from bitstream
*/
#define BITS_PARSE(m_str, m_value, m_ps_bitstrm, m_numbits) \
m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
/**
* Call ihevcd_uev() to read from bitstream
*/
#define UEV_PARSE(m_str, m_value, m_ps_bitstrm) \
m_value = ihevcd_uev(m_ps_bitstrm);
/**
* Call ihevcd_sev() to read from bitstream
*/
#define SEV_PARSE(m_str, m_value, m_ps_bitstrm) \
m_value = ihevcd_sev(m_ps_bitstrm);
#define TUV_PARSE(m_str, m_value, m_ps_bitstrm) \
m_value = ihevcd_bits_get(m_ps_bitstrm, 1);
#define TRACE_CABAC_CTXT(m_string, m_range, m_state_mps)
#define AEV_TRACE(m_str, m_value, m_range)
#define TRACE_INIT(a)
#define TRACE_DEINIT(a)
#endif /* TRACE */
#endif /* _IHEVCD_TRACE_H_ */