#ifndef __COG_UTILS_H__ #define __COG_UTILS_H__ #if defined(_MSC_VER) #ifndef COG_NO_STDINT_TYPEDEFS typedef __int8 int8_t; typedef __int16 int16_t; typedef __int32 int32_t; typedef unsigned __int8 uint8_t; typedef unsigned __int16 uint16_t; typedef unsigned __int32 uint32_t; #endif #else #include "_stdint.h" #endif #ifndef TRUE #define TRUE 1 #endif #ifndef FALSE #define FALSE 0 #endif typedef void CogMemoryDomain; typedef unsigned int cog_bool; #ifdef COG_ENABLE_UNSTABLE_API #define COG_PICTURE_NUMBER_INVALID (-1) #define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0])) #define DIVIDE_ROUND_UP(a,b) (((a) + (b) - 1)/(b)) #ifndef MIN #define MIN(a,b) ((a)<(b) ? (a) : (b)) #endif #ifndef MAX #define MAX(a,b) ((a)>(b) ? (a) : (b)) #endif #ifndef CLAMP #define CLAMP(x,a,b) ((x)<(a) ? (a) : ((x)>(b) ? (b) : (x))) #endif #define NEED_CLAMP(x,y,a,b) ((x) < (a) || (y) > (b)) #define ROUND_UP_SHIFT(x,y) (((x) + (1<<(y)) - 1)>>(y)) #define ROUND_UP_POW2(x,y) (((x) + (1<<(y)) - 1)&((~0)<<(y))) #define ROUND_UP_2(x) ROUND_UP_POW2(x,1) #define ROUND_UP_4(x) ROUND_UP_POW2(x,2) #define ROUND_UP_8(x) ROUND_UP_POW2(x,3) #define ROUND_UP_64(x) ROUND_UP_POW2(x,6) #define OFFSET(ptr,offset) ((void *)(((uint8_t *)(ptr)) + (offset))) #define ROUND_SHIFT(x,y) (((x) + (1<<((y)-1)))>>(y)) #define cog_divide(a,b) (((a)<0)?(((a) - (b) + 1)/(b)):((a)/(b))) #endif #define COG_OFFSET(ptr,offset) ((void *)(((uint8_t *)(ptr)) + (offset))) #define COG_GET(ptr, offset, type) (*(type *)((uint8_t *)(ptr) + (offset)) ) #if defined(__GNUC__) && defined(__GNUC_MINOR__) #define COG_GNUC_PREREQ(maj, min) \ ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) #else #define COG_GNUC_PREREQ(maj, min) 0 #endif #if COG_GNUC_PREREQ(3,3) && defined(__ELF__) #define COG_INTERNAL __attribute__ ((visibility ("internal"))) #else #define COG_INTERNAL #endif #ifdef __cplusplus #define COG_BEGIN_DECLS extern "C" { #define COG_END_DECLS } #else #define COG_BEGIN_DECLS #define COG_END_DECLS #endif COG_BEGIN_DECLS void * cog_malloc (int size); void * cog_malloc0 (int size); void * cog_realloc (void *ptr, int size); void cog_free (void *ptr); int cog_utils_multiplier_to_quant_index (double x); int cog_dequantise (int q, int quant_factor, int quant_offset); int cog_quantise (int value, int quant_factor, int quant_offset); void cog_quantise_s16 (int16_t *dest, int16_t *src, int quant_factor, int quant_offset, int n); void cog_quantise_s16_table (int16_t *dest, int16_t *src, int quant_index, cog_bool is_intra, int n); void cog_dequantise_s16 (int16_t *dest, int16_t *src, int quant_factor, int quant_offset, int n); void cog_dequantise_s16_table (int16_t *dest, int16_t *src, int quant_index, cog_bool is_intra, int n); double cog_utils_probability_to_entropy (double x); double cog_utils_entropy (double a, double total); void cog_utils_reduce_fraction (int *n, int *d); double cog_utils_get_time (void); COG_END_DECLS #endif