MAX_CARLINK_A270S/MXC_A27-PCB4.5-270T/lib/hx170dec/include/rv_utils.h

160 lines
4.5 KiB
C

/*------------------------------------------------------------------------------
-- --
-- This software is confidential and proprietary and may be used --
-- only as expressly authorized by a licensing agreement from --
-- --
-- Hantro Products Oy. --
-- --
-- (C) COPYRIGHT 2006 HANTRO PRODUCTS OY --
-- ALL RIGHTS RESERVED --
-- --
-- The entire notice above must be reproduced --
-- on all copies and should not be removed. --
-- --
--------------------------------------------------------------------------------
--
-- Abstract : Header file for stream decoding utilities
--
--------------------------------------------------------------------------------
--
-- Version control information, please leave untouched.
--
-- $RCSfile: rv_utils.h,v $
-- $Date: 2009/03/11 14:00:12 $
-- $Revision: 1.1 $
--
------------------------------------------------------------------------------*/
#ifndef RV_UTILS_H
#define RV_UTILS_H
/*------------------------------------------------------------------------------
1. Include headers
------------------------------------------------------------------------------*/
#include "rv_container.h"
#ifdef _ASSERT_USED
#include <assert.h>
#endif
#ifdef _UTEST
#include <stdio.h>
#endif
/*------------------------------------------------------------------------------
2. Module defines
------------------------------------------------------------------------------*/
/* constant definitions */
#ifndef OK
#define OK 0
#endif
#ifndef NOK
#define NOK 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
#ifndef NULL
#define NULL 0
#endif
/* decoder states */
enum
{
STATE_OK,
STATE_NOT_READY,
STATE_SYNC_LOST
};
#define HANTRO_OK 0
#define HANTRO_NOK 1
#ifndef NULL
#define NULL 0
#endif
/* Error concealment */
#define FREEZED_PIC_RDY 1
enum
{
RV_I_PIC = 0,
RV_FI_PIC = 1,
RV_P_PIC = 2,
RV_B_PIC = 3
};
enum
{
RV_SLICE
};
/* value to be returned by GetBits if stream buffer is empty */
#define END_OF_STREAM 0xFFFFFFFFU
/* macro for debug printing. Note that double parenthesis has to be used, i.e.
* DEBUG(("Debug printing %d\n",%d)) */
#ifdef _UTEST
#define DEBUG(args) printf args
#else
#define DEBUG(args)
#endif
/* macro for assertion, used only if compiler flag _ASSERT_USED is defined */
#ifdef _ASSERT_USED
#define ASSERT(expr) assert(expr)
#else
#define ASSERT(expr)
#endif
/* macro to check if stream ends */
#define IS_END_OF_STREAM(pContainer) \
( (pContainer)->StrmDesc.strmBuffReadBits == \
(8*(pContainer)->StrmDesc.strmBuffSize) )
/* macro to saturate value to range [min,max]. Note that for unsigned value
* both min and max should be positive, otherwise result will be wrong due to
* arithmetic conversion. If min > max -> value will be equal to min. */
#define SATURATE(min,value,max) \
if ((value) < (min)) (value) = (min); \
else if ((value) > (max)) (value) = (max);
#define ABS(val) (((val) < 0) ? -(val) : (val))
/*------------------------------------------------------------------------------
3. Data types
------------------------------------------------------------------------------*/
typedef struct
{
u8 *pStrmBuffStart; /* pointer to start of stream buffer */
u8 *pStrmCurrPos; /* current read address in stream buffer */
u32 bitPosInWord; /* bit position in stream buffer byte */
u32 strmBuffSize; /* size of stream buffer (bytes) */
u32 strmBuffReadBits; /* number of bits read from stream buffer */
} strmData_t;
/*------------------------------------------------------------------------------
4. Function prototypes
------------------------------------------------------------------------------*/
u32 rv_GetBits(DecContainer *, u32 numBits);
u32 rv_ShowBits(DecContainer *, u32 numBits);
u32 rv_ShowBits32(DecContainer *);
u32 rv_FlushBits(DecContainer *, u32 numBits);
u32 rv_CheckStuffing(DecContainer *);
u32 rv_NumBits(u32 value);
#endif /* RV_UTILS_H */