shithub: openh264

Download patch

ref: 77fd9aa4f0d9eabdf5073911cbbca2449b7522b9
parent: 8a1922837d303594164f77b94a11753013504196
author: Licai Guo <guolicai@gmail.com>
date: Thu Jan 9 10:41:24 EST 2014

merge macros.h to common/macros.h

--- a/codec/common/macros.h
+++ b/codec/common/macros.h
@@ -44,9 +44,6 @@
 #include <assert.h>
 #include "typedefs.h"
 
-
-namespace WelsDec {
-
 /*
 * FORCE_STACK_ALIGN_1D: force 1 dimension local data aligned in stack
 * _tp: type
@@ -70,8 +67,45 @@
 
 ///////////// from encoder
 #if defined(_MSC_VER)
+
+#if(_MSC_VER < 1700)
 #define inline	__inline
+#endif
+
 #define __FASTCALL   __fastcall
+#define ALIGNED_DECLARE( type, var, n ) __declspec(align(n)) type var
+#define __align8(t,v) __declspec(align(8)) t v
+#define __align16(t,v) __declspec(align(16)) t v
+#elif defined(__GNUC__)
+#if !defined(MAC_POWERPC)
+#define __FASTCALL    __attribute__ ((fastcall))
+#else
+#define __FASTCALL	// mean NULL for mac ppc
+#endif//MAC_POWERPC
+#define ALIGNED_DECLARE( type, var, n ) type var __attribute__((aligned(n)))
+#define __align8(t,v) t v __attribute__ ((aligned (8)))
+#define __align16(t,v) t v __attribute__ ((aligned (16)))
+#endif//_MSC_VER
+
+#if defined(_MACH_PLATFORM) || defined(__GNUC__)
+#define ALIGNED_DECLARE_MATRIX_2D(name,sizex,sizey,type,alignment) \
+	type name[(sizex)*(sizey)] __attribute__((aligned(alignment)))
+#else //_MSC_VER <= 1200
+#define ALIGNED_DECLARE_MATRIX_2D(name,sizex,sizey,type,alignment) \
+__declspec(align(alignment)) type name[(sizex)*(sizey)]
+#endif//#if _MACH_PLATFORM
+
+#if defined(_MACH_PLATFORM) || defined(__GNUC__)
+#define ALIGNED_DECLARE_MATRIX_1D(name,size,type,alignment) \
+	type name[size] __attribute__((aligned(alignment)))
+#else //_MSC_VER <= 1200
+#define ALIGNED_DECLARE_MATRIX_1D(name,size,type,alignment) \
+	__declspec(align(alignment)) type name[(size)]
+#endif//#if _MACH_PLATFORM
+
+#if defined(_MSC_VER)
+#define inline	__inline
+#define __FASTCALL   __fastcall
 //	#define __align8(t,v) __declspec(align(8)) t v
 #define __align16(t,v) __declspec(align(16)) t v
 #elif defined(__GNUC__)
@@ -297,7 +331,73 @@
 		} \
 	}while( 0 );
 #endif//#if WELS_SAFE_FREE_ARR
+static inline int32_t WELS_LOG2 (uint32_t v) {
+int32_t r = 0;
+while (v >>= 1) {
+  ++r;
+}
+return r;
 
-} // namespace WelsDec
+}
+
+#define CLIP3_QP_0_51(q)		WELS_CLIP3(q, 0, 51)	// ((q) < (0) ? (0) : ((q) > (51) ? (51) : (q)))
+#define   CALC_BI_STRIDE(width,bitcount)  ((((width * bitcount) + 31) & ~31) >> 3)
+#ifdef    WORDS_BIGENDIAN
+
+static inline uint32_t ENDIAN_FIX (uint32_t x) {
+return x;
+}
+
+#else
+
+
+#if defined(_MSC_VER) && defined(_M_IX86)
+static inline uint32_t ENDIAN_FIX (uint32_t x) {
+__asm {
+  mov   eax,  x
+  bswap   eax
+  mov   x,    eax
+}
+return x;
+}
+#else  // GCC
+static inline uint32_t ENDIAN_FIX (uint32_t x) {
+#ifdef X86_ARCH
+__asm__ __volatile__ ("bswap %0":"+r" (x));
+#else
+x = ((x & 0xff000000) >> 24) | ((x & 0xff0000) >> 8) |
+    ((x & 0xff00) << 8) | ((x & 0xff) << 24);
+#endif
+return x;
+}
+
+
+#endif
+
+#endif
+#ifndef BUTTERFLY1x2
+#define BUTTERFLY1x2(b) (((b)<<8) | (b))
+#endif//BUTTERFLY1x2
+
+#ifndef BUTTERFLY2x4
+#define BUTTERFLY2x4(wd) (((uint32_t)(wd)<<16) |(wd))
+#endif//BUTTERFLY2x4
+
+#ifndef BUTTERFLY4x8
+#define BUTTERFLY4x8(dw) (((uint64_t)(dw)<<32) | (dw))
+#endif//BUTTERFLY4x8
+
+static inline int32_t WELS_MEDIAN (int32_t x,  int32_t y, int32_t z) {
+int32_t t = (x - y) & ((x - y) >> 31);
+x -= t;
+y += t;
+y -= (y - z) & ((y - z) >> 31);
+y += (x - y) & ((x - y) >> 31);
+return y;
+}
+static inline BOOL_T WELS_POWER2_IF (uint32_t v) {
+return (v && ! (v & (v - 1)));
+}
+
 
 #endif//WELS_MACRO_UTILIZATIONS_H__
--- a/codec/decoder/core/inc/macros.h
+++ /dev/null
@@ -1,303 +1,0 @@
-/*!
- * \copy
- *     Copyright (c)  2009-2013, Cisco Systems
- *     All rights reserved.
- *
- *     Redistribution and use in source and binary forms, with or without
- *     modification, are permitted provided that the following conditions
- *     are met:
- *
- *        * Redistributions of source code must retain the above copyright
- *          notice, this list of conditions and the following disclaimer.
- *
- *        * Redistributions in binary form must reproduce the above copyright
- *          notice, this list of conditions and the following disclaimer in
- *          the documentation and/or other materials provided with the
- *          distribution.
- *
- *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- *     "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- *     LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- *     FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- *     COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- *     INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- *     BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- *     CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- *     LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- *     ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- *     POSSIBILITY OF SUCH DAMAGE.
- *
- *
- * \file	macros.h
- *
- * \brief	MACRO based tool utilization
- *
- * \date	3/13/2009 Created
- *
- *************************************************************************************
- */
-#ifndef WELS_MACRO_UTILIZATIONS_H__
-#define WELS_MACRO_UTILIZATIONS_H__
-
-#include <math.h>
-#include <assert.h>
-#include "typedefs.h"
-
-
-namespace WelsDec {
-
-/*
-* FORCE_STACK_ALIGN_1D: force 1 dimension local data aligned in stack
-* _tp: type
-* _nm: var name
-* _sz: size
-* _al: align bytes
-* auxiliary var: _nm ## _tEmP
-*/
-#define FORCE_STACK_ALIGN_1D(_tp, _nm, _sz, _al) \
-	_tp _nm ## _tEmP[(_sz)+(_al)-1]; \
-	_tp *_nm = _nm ## _tEmP + ((_al)-1) - (((uintptr_t)(_nm ## _tEmP + ((_al)-1)) & ((_al)-1))/sizeof(_tp))
-
-
-#define ENFORCE_STACK_ALIGN_2D(_tp, _nm, _cx, _cy, _al) \
-	assert( ((_al) && !((_al) & ((_al) - 1))) && ((_al) >= sizeof(_tp)) ); /*_al should be power-of-2 and >= sizeof(_tp)*/\
-	_tp _nm ## _tEmP[(_cx)*(_cy)+(_al)/sizeof(_tp)-1]; \
-	_tp *_nm ## _tEmP_al = _nm ## _tEmP + ((_al)/sizeof(_tp)-1); \
-	_nm ## _tEmP_al -= (((uintptr_t)_nm ## _tEmP_al & ((_al)-1))/sizeof(_tp)); \
-	_tp (*_nm)[(_cy)] = (_tp (*)[(_cy)])_nm ## _tEmP_al;
-
-
-///////////// from encoder
-#if defined(_MSC_VER)
-#define inline	__inline
-#define __FASTCALL   __fastcall
-//	#define __align8(t,v) __declspec(align(8)) t v
-#define __align16(t,v) __declspec(align(16)) t v
-#elif defined(__GNUC__)
-#if !defined(MAC_POWERPC) && !defined(UNIX) && !defined(ANDROID_NDK) && !defined(APPLE_IOS)
-#define __FASTCALL    __attribute__ ((fastcall))// linux, centos, mac_x86 can be used
-#else
-#define __FASTCALL	// mean NULL for mac_ppc, solaris(sparc/x86)
-#endif//MAC_POWERPC
-//	#define __align8(t,v) t v __attribute__ ((aligned (8)))
-#define __align16(t,v) t v __attribute__ ((aligned (16)))
-
-#if defined(APPLE_IOS)
-#define inline  //For iOS platform
-#endif
-
-#endif//_MSC_VER
-
-
-#if !defined(SIZEOFRGB24)
-#define SIZEOFRGB24(cx, cy)	(3 * (cx) * (cy))
-#endif//SIZEOFRGB24
-
-#if !defined(SIZEOFRGB32)
-#define SIZEOFRGB32(cx, cy)	(4 * (cx) * (cy))
-#endif//SIZEOFRGB32
-#if 1
-#ifndef	WELS_ALIGN
-#define WELS_ALIGN(x, n)	(((x)+(n)-1)&~((n)-1))
-#endif//WELS_ALIGN
-
-#ifndef WELS_MAX
-#define WELS_MAX(x, y)	((x) > (y) ? (x) : (y))
-#endif//WELS_MAX
-
-#ifndef WELS_MIN
-#define WELS_MIN(x, y)	((x) < (y) ? (x) : (y))
-#endif//WELS_MIN
-#else
-
-#ifndef	WELS_ALIGN
-#define WELS_ALIGN(x, n)	(((x)+(n)-1)&~((n)-1))
-#endif//WELS_ALIGN
-
-#ifndef WELS_MAX
-#define WELS_MAX(x, y)	((x) - (((x)-(y))&(((x)-(y))>>31)))
-#endif//WELS_MAX
-
-#ifndef WELS_MIN
-#define WELS_MIN(x, y)	((y) + (((x)-(y))&(((x)-(y))>>31)))
-#endif//WELS_MIN
-
-#endif
-
-#ifndef WELS_CEIL
-#define WELS_CEIL(x)	ceil(x)	// FIXME: low complexity instead of math library used
-#endif//WELS_CEIL
-
-#ifndef WELS_FLOOR
-#define WELS_FLOOR(x)	floor(x)	// FIXME: low complexity instead of math library used
-#endif//WELS_FLOOR
-
-#ifndef WELS_ROUND
-#define WELS_ROUND(x)	((int32_t)(0.5f+(x)))
-#endif//WELS_ROUND
-
-#define WELS_NON_ZERO_COUNT_AVERAGE(nC,nA,nB) {		\
-    nC = nA + nB + 1;                      \
-	nC >>= (uint8_t)( nA != -1 && nB != -1);        \
-	nC += (uint8_t)(nA == -1 && nB == -1);           \
-}
-
-static __inline int32_t CeilLog2 (int32_t i) {
-int32_t s = 0;
-i--;
-while (i > 0) {
-  s++;
-  i >>= 1;
-}
-return s;
-}
-/*
-the second path will degrades the performance
-*/
-#if 1
-static inline int32_t WelsMedian (int32_t iX,  int32_t iY, int32_t iZ) {
-int32_t iMin = iX, iMax = iX;
-
-if (iY < iMin)
-  iMin	= iY;
-else
-  iMax = iY;
-
-if (iZ < iMin)
-  iMin	= iZ;
-else if (iZ > iMax)
-  iMax	= iZ;
-
-return (iX + iY + iZ) - (iMin + iMax);
-}
-#else
-static inline int32_t WelsMedian (int32_t iX,  int32_t iY, int32_t iZ) {
-int32_t iTmp = (iX - iY) & ((iX - iY) >> 31);
-iX -= iTmp;
-iY += iTmp;
-iY -= (iY - iZ) & ((iY - iZ) >> 31);
-iY += (iX - iY) & ((iX - iY) >> 31);
-return iY;
-}
-
-#endif
-
-#ifndef NEG_NUM
-//#define NEG_NUM( num ) (-num)
-#define NEG_NUM(iX) (1+(~(iX)))
-#endif// NEG_NUM
-
-#ifndef WELS_CLIP1
-//#define WELS_CLIP1(x) (x & ~255) ? (-x >> 31) : x
-#define WELS_CLIP1(iX) (((iX) & ~255) ? (-(iX) >> 31) : (iX)) //iX not only a value but also can be an expression
-#endif//WELS_CLIP1
-
-
-#ifndef WELS_SIGN
-#define WELS_SIGN(iX) ((int32_t)(iX) >> 31)
-#endif //WELS_SIGN
-#ifndef WELS_ABS
-#define WELS_ABS(iX) ((WELS_SIGN(iX) ^ (int32_t)(iX)) - WELS_SIGN(iX))
-#endif //WELS_ABS
-
-// WELS_CLIP3
-#ifndef WELS_CLIP3
-#define WELS_CLIP3(iX, iY, iZ) ((iX) < (iY) ? (iY) : ((iX) > (iZ) ? (iZ) : (iX)))
-#endif //WELS_CLIP3
-
-/*
- * Description: to check variable validation and return the specified result
- *	iResult:	value to be return
- *	bCaseIf:	negative condition to be verified
- */
-#ifndef WELS_VERIFY_RETURN_IF
-#define WELS_VERIFY_RETURN_IF(iResult, bCaseIf) \
-	if ( bCaseIf ){ \
-		return iResult; \
-	}
-#endif//#if WELS_VERIFY_RETURN_IF
-
-/*
- *	Description: to check variable validation and return the specified result
- *		with correspoinding process advance.
- *	 result:	value to be return
- *	 case_if:	negative condition to be verified
- *	 proc:		process need perform
- */
-#ifndef WELS_VERIFY_RETURN_PROC_IF
-#define WELS_VERIFY_RETURN_PROC_IF(iResult, bCaseIf, fProc) \
-	if ( bCaseIf ){ \
-		fProc;	\
-		return iResult;	\
-	}
-#endif//#if WELS_VERIFY_RETURN_PROC_IF
-
-/*
- * Description:	to check variable validation and return
- *	case_if:	negtive condition to be verified
- *	return:		NONE
- */
-#ifndef WELS_VERIFY_IF
-#define WELS_VERIFY_IF(bCaseIf) \
-	if ( bCaseIf ){ \
-		return; \
-	}
-#endif//#if WELS_VERIFY_IF
-
-/*
- * Description:	to check variable validation and return with correspoinding process advance.
- *	case_if:	negtive condition to be verified
- *	proc:		process need preform
- *	return:		NONE
- */
-#ifndef WELS_VERIFY_PROC_IF
-#define WELS_VERIFY_PROC_IF(bCaseIf, fProc) \
-	if ( bCaseIf ){ \
-		fProc; \
-		return; \
-	}
-#endif//#if WELS_VERIFY_IF
-
-/*
- * Description: to safe free a ptr with free function pointer
- *  p:			pointer to be destroyed
- *	free_fn:	free function pointer used
- */
-#ifndef WELS_SAFE_FREE_P
-#define WELS_SAFE_FREE_P(pPtr, fFreeFunc) \
-	do{ \
-		if ( NULL != (pPtr) ){ \
-			fFreeFunc( (pPtr) ); \
-			(pPtr) = NULL; \
-		} \
-	}while( 0 );
-#endif//#if WELS_SAFE_FREE_P
-
-/*
- * Description: to safe free an array ptr with free function pointer
- *	arr:		pointer to an array, something like "**p";
- *	num:		number of elements in array
- *  free_fn:	free function pointer
- */
-#ifndef WELS_SAFE_FREE_ARR
-#define WELS_SAFE_FREE_ARR(pArray, iNum, fFreeFunc) \
-	do{ \
-		if ( NULL != (pArray) ){ \
-			int32_t iIdx = 0; \
-			while( iIdx < iNum ){ \
-				if ( NULL != (pArray)[iIdx] ){ \
-					fFreeFunc( (pArray)[iIdx] ); \
-					(pArray)[iIdx] = NULL; \
-				} \
-				++ iIdx; \
-			} \
-			fFreeFunc((pArray)); \
-			(pArray) = NULL; \
-		} \
-	}while( 0 );
-#endif//#if WELS_SAFE_FREE_ARR
-
-} // namespace WelsDec
-
-#endif//WELS_MACRO_UTILIZATIONS_H__
--- a/codec/encoder/core/inc/macros.h
+++ /dev/null
@@ -1,401 +1,0 @@
-/*!
- * \copy
- *     Copyright (c)  2009-2013, Cisco Systems
- *     All rights reserved.
- *
- *     Redistribution and use in source and binary forms, with or without
- *     modification, are permitted provided that the following conditions
- *     are met:
- *
- *        * Redistributions of source code must retain the above copyright
- *          notice, this list of conditions and the following disclaimer.
- *
- *        * Redistributions in binary form must reproduce the above copyright
- *          notice, this list of conditions and the following disclaimer in
- *          the documentation and/or other materials provided with the
- *          distribution.
- *
- *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- *     "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- *     LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- *     FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- *     COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- *     INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- *     BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- *     CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- *     LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- *     ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- *     POSSIBILITY OF SUCH DAMAGE.
- *
- *
- * \file	macros.h
- *
- * \brief	MACRO based tool utilization
- *
- * \date	3/13/2009 Created
- *
- *************************************************************************************
- */
-#ifndef WELS_MACRO_UTILIZATIONS_H__
-#define WELS_MACRO_UTILIZATIONS_H__
-
-//#include <math.h>
-#include "typedefs.h"
-
-namespace WelsSVCEnc {
-#if defined(_MSC_VER)
-#if _MSC_VER <= 1200
-#define ALLOC_ALLIGN_MEM(name,size,type,alignment) \
-			type name##_storage[size+(alignment)-1]; \
-			type * name = (type *) (((int32_t) name##_storage+(alignment - 1)) & ~((int32_t)(alignment)-1))
-
-#define ALLOC_ALLIGN_MEM_2(name,sizex,sizey,type,alignment) \
-			type name##_storage[(sizex)*(sizey)+(alignment)-1]; \
-			type * name = (type *) (((int32_t) name##_storage+(alignment - 1)) & ~((int32_t)(alignment)-1))
-#else //_MSC_VER <= 1200
-#define ALLOC_ALLIGN_MEM(name,size,type,alignment) \
-			__declspec(align(alignment)) type name[size]
-
-#define ALLOC_ALLIGN_MEM_2(name,sizex,sizey,type,alignment) \
-		__declspec(align(alignment)) type name[(sizex)*(sizey)]
-#endif//_MSC_VER <= 1200
-
-#elif defined(__GNUC__)
-
-#define ALLOC_ALLIGN_MEM(name,size,type,alignment) \
-		type name[size] __attribute__((aligned(alignment)))
-#define ALLOC_ALLIGN_MEM_2(name,sizex,sizey,type,alignment) \
-		type name[(sizex)*(sizey)] __attribute__((aligned(alignment)))
-
-#endif//_MSC_VER
-
-
-#if defined(_MSC_VER)
-
-#if(_MSC_VER < 1700)
-#define inline	__inline
-#endif
-
-#define __FASTCALL   __fastcall
-#define ALIGNED_DECLARE( type, var, n ) __declspec(align(n)) type var
-#define __align8(t,v) __declspec(align(8)) t v
-#define __align16(t,v) __declspec(align(16)) t v
-#elif defined(__GNUC__)
-#if !defined(MAC_POWERPC)
-#define __FASTCALL    __attribute__ ((fastcall))
-#else
-#define __FASTCALL	// mean NULL for mac ppc
-#endif//MAC_POWERPC
-#define ALIGNED_DECLARE( type, var, n ) type var __attribute__((aligned(n)))
-#define __align8(t,v) t v __attribute__ ((aligned (8)))
-#define __align16(t,v) t v __attribute__ ((aligned (16)))
-#endif//_MSC_VER
-
-#if defined(_MACH_PLATFORM) || defined(__GNUC__)
-#define ALIGNED_DECLARE_MATRIX_2D(name,sizex,sizey,type,alignment) \
-	type name[(sizex)*(sizey)] __attribute__((aligned(alignment)))
-#else //_MSC_VER <= 1200
-#define ALIGNED_DECLARE_MATRIX_2D(name,sizex,sizey,type,alignment) \
-__declspec(align(alignment)) type name[(sizex)*(sizey)]
-#endif//#if _MACH_PLATFORM
-
-#if defined(_MACH_PLATFORM) || defined(__GNUC__)
-#define ALIGNED_DECLARE_MATRIX_1D(name,size,type,alignment) \
-	type name[size] __attribute__((aligned(alignment)))
-#else //_MSC_VER <= 1200
-#define ALIGNED_DECLARE_MATRIX_1D(name,size,type,alignment) \
-	__declspec(align(alignment)) type name[(size)]
-#endif//#if _MACH_PLATFORM
-
-//#if !defined(SIZEOFRGB24)
-//#define SIZEOFRGB24(cx, cy)	(3 * (cx) * (cy))
-//#endif//SIZEOFRGB24
-
-//#if !defined(SIZEOFRGB32)
-//#define SIZEOFRGB32(cx, cy)	(4 * (cx) * (cy))
-//#endif//SIZEOFRGB32
-
-#ifndef	WELS_ALIGN
-#define WELS_ALIGN(x, n)	(((x)+(n)-1)&~((n)-1))
-#endif//WELS_ALIGN
-
-#ifndef WELS_MAX
-//#define WELS_MAX(x, y)	((x) > (y) ? (x) : (y))
-//#define WELS_MAX(x, y)	((x) - (((x)-(y))&(((x)-(y))>>31)))
-#define WELS_MAX(x, y)	((x) ^ (((x)^(y))& -((x)<(y))))		// WELS_MAX(x, y)
-#endif//WELS_MAX
-
-#ifndef WELS_MIN
-//#define WELS_MIN(x, y)	((x) < (y) ? (x) : (y))
-//#define WELS_MIN(x, y)	((y) + (((x)-(y))&(((x)-(y))>>31)))
-#define WELS_MIN(x, y)	((y) ^ (((x)^(y))& -((x)<(y))))		// WELS_MIN(x, y)
-#endif//WELS_MIN
-
-#ifndef WELS_ROUND
-#define WELS_ROUND(x)	((int32_t)((x)+0.5f+EPSN))
-#endif//WELS_ROUND
-
-static inline int32_t WELS_CEIL (float v) {
-const int32_t n = (int32_t)v;	// floor value
-return ((v > EPSN + n) ? (1 + n) : n);	// (int32_t)ceil(v);
-}
-
-static inline int32_t WELS_FLOOR (float v) {
-return (int32_t)v;
-}
-
-
-#define WELS_NON_ZERO_COUNT_AVERAGE(iC,iA,iB) {	\
-    iC = iA + iB + 1;                           \
-	iC >>= (int32_t)( iA != -1 && iB != -1);    \
-	iC += (iA == -1 && iB == -1);               \
-}
-
-/*
- * log base 2 of v and ceil/floor extension
- */
-
-static inline int32_t WELS_CEILLOG2 (uint32_t v) {
-int32_t r = 0;
---v;
-while (v > 0) {
-  ++r;
-  v >>= 1;
-}
-return r;
-}
-
-static inline int32_t WELS_FLOORLOG2 (uint32_t v) {
-int32_t r = 0;
-while (v > 1) {
-  ++r;
-  v >>= 1;
-}
-return r;
-}
-
-static inline int32_t WELS_LOG2 (uint32_t v) {
-int32_t r = 0;
-while (v >>= 1) {
-  ++r;
-}
-return r;
-
-}
-
-static inline BOOL_T WELS_POWER2_IF (uint32_t v) {
-return (v && ! (v & (v - 1)));
-}
-
-static inline int32_t WELS_MEDIAN (int32_t x,  int32_t y, int32_t z) {
-int32_t t = (x - y) & ((x - y) >> 31);
-x -= t;
-y += t;
-y -= (y - z) & ((y - z) >> 31);
-y += (x - y) & ((x - y) >> 31);
-return y;
-}
-
-#ifndef BUTTERFLY1x2
-#define BUTTERFLY1x2(b) (((b)<<8) | (b))
-#endif//BUTTERFLY1x2
-
-#ifndef BUTTERFLY2x4
-#define BUTTERFLY2x4(wd) (((uint32_t)(wd)<<16) |(wd))
-#endif//BUTTERFLY2x4
-
-#ifndef BUTTERFLY4x8
-#define BUTTERFLY4x8(dw) (((uint64_t)(dw)<<32) | (dw))
-#endif//BUTTERFLY4x8
-
-//when RS accumulation, should clip rs among range of [-255, 255]
-#ifndef CLIP_RS
-#define CLIP_RS( value ) ( WELS_MAX( WELS_MIN( value, 255 ), -255 ) )
-#endif //CLIP_RS
-
-//#ifndef NEG_NUM
-//#define NEG_NUM( num ) (1+(~(num)))
-//#endif// NEG_NUM
-
-#ifndef WELS_CLIP1
-#define WELS_CLIP1(x) (((x) & ~255) ? (-(x) >> 31) : (x))
-#endif//WELS_CLIP1
-
-#ifndef WELS_SIGN
-#define WELS_SIGN(a) ((int32_t)(a) >> 31)	// General: (a)>>(sizeof(int)*CHAR_BIT-1), CHAR_BIT= the number of bits per byte (normally 8)
-#endif //WELS_SIGN
-
-static inline int32_t WELS_ABS (int32_t a) {
-const int32_t sign = WELS_SIGN (a);
-return ((a + sign) ^ sign);
-}
-
-// wels_tostring
-//#ifndef wels_tostring
-//#define wels_tostring(s)	#s
-//#endif //wels_tostring
-
-// WELS_CLIP3
-#ifndef WELS_CLIP3
-#define WELS_CLIP3(x, y, z)		((x) < (y) ? (y) : ((x) > (z) ? (z) : (x)))
-#endif //WELS_CLIP3
-
-#define CLIP3_QP_0_51(q)		WELS_CLIP3(q, 0, 51)	// ((q) < (0) ? (0) : ((q) > (51) ? (51) : (q)))
-
-// Bitwise routines
-// n: ulong
-// b: bit order
-static inline bool_t BITWISE_ENABLED (const uint32_t n, const uint8_t b) {
-const uint8_t bit = (b & 0x1f);	// maximal bit position 31 for uint32_t 4 bytes
-#if defined(WORDS_BIGENDIAN)
-/*
- * 31 .. 24, 23 .. 16, 15 .. 8, 7 .. 0
- * 7 .. 0, 15 .. 8, 23 .. 16, 31 .. 24
- */
-const uint8_t map = 24 + ((bit & 7) << 1) - bit;	// BIG_ENDIAN map
-return (bool_t) ((n & (1 << map)) >> map);	// BIG_ENDIAN
-#else
-return ((n & (1 << bit)) >> bit) ? true : false;	// LITTLE_ENDIAN
-#endif//WORDS_BIGENDIAN
-}
-
-#define   CALC_BI_STRIDE(width,bitcount)  ((((width * bitcount) + 31) & ~31) >> 3)
-
-//////////////////////////////////////////////////////////
-
-#ifdef    WORDS_BIGENDIAN
-
-static inline uint32_t ENDIAN_FIX (uint32_t x) {
-return x;
-}
-
-#else
-
-
-#if defined(_MSC_VER) && defined(_M_IX86)
-static inline uint32_t ENDIAN_FIX (uint32_t x) {
-__asm {
-  mov   eax,  x
-  bswap   eax
-  mov   x,    eax
-}
-return x;
-}
-#else  // GCC
-static inline uint32_t ENDIAN_FIX (uint32_t x) {
-#ifdef X86_ARCH
-__asm__ __volatile__ ("bswap %0":"+r" (x));
-#else
-x = ((x & 0xff000000) >> 24) | ((x & 0xff0000) >> 8) |
-    ((x & 0xff00) << 8) | ((x & 0xff) << 24);
-#endif
-return x;
-}
-
-
-#endif
-
-#endif
-
-// wels_swap16
-
-// wels_swap32
-
-// sad, satd, avg might being in other header
-
-/*
- * Description: to check variable validation and return the specified result
- *	result:		value to be return
- *	case_if:	negative condition to be verified
- */
-#ifndef WELS_VERIFY_RETURN_IF
-#define WELS_VERIFY_RETURN_IF(result, case_if) \
-	if ( case_if ){ \
-		return result; \
-	}
-#endif//#if WELS_VERIFY_RETURN_IF
-
-/*
- *	Description: to check variable validation and return the specified result
- *		with correspoinding process advance.
- *	 result:	value to be return
- *	 case_if:	negative condition to be verified
- *	 proc:		process need perform
- */
-#ifndef WELS_VERIFY_RETURN_PROC_IF
-#define WELS_VERIFY_RETURN_PROC_IF(result, case_if, proc) \
-	if ( case_if ){ \
-		proc;	\
-		return result;	\
-	}
-#endif//#if WELS_VERIFY_RETURN_PROC_IF
-
-/*
- * Description:	to check variable validation and return
- *	case_if:	negtive condition to be verified
- *	return:		NONE
- */
-#ifndef WELS_VERIFY_IF
-#define WELS_VERIFY_IF(case_if) \
-	if ( case_if ){ \
-		return; \
-	}
-#endif//#if WELS_VERIFY_IF
-
-/*
- * Description:	to check variable validation and return with correspoinding process advance.
- *	case_if:	negtive condition to be verified
- *	proc:		process need preform
- *	return:		NONE
- */
-#ifndef WELS_VERIFY_PROC_IF
-#define WELS_VERIFY_PROC_IF(case_if, proc) \
-	if ( case_if ){ \
-		proc; \
-		return; \
-	}
-#endif//#if WELS_VERIFY_IF
-
-/*
- * Description: to safe free a ptr with free function pointer
- *  p:			pointer to be destroyed
- *	free_fn:	free function pointer used
- */
-#ifndef WELS_SAFE_FREE_P
-#define WELS_SAFE_FREE_P(p, free_fn) \
-	do{ \
-		if ( NULL != (p) ){ \
-			free_fn( (p) ); \
-			(p) = NULL; \
-		} \
-	}while( 0 );
-#endif//#if WELS_SAFE_FREE_P
-
-/*
- * Description: to safe free an array ptr with free function pointer
- *	arr:		pointer to an array, something like "**p";
- *	num:		number of elements in array
- *  free_fn:	free function pointer
- */
-#ifndef WELS_SAFE_FREE_ARR
-#define WELS_SAFE_FREE_ARR(arr, num, free_fn) \
-	do{ \
-		if ( NULL != (arr) ){ \
-			int32_t iidx = 0; \
-			while( iidx < num ){ \
-				if ( NULL != (arr)[iidx] ){ \
-					free_fn( (arr)[iidx] ); \
-					(arr)[iidx] = NULL; \
-				} \
-				++ iidx; \
-			} \
-			free_fn((arr)); \
-			(arr) = NULL; \
-		} \
-	}while( 0 );
-#endif//#if WELS_SAFE_FREE_ARR
-
-}
-
-#endif//WELS_MACRO_UTILIZATIONS_H__