shithub: openh264

Download patch

ref: 37423d414836f735a91d3dec17c1370607938401
parent: be8e62ff47c9d7967e9f402baabe34de1482ec86
author: Sigrid Solveig Haflínudóttir <[email protected]>
date: Thu Dec 3 09:04:36 EST 2020

make the decoder compile and run with treason

--- a/codec/common/inc/WelsThreadLib.h
+++ b/codec/common/inc/WelsThreadLib.h
@@ -43,67 +43,15 @@
 
 #include "typedefs.h"
 
-#ifdef  __cplusplus
-extern "C" {
-#endif
-
-#if defined(_WIN32) || defined(__CYGWIN__)
-
-#include <windows.h>
-
-typedef    HANDLE                    WELS_THREAD_HANDLE;
-typedef    LPTHREAD_START_ROUTINE    LPWELS_THREAD_ROUTINE;
-
-typedef    CRITICAL_SECTION          WELS_MUTEX;
-typedef    HANDLE                    WELS_EVENT;
-
-#define    WELS_THREAD_ROUTINE_TYPE         DWORD  WINAPI
-#define    WELS_THREAD_ROUTINE_RETURN(rc)   return (DWORD)rc;
-
-#ifdef WINAPI_FAMILY
-#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
-#define WP80
-
-#define InitializeCriticalSection(x) InitializeCriticalSectionEx(x, 0, 0)
-#define GetSystemInfo(x) GetNativeSystemInfo(x)
-#define CreateEvent(attr, reset, init, name) CreateEventEx(attr, name, ((reset) ? CREATE_EVENT_MANUAL_RESET : 0) | ((init) ? CREATE_EVENT_INITIAL_SET : 0), EVENT_ALL_ACCESS)
-#define CreateSemaphore(a, b, c, d) CreateSemaphoreEx(a, b, c, d, 0, SEMAPHORE_ALL_ACCESS)
-#define WaitForSingleObject(a, b) WaitForSingleObjectEx(a, b, FALSE)
-#define WaitForMultipleObjects(a, b, c, d) WaitForMultipleObjectsEx(a, b, c, d, FALSE)
-#endif
-#endif
-
-#else // NON-WINDOWS
-
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <pthread.h>
-#include <semaphore.h>
-#include <signal.h>
-#include <errno.h>
-#include <time.h>
-#include <sys/time.h>
-
-#include <sys/stat.h>
-#include <fcntl.h>
-
-typedef   pthread_t    WELS_THREAD_HANDLE;
+typedef   int    WELS_THREAD_HANDLE;
 typedef  void* (*LPWELS_THREAD_ROUTINE) (void*);
 
-typedef   pthread_mutex_t           WELS_MUTEX;
+typedef   QLock           WELS_MUTEX;
+typedef   int            WELS_EVENT;
 
-#ifdef __APPLE__
-typedef   pthread_cond_t            WELS_EVENT;
-#else
-typedef   sem_t*                    WELS_EVENT;
-#endif
-
 #define   WELS_THREAD_ROUTINE_TYPE         void *
 #define   WELS_THREAD_ROUTINE_RETURN(rc)   return (void*)(intptr_t)rc;
 
-#endif//_WIN32
-
 typedef    int32_t        WELS_THREAD_ERROR_CODE;
 typedef    int32_t        WELS_THREAD_ATTR;
 
@@ -122,14 +70,14 @@
 WELS_THREAD_ERROR_CODE    WelsMutexUnlock (WELS_MUTEX* mutex);
 WELS_THREAD_ERROR_CODE    WelsMutexDestroy (WELS_MUTEX* mutex);
 
-WELS_THREAD_ERROR_CODE    WelsEventOpen (WELS_EVENT* p_event, const char* event_name = NULL);
-WELS_THREAD_ERROR_CODE    WelsEventClose (WELS_EVENT* event, const char* event_name = NULL);
+WELS_THREAD_ERROR_CODE    WelsEventOpen (WELS_EVENT* p_event, const char* event_name);
+WELS_THREAD_ERROR_CODE    WelsEventClose (WELS_EVENT* event, const char* event_name);
 
 WELS_THREAD_ERROR_CODE    WelsEventSignal (WELS_EVENT* event,WELS_MUTEX *pMutex, int* iCondition);
-WELS_THREAD_ERROR_CODE    WelsEventWait (WELS_EVENT* event,WELS_MUTEX *pMutex, int& iCondition);
-WELS_THREAD_ERROR_CODE    WelsEventWaitWithTimeOut (WELS_EVENT* event, uint32_t dwMilliseconds,WELS_MUTEX *pMutex = NULL);
+WELS_THREAD_ERROR_CODE    WelsEventWait (WELS_EVENT* event,WELS_MUTEX *pMutex, int iCondition);
+WELS_THREAD_ERROR_CODE    WelsEventWaitWithTimeOut (WELS_EVENT* event, uint32_t dwMilliseconds,WELS_MUTEX *pMutex);
 WELS_THREAD_ERROR_CODE    WelsMultipleEventsWaitSingleBlocking (uint32_t nCount, WELS_EVENT* event_list,
-    WELS_EVENT* master_event = NULL,WELS_MUTEX *pMutex = NULL);
+    WELS_EVENT* master_event,WELS_MUTEX *pMutex);
 
 WELS_THREAD_ERROR_CODE    WelsThreadCreate (WELS_THREAD_HANDLE* thread,  LPWELS_THREAD_ROUTINE  routine,
     void* arg, WELS_THREAD_ATTR attr);
--- a/codec/common/inc/crt_util_safe_x.h
+++ b/codec/common/inc/crt_util_safe_x.h
@@ -40,24 +40,8 @@
 #ifndef WELS_CRT_UTIL_SAFE_CROSS_PLATFORMS_H__
 #define WELS_CRT_UTIL_SAFE_CROSS_PLATFORMS_H__
 
-#include <string.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <math.h>
-#include <time.h>
-
-#if defined(_WIN32)
-#include <windows.h>
-#include <sys/types.h>
-#include <sys/timeb.h>
-#else
-#include <sys/time.h>
 #include "typedefs.h"
-#endif//_WIN32
 
-#include "typedefs.h"
-
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -68,14 +52,10 @@
 
 typedef      FILE  WelsFileHandle;
 
-#ifdef _WIN32
-typedef      struct _timeb     SWelsTime;
-#else
 typedef struct TagWelsTime {
-  time_t time;
+  long time;
   unsigned short millitm;
 } SWelsTime;
-#endif
 
 int32_t   WelsSnprintf (char* buffer,  int32_t sizeOfBuffer,  const char* format, ...);
 char*   WelsStrncpy (char* dest, int32_t sizeInBytes, const char* src);
--- a/codec/common/inc/expand_pic.h
+++ b/codec/common/inc/expand_pic.h
@@ -90,10 +90,10 @@
   PExpandPictureFunc pfExpandChromaPicture[2];
 } SExpandPicFunc;
 
-void PadMBLuma_c (uint8_t*& pDst, const int32_t& kiStride, const int32_t& kiPicW, const int32_t& kiPicH,
-                  const int32_t& kiMbX, const int32_t& kiMbY, const int32_t& kiMBWidth, const int32_t& kiMBHeight);
-void PadMBChroma_c (uint8_t*& pDst, const int32_t& kiStride, const int32_t& kiPicW, const int32_t& kiPicH,
-                    const int32_t& kiMbX, const int32_t& kiMbY, const int32_t& kiMBWidth, const int32_t& kiMBHeight);
+void PadMBLuma_c (uint8_t* pDst, const int32_t kiStride, const int32_t kiPicW, const int32_t kiPicH,
+                  const int32_t kiMbX, const int32_t kiMbY, const int32_t kiMBWidth, const int32_t kiMBHeight);
+void PadMBChroma_c (uint8_t* pDst, const int32_t kiStride, const int32_t kiPicW, const int32_t kiPicH,
+                    const int32_t kiMbX, const int32_t kiMbY, const int32_t kiMBWidth, const int32_t kiMBHeight);
 
 void ExpandReferencingPicture (uint8_t* pData[3], int32_t iWidth, int32_t iHeight, int32_t iStride[3],
                                PExpandPictureFunc pExpLuma, PExpandPictureFunc pExpChrom[2]);
--- a/codec/common/inc/golomb_common.h
+++ b/codec/common/inc/golomb_common.h
@@ -42,8 +42,6 @@
 
 #include "typedefs.h"
 
-namespace WelsCommon {
-
 #define WRITE_BE_32(ptr, val) do { \
         (ptr)[0] = (val) >> 24; \
         (ptr)[1] = (val) >> 16; \
@@ -162,5 +160,4 @@
   return 0;
 }
 
-}
 #endif//EXPONENTIAL_GOLOMB_ENTROPY_CODING_COMMON_H__
--- a/codec/common/inc/intra_pred_common.h
+++ b/codec/common/inc/intra_pred_common.h
@@ -44,8 +44,8 @@
 #include "typedefs.h"
 
 
-void WelsI16x16LumaPredV_c (uint8_t* pPred, uint8_t* pRef, const int32_t kiStride);
-void WelsI16x16LumaPredH_c (uint8_t* pPred, uint8_t* pRef, const int32_t kiStride);
+void WelsI16x16LumaPredV_c_ref (uint8_t* pPred, uint8_t* pRef, const int32_t kiStride);
+void WelsI16x16LumaPredH_c_ref (uint8_t* pPred, uint8_t* pRef, const int32_t kiStride);
 
 
 #if defined(__cplusplus)
--- a/codec/common/inc/ls_defines.h
+++ b/codec/common/inc/ls_defines.h
@@ -33,20 +33,19 @@
 #ifndef ___LD_ST_MACROS___
 #define ___LD_ST_MACROS___
 
-#include <string.h>
 #include "typedefs.h"
 
-#ifdef __GNUC__
-
+#pragma pack on
 struct tagUnaligned_64 {
   uint64_t l;
-} __attribute__ ((packed)) __attribute__ ((may_alias));
+};
 struct tagUnaligned_32 {
   uint32_t l;
-} __attribute__ ((packed)) __attribute__ ((may_alias));
+};
 struct tagUnaligned_16 {
   uint16_t l;
-} __attribute__ ((packed)) __attribute__ ((may_alias));
+};
+#pragma pack off
 
 #define LD16(a) (((struct tagUnaligned_16 *) (a))->l)
 #define LD32(a) (((struct tagUnaligned_32 *) (a))->l)
@@ -54,7 +53,7 @@
 
 #define STRUCTA(size, align) struct tagUnaligned_##size##_##align {\
     uint##size##_t l; \
-} __attribute__ ((aligned(align))) __attribute__ ((may_alias))
+}
 STRUCTA (16, 2);
 STRUCTA (32, 2);
 STRUCTA (32, 4);
@@ -61,8 +60,7 @@
 STRUCTA (64, 2);
 STRUCTA (64, 4);
 STRUCTA (64, 8);
-//#define _USE_STRUCT_INT_CVT
-//#ifdef _USE_STRUCT_INT_CVT
+
 #define ST16(a, b) (((struct tagUnaligned_16 *) (a))->l) = (b)
 #define ST32(a, b) (((struct tagUnaligned_32 *) (a))->l) = (b)
 #define ST64(a, b) (((struct tagUnaligned_64 *) (a))->l) = (b)
@@ -81,39 +79,6 @@
 #define ST64A2(a, b) STA(a, b, 64, 2)
 #define ST64A4(a, b) STA(a, b, 64, 4)
 #define ST64A8(a, b) STA(a, b, 64, 8)
-//#else
-//inline void __ST16(void *dst, uint16_t v) { memcpy(dst, &v, 2); }
-//inline void __ST32(void *dst, uint32_t v) { memcpy(dst, &v, 4); }
-//inline void __ST64(void *dst, uint64_t v) { memcpy(dst, &v, 8); }
-//#endif
-
-#else
-
-//#define INTD16(a) (*((int16_t*)(a)))
-//#define INTD32(a) (*((int32_t*)(a)))
-//#define INTD64(a) (*((int64_t*)(a)))
-
-#define LD16(a) (*((uint16_t*)(a)))
-#define LD32(a) (*((uint32_t*)(a)))
-#define LD64(a) (*((uint64_t*)(a)))
-
-#define ST16(a, b) *((uint16_t*)(a)) = (b)
-#define ST32(a, b) *((uint32_t*)(a)) = (b)
-#define ST64(a, b) *((uint64_t*)(a)) = (b)
-#define LD16A2 LD16
-#define LD32A2 LD32
-#define LD32A4 LD32
-#define LD64A2 LD64
-#define LD64A4 LD64
-#define LD64A8 LD64
-#define ST16A2 ST16
-#define ST32A2 ST32
-#define ST32A4 ST32
-#define ST64A2 ST64
-#define ST64A4 ST64
-#define ST64A8 ST64
-
-#endif /* !__GNUC__ */
 
 #ifndef INTD16
 #define INTD16 LD16
--- a/codec/common/inc/macros.h
+++ b/codec/common/inc/macros.h
@@ -40,9 +40,6 @@
 #ifndef WELS_MACRO_UTILIZATIONS_H__
 #define WELS_MACRO_UTILIZATIONS_H__
 
-#include <math.h>
-#include <assert.h>
-#include <string.h>
 #include "typedefs.h"
 
 
@@ -204,14 +201,6 @@
 #define WELS_CLIP3(iX, iY, iZ) ((iX) < (iY) ? (iY) : ((iX) > (iZ) ? (iZ) : (iX)))
 #endif //WELS_CLIP3
 
-template<typename T> T WelsClip3(T iX, T iY, T iZ) {
-  if (iX < iY)
-    return iY;
-  if (iX > iZ)
-    return iZ;
-  return iX;
-}
-
 #define DISALLOW_COPY_AND_ASSIGN(cclass) \
 private:	\
 cclass(const cclass &);	\
@@ -293,7 +282,7 @@
 #define WELS_GCC_UNUSED
 #endif
 
-inline bool CheckInRangeCloseOpen (const int16_t kiCurrent, const int16_t kiMin, const int16_t kiMax) {
+static inline bool CheckInRangeCloseOpen (const int16_t kiCurrent, const int16_t kiMin, const int16_t kiMax) {
   return ((kiCurrent >= kiMin) && (kiCurrent < kiMax));
 }
 
@@ -309,20 +298,20 @@
   }
 }
 
-inline void WelsSetMemMultiplebytes_c (void* pDst, uint32_t iValue, int32_t iSizeOfData, int32_t iDataLengthOfData) {
+static inline void WelsSetMemMultiplebytes_c (void* pDst, uint32_t iValue, int32_t iSizeOfData, int32_t iDataLengthOfData) {
   assert (4 == iDataLengthOfData || 2 == iDataLengthOfData || 1 == iDataLengthOfData);
 
   // TODO: consider add assembly for these functions
   if (0 != iValue) {
     if (4 == iDataLengthOfData) {
-      WelsSetMemUint32_c (static_cast<uint32_t*> (pDst), static_cast<uint32_t> (iValue), iSizeOfData);
+      WelsSetMemUint32_c ((uint32_t*) (pDst), (uint32_t) (iValue), iSizeOfData);
     } else if (2 == iDataLengthOfData) {
-      WelsSetMemUint16_c (static_cast<uint16_t*> (pDst), static_cast<uint16_t> (iValue), iSizeOfData);
+      WelsSetMemUint16_c ((uint16_t*) (pDst), (uint16_t) (iValue), iSizeOfData);
     } else {
-      memset (static_cast<uint8_t*> (pDst), static_cast<uint8_t> (iValue), iSizeOfData);
+      memset ((uint8_t*) (pDst), (uint8_t) (iValue), iSizeOfData);
     }
   } else {
-    memset (static_cast<uint8_t*> (pDst), 0, iSizeOfData * iDataLengthOfData);
+    memset ((uint8_t*) (pDst), 0, iSizeOfData * iDataLengthOfData);
   }
 }
 
--- a/codec/common/inc/mc.h
+++ b/codec/common/inc/mc.h
@@ -53,11 +53,7 @@
   PWelsSampleAveragingFunc    pfSampleAveraging;
 } SMcFunc;
 
-namespace WelsCommon {
-
 void InitMcFunc (SMcFunc* pMcFunc, uint32_t iCpu);
-
-} // namespace WelsCommon
 
 
 #if defined(__cplusplus)
--- a/codec/common/inc/memory_align.h
+++ b/codec/common/inc/memory_align.h
@@ -44,37 +44,22 @@
 #endif//MEMORY_MONITOR
 #endif//MEMORY_CHECK
 
+typedef struct CMemoryAlign {
+void* (*WelsMallocz) (const uint32_t kuiSize, const char* kpTag);
+void* (*WelsMalloc) (const uint32_t kuiSize, const char* kpTag);
+void (*WelsFree) (void* pPointer, const char* kpTag);
+const uint32_t (*WelsGetCacheLineSize)(void);
+const uint32_t (*WelsGetMemoryUsage)(void);
 
-#ifdef MEMORY_CHECK
-#include <stdio.h>
-#endif//MEMORY_CHECK
-
-namespace WelsCommon {
-
-class CMemoryAlign {
- public:
-CMemoryAlign (const uint32_t kuiCacheLineSize);
-virtual ~CMemoryAlign();
-
-void* WelsMallocz (const uint32_t kuiSize, const char* kpTag);
-void* WelsMalloc (const uint32_t kuiSize, const char* kpTag);
-void WelsFree (void* pPointer, const char* kpTag);
-const uint32_t WelsGetCacheLineSize() const;
-const uint32_t WelsGetMemoryUsage() const;
-
- private:
-// private copy & assign constructors adding to fix klocwork scan issues
-CMemoryAlign (const CMemoryAlign& kcMa);
-CMemoryAlign& operator= (const CMemoryAlign& kcMa);
-
- protected:
 uint32_t        m_nCacheLineSize;
 
 #ifdef MEMORY_MONITOR
 uint32_t        m_nMemoryUsageInBytes;
-#endif//MEMORY_MONITOR
-};
+#endif
+}CMemoryAlign;
 
+extern CMemoryAlign cMemoryAlign;
+
 /*!
 *************************************************************************************
 * \brief        malloc with zero filled utilization in Wels
@@ -110,7 +95,5 @@
 #define  WELS_DELETE_OP(p) \
   if(p) delete p;            \
   p = NULL;
-
-}
 
 #endif//WELS_COMMON_MEMORY_ALIGN_H__
--- a/codec/common/inc/typedefs.h
+++ b/codec/common/inc/typedefs.h
@@ -34,47 +34,31 @@
 #ifndef WELS_TYPE_DEFINES_H__
 #define WELS_TYPE_DEFINES_H__
 
-#include <limits.h>
-#include <stddef.h>
+#include <u.h>
+#include <libc.h>
+#include <stdio.h>
 
-////////////////////////////////////////////////////////////////////////////
-// NOTICE : ALL internal implement MUST use the data type defined as below
-//          ONLY except with the interface file !!!!!
-////////////////////////////////////////////////////////////////////////////
+#define __attribute__(...)
 
-#ifndef  _MSC_VER
+typedef enum { false, true } bool;
+typedef s8int int8_t;
+typedef u8int uint8_t;
+typedef s16int int16_t;
+typedef u16int uint16_t;
+typedef s32int int32_t;
+typedef u32int uint32_t;
+typedef s64int int64_t;
+typedef u64int uint64_t;
+typedef uintptr uintptr_t;
 
-#define __STDC_FORMAT_MACROS
-#include <stdint.h>
-#include <inttypes.h>
+#define PRId64 "lldd"
 
-#ifdef __LP64__
+#ifdef __amd64__
 typedef int64_t intX_t;
 #else
 typedef int32_t intX_t;
 #endif
 
-#else
-
-// FIXME:     all singed type should be declared explicit,  for example,  int8_t should be declared as signed char.
-typedef signed char      int8_t  ;
-typedef unsigned char    uint8_t ;
-typedef short            int16_t ;
-typedef unsigned short   uint16_t;
-typedef int              int32_t ;
-typedef unsigned int     uint32_t;
-typedef __int64          int64_t ;
-typedef unsigned __int64 uint64_t;
-#define PRId64 "I64d"
-
-#ifdef _WIN64
-typedef int64_t intX_t;
-#else
-typedef int32_t intX_t;
-#endif
-
-#endif // _MSC_VER defined
-
 // The 'float' type is portable and usable without any need for any extra typedefs.
 
 #ifdef EPSN
@@ -83,4 +67,3 @@
 #define EPSN (0.000001f) // (1e-6) // desired float precision
 
 #endif //WELS_TYPE_DEFINES_H__
-
--- a/codec/common/inc/utils.h
+++ b/codec/common/inc/utils.h
@@ -39,7 +39,6 @@
 #ifndef WELS_UTILS_H__
 #define WELS_UTILS_H__
 
-#include <stdarg.h>
 #include "typedefs.h"
 
 #define MAX_LOG_SIZE    1024
--- a/codec/common/inc/wels_common_defs.h
+++ b/codec/common/inc/wels_common_defs.h
@@ -39,7 +39,6 @@
 #include "codec_app_def.h"
 
 
-namespace WelsCommon {
 /*common use table*/
 
 #define  CTX_NA 0
@@ -69,8 +68,8 @@
 
 extern const uint8_t g_kuiDequantScaling4x4Default[2][16];
 extern const uint8_t g_kuiDequantScaling8x8Default[2][64];
-extern const ALIGNED_DECLARE (uint16_t, g_kuiDequantCoeff[52][8], 16);
-extern const ALIGNED_DECLARE (uint16_t, g_kuiDequantCoeff8x8[52][64], 16);
+extern const uint16_t g_kuiDequantCoeff[52][8];
+extern const uint16_t g_kuiDequantCoeff8x8[52][64];
 extern const uint8_t g_kuiChromaQpTable[52];
 
 extern const uint8_t g_kuiCabacRangeLps[64][4];
@@ -80,7 +79,7 @@
 /*
  *  NAL Unit Type (5 Bits)
  */
-enum EWelsNalUnitType {
+typedef enum EWelsNalUnitType {
   NAL_UNIT_UNSPEC_0             = 0,
   NAL_UNIT_CODED_SLICE          = 1,
   NAL_UNIT_CODED_SLICE_DPA      = 2,
@@ -113,7 +112,7 @@
   NAL_UNIT_UNSPEC_29            = 29,
   NAL_UNIT_UNSPEC_30            = 30,
   NAL_UNIT_UNSPEC_31            = 31
-};
+}EWelsNalUnitType;
 
 /*
  *  NAL Reference IDC (2 Bits)
@@ -130,11 +129,11 @@
  * VCL TYPE
  */
 
-enum EVclType {
+typedef enum EVclType {
   NON_VCL   = 0,
   VCL       = 1,
   NOT_APP   = 2
-};
+}EVclType;
 
 /*
  *  vcl type map for given NAL unit type and corresponding H264 type (0: AVC; 1: SVC).
@@ -160,7 +159,7 @@
  * meaning mapped version after eSliceType minus 4.
  */
 
-enum EWelsSliceType {
+typedef enum EWelsSliceType {
   P_SLICE       = 0,
   B_SLICE       = 1,
   I_SLICE       = 2,
@@ -167,7 +166,7 @@
   SP_SLICE      = 3,
   SI_SLICE      = 4,
   UNKNOWN_SLICE = 5
-};
+}EWelsSliceType;
 
 /* SSlice Types in scalable extension */
 enum ESliceTypeExt {
@@ -369,5 +368,5 @@
 #define C_PRED_DC_T      5
 #define C_PRED_DC_128    6
 #define C_PRED_A    7
-}
+
 #endif//WELS_COMMON_DEFS_H__
--- a/codec/common/src/common_tables.cpp
+++ b/codec/common/src/common_tables.cpp
@@ -32,7 +32,6 @@
 
 #include "wels_common_defs.h"
 
-namespace WelsCommon {
 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 //////pNonZeroCount[16+8] mapping scan index
@@ -205,7 +204,7 @@
       22, 24, 25, 27, 28, 30, 32, 33,
       24, 25, 27, 28, 30, 32, 33, 35 }
 };
-ALIGNED_DECLARE (const uint16_t, g_kuiDequantCoeff[52][8], 16) = {
+const uint16_t g_kuiDequantCoeff[52][8] = {
   /* 0*/{   10,   13,   10,   13,   13,   16,   13,   16 },     /* 1*/{   11,   14,   11,   14,   14,   18,   14,   18 },
   /* 2*/{   13,   16,   13,   16,   16,   20,   16,   20 },     /* 3*/{   14,   18,   14,   18,   18,   23,   18,   23 },
   /* 4*/{   16,   20,   16,   20,   20,   25,   20,   25 },     /* 5*/{   18,   23,   18,   23,   23,   29,   23,   29 },
@@ -234,7 +233,7 @@
   /*50*/{ 3328, 4096, 3328, 4096, 4096, 5120, 4096, 5120 },     /*51*/{ 3584, 4608, 3584, 4608, 4608, 5888, 4608, 5888 },
 };
 
-ALIGNED_DECLARE (const uint16_t, g_kuiDequantCoeff8x8[52][64], 16) = {
+const uint16_t g_kuiDequantCoeff8x8[52][64] = {
 /* QP ==  0 */
 { 320,  304,  400,  304,  320,  304,  400,  304,  304,  288,  384,  288,  304,  288,  384,  288,  400,  384,  512,  384,  400,  384,  512,  384,  304,  288,  384,  288,  304,  288,  384,  288,  320,  304,  400,  304,  320,  304,  400,  304,  304,  288,  384,  288,  304,  288,  384,  288,  400,  384,  512,  384,  400,  384,  512,  384,  304,  288,  384,  288,  304,  288,  384,  288 },
 /* QP ==  1 */
@@ -903,4 +902,3 @@
   17
 };
 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-}
--- a/codec/common/src/crt_util_safe_x.cpp
+++ b/codec/common/src/crt_util_safe_x.cpp
@@ -38,21 +38,6 @@
  *************************************************************************************
  */
 
-#include <string.h>
-#include <stdlib.h>
-#include <math.h>
-#include <time.h>
-#if defined(_WIN32)
-#include <windows.h>
-#include <sys/types.h>
-#include <sys/timeb.h>
-#ifndef _MSC_VER
-#include <sys/time.h>
-#endif //!_MSC_VER
-#else
-#include <sys/time.h>
-#endif //_WIN32
-
 #include "macros.h"
 #include "crt_util_safe_x.h" // Safe CRT routines like utils for cross platforms
 
@@ -215,28 +200,19 @@
 }
 
 int32_t WelsGetTimeOfDay (SWelsTime* pTp) {
-  struct timeval  sTv;
+  long t;
 
-  if (gettimeofday (&sTv, NULL)) {
-    return -1;
-  }
+  t = time(nil);
 
-  pTp->time = sTv.tv_sec;
-  pTp->millitm = (uint16_t)sTv.tv_usec / 1000;
+  pTp->time = t;
+  pTp->millitm = 0;
 
   return 0;
 }
 
 int32_t WelsStrftime (char* pBuffer, int32_t iSize, const char* kpFormat, const SWelsTime* kpTp) {
-  struct tm*   pTnow;
-  int32_t iRc;
-
-  pTnow = localtime (&kpTp->time);
-
-  iRc = (int32_t) strftime (pBuffer, iSize, kpFormat, pTnow);
-  if (iRc == 0)
-    pBuffer[0] = '\0';
-  return iRc;
+  USED(kpFormat); USED(kpTp);
+  return snprint(pBuffer, iSize, "%s", ctime(time(nil)));
 }
 
 #endif
--- a/codec/common/src/expand_pic.cpp
+++ b/codec/common/src/expand_pic.cpp
@@ -29,11 +29,11 @@
  *     POSSIBILITY OF SUCH DAMAGE.
  *
  */
-#include <string.h>
+
 #include "expand_pic.h"
 #include "cpu_core.h"
 
-static inline void MBPadTopLeftLuma_c (uint8_t*& pDst, const int32_t& kiStride) {
+static inline void MBPadTopLeftLuma_c (uint8_t* pDst, const int32_t kiStride) {
   const uint8_t kuiTL = pDst[0];
   int32_t i = 0;
   uint8_t* pTopLeft = pDst;
@@ -45,7 +45,7 @@
   } while (++i < PADDING_LENGTH);
 }
 
-static inline void MBPadTopLuma_c (uint8_t*& pDst, const int32_t& kiStride, const int32_t& kiMbX) {
+static inline void MBPadTopLuma_c (uint8_t* pDst, const int32_t kiStride, const int32_t kiMbX) {
   uint8_t* pTopLine = pDst + (kiMbX << 4);
   int32_t i = 0;
   uint8_t* pTop = pTopLine;
@@ -56,8 +56,8 @@
   } while (++i < PADDING_LENGTH);
 }
 
-static inline void MBPadBottomLuma_c (uint8_t*& pDst, const int32_t& kiStride, const int32_t& kiMbX,
-                                      const int32_t& kiPicH) {
+static inline void MBPadBottomLuma_c (uint8_t* pDst, const int32_t kiStride, const int32_t kiMbX,
+                                      const int32_t kiPicH) {
   uint8_t* pBottomLine = pDst + (kiPicH - 1) * kiStride + (kiMbX << 4);
   int32_t i = 0;
   uint8_t* pBottom = pBottomLine;
@@ -68,7 +68,7 @@
   } while (++i < PADDING_LENGTH);
 }
 
-static inline void MBPadTopRightLuma_c (uint8_t*& pDst, const int32_t& kiStride, const int32_t& kiPicW) {
+static inline void MBPadTopRightLuma_c (uint8_t* pDst, const int32_t kiStride, const int32_t kiPicW) {
   uint8_t* pTopRight = pDst + kiPicW;
   const uint8_t kuiTR = pTopRight[-1];
   int32_t i = 0;
@@ -81,7 +81,7 @@
   } while (++i < PADDING_LENGTH);
 }
 
-static inline void MBPadBottomLeftLuma_c (uint8_t*& pDst, const int32_t& kiStride, const int32_t& kiPicH) {
+static inline void MBPadBottomLeftLuma_c (uint8_t* pDst, const int32_t kiStride, const int32_t kiPicH) {
   uint8_t* pDstLastLine = pDst + (kiPicH - 1) * kiStride;
   const uint8_t kuiBL = pDstLastLine[0];
   int32_t i = 0;
@@ -94,8 +94,8 @@
   } while (++i < PADDING_LENGTH);
 }
 
-static inline void MBPadBottomRightLuma_c (uint8_t*& pDst, const int32_t& kiStride, const int32_t& kiPicW,
-    const int32_t& kiPicH) {
+static inline void MBPadBottomRightLuma_c (uint8_t* pDst, const int32_t kiStride, const int32_t kiPicW,
+    const int32_t kiPicH) {
   uint8_t* pDstLastLine = pDst + (kiPicH - 1) * kiStride + kiPicW;
   const uint8_t kuiBR = pDstLastLine[-1];
   int32_t i = 0;
@@ -108,7 +108,7 @@
   } while (++i < PADDING_LENGTH);
 }
 
-static inline void MBPadLeftLuma_c (uint8_t*& pDst, const int32_t& kiStride, const int32_t& kiMbY) {
+static inline void MBPadLeftLuma_c (uint8_t* pDst, const int32_t kiStride, const int32_t kiMbY) {
   uint8_t* pTmp = pDst + (kiMbY << 4) * kiStride;
   for (int32_t i = 0; i < 16; ++i) {
     // pad left
@@ -117,8 +117,8 @@
   }
 }
 
-static inline void MBPadRightLuma_c (uint8_t*& pDst, const int32_t& kiStride, const int32_t& kiMbY,
-                                     const int32_t& kiPicW) {
+static inline void MBPadRightLuma_c (uint8_t* pDst, const int32_t kiStride, const int32_t kiMbY,
+                                     const int32_t kiPicW) {
   uint8_t* pTmp = pDst + (kiMbY << 4) * kiStride + kiPicW;
   for (int32_t i = 0; i < 16; ++i) {
     // pad right
@@ -127,7 +127,7 @@
   }
 }
 
-static inline void MBPadTopChroma_c (uint8_t*& pDst, const int32_t& kiStride, const int32_t& kiMbX) {
+static inline void MBPadTopChroma_c (uint8_t* pDst, const int32_t kiStride, const int32_t kiMbX) {
   uint8_t* pTopLine = pDst + (kiMbX << 3);
   int32_t i = 0;
   uint8_t* pTop = pTopLine;
@@ -138,8 +138,8 @@
   } while (++i < CHROMA_PADDING_LENGTH);
 }
 
-static inline void MBPadBottomChroma_c (uint8_t*& pDst, const int32_t& kiStride, const int32_t& kiMbX,
-                                        const int32_t& kiPicH) {
+static inline void MBPadBottomChroma_c (uint8_t* pDst, const int32_t kiStride, const int32_t kiMbX,
+                                        const int32_t kiPicH) {
   uint8_t* pBottomLine = pDst + (kiPicH - 1) * kiStride + (kiMbX << 3);
   int32_t i = 0;
   uint8_t* pBottom = pBottomLine;
@@ -150,7 +150,7 @@
   } while (++i < CHROMA_PADDING_LENGTH);
 }
 
-static inline void MBPadTopLeftChroma_c (uint8_t*& pDst, const int32_t& kiStride) {
+static inline void MBPadTopLeftChroma_c (uint8_t* pDst, const int32_t kiStride) {
   const uint8_t kuiTL = pDst[0];
   int32_t i = 0;
   uint8_t* pTopLeft = pDst;
@@ -162,7 +162,7 @@
   } while (++i < CHROMA_PADDING_LENGTH);
 }
 
-static inline void MBPadTopRightChroma_c (uint8_t*& pDst, const int32_t& kiStride, const int32_t& kiPicW) {
+static inline void MBPadTopRightChroma_c (uint8_t* pDst, const int32_t kiStride, const int32_t kiPicW) {
   uint8_t* pTopRight = pDst + kiPicW;
   const uint8_t kuiTR = pTopRight[-1];
   int32_t i = 0;
@@ -175,7 +175,7 @@
   } while (++i < CHROMA_PADDING_LENGTH);
 }
 
-static inline void MBPadBottomLeftChroma_c (uint8_t*& pDst, const int32_t& kiStride, const int32_t& kiPicH) {
+static inline void MBPadBottomLeftChroma_c (uint8_t* pDst, const int32_t kiStride, const int32_t kiPicH) {
   uint8_t* pDstLastLine = pDst + (kiPicH - 1) * kiStride;
   const uint8_t kuiBL = pDstLastLine[0];
   int32_t i = 0;
@@ -188,7 +188,7 @@
   } while (++i < CHROMA_PADDING_LENGTH);
 }
 
-static inline void MBPadBottomRightChroma_c (uint8_t*& pDst, const int32_t& kiStride, const int32_t& kiPicW,
+static inline void MBPadBottomRightChroma_c (uint8_t* pDst, const int32_t kiStride, const int32_t kiPicW,
     const int32_t kiPicH) {
   uint8_t* pDstLastLine = pDst + (kiPicH - 1) * kiStride + kiPicW;
   const uint8_t kuiBR = pDstLastLine[-1];
@@ -202,7 +202,7 @@
   } while (++i < CHROMA_PADDING_LENGTH);
 }
 
-static inline void MBPadLeftChroma_c (uint8_t*& pDst, const int32_t& kiStride, const int32_t& kiMbY) {
+static inline void MBPadLeftChroma_c (uint8_t* pDst, const int32_t kiStride, const int32_t kiMbY) {
   uint8_t* pTmp = pDst + (kiMbY << 3) * kiStride;
   for (int32_t i = 0; i < 8; ++i) {
     // pad left
@@ -211,8 +211,8 @@
   }
 }
 
-static inline void MBPadRightChroma_c (uint8_t*& pDst, const int32_t& kiStride, const int32_t& kiMbY,
-                                       const int32_t& kiPicW) {
+static inline void MBPadRightChroma_c (uint8_t* pDst, const int32_t kiStride, const int32_t kiMbY,
+                                       const int32_t kiPicW) {
   uint8_t* pTmp = pDst + (kiMbY << 3) * kiStride + kiPicW;
   for (int32_t i = 0; i < 8; ++i) {
     // pad right
@@ -221,8 +221,8 @@
   }
 }
 
-void PadMBLuma_c (uint8_t*& pDst, const int32_t& kiStride, const int32_t& kiPicW, const int32_t& kiPicH,
-                  const int32_t& kiMbX, const int32_t& kiMbY, const int32_t& kiMBWidth, const int32_t& kiMBHeight) {
+void PadMBLuma_c (uint8_t* pDst, const int32_t kiStride, const int32_t kiPicW, const int32_t kiPicH,
+                  const int32_t kiMbX, const int32_t kiMbY, const int32_t kiMBWidth, const int32_t kiMBHeight) {
   if (kiMbX == 0 && kiMbY == 0) {
     MBPadTopLeftLuma_c (pDst, kiStride);
   } else if (kiMbY == 0 && kiMbX == kiMBWidth - 1) {
@@ -244,8 +244,8 @@
   }
 }
 
-void PadMBChroma_c (uint8_t*& pDst, const int32_t& kiStride, const int32_t& kiPicW, const int32_t& kiPicH,
-                    const int32_t& kiMbX, const int32_t& kiMbY, const int32_t& kiMBWidth, const int32_t& kiMBHeight) {
+void PadMBChroma_c (uint8_t* pDst, const int32_t kiStride, const int32_t kiPicW, const int32_t kiPicH,
+                    const int32_t kiMbX, const int32_t kiMbY, const int32_t kiMBWidth, const int32_t kiMBHeight) {
   if (kiMbX == 0 && kiMbY == 0) {
     MBPadTopLeftChroma_c (pDst, kiStride);
   } else if (kiMbY == 0 && kiMbX == kiMBWidth - 1) {
@@ -349,6 +349,7 @@
 }
 
 void InitExpandPictureFunc (SExpandPicFunc* pExpandPicFunc, const uint32_t kuiCPUFlag) {
+  USED(kuiCPUFlag);
   pExpandPicFunc->pfExpandLumaPicture        = ExpandPictureLuma_c;
   pExpandPicFunc->pfExpandChromaPicture[0]   = ExpandPictureChroma_c;
   pExpandPicFunc->pfExpandChromaPicture[1]   = ExpandPictureChroma_c;
--- a/codec/common/src/intra_pred_common.cpp
+++ b/codec/common/src/intra_pred_common.cpp
@@ -44,7 +44,7 @@
 #include "intra_pred_common.h"
 
 
-void WelsI16x16LumaPredV_c (uint8_t* pPred, uint8_t* pRef, const int32_t kiStride) {
+void WelsI16x16LumaPredV_c_ref (uint8_t* pPred, uint8_t* pRef, const int32_t kiStride) {
   uint8_t i = 15;
   const int8_t* kpSrc = (int8_t*)&pRef[-kiStride];
   const uint64_t kuiT1 = LD64 (kpSrc);
@@ -58,7 +58,7 @@
   } while (i-- > 0);
 }
 
-void WelsI16x16LumaPredH_c (uint8_t* pPred, uint8_t* pRef, const int32_t kiStride) {
+void WelsI16x16LumaPredH_c_ref (uint8_t* pPred, uint8_t* pRef, const int32_t kiStride) {
   int32_t iStridex15 = (kiStride << 4) - kiStride;
   int32_t iPredStride = 16;
   int32_t iPredStridex15 = 240; //(iPredStride<<4)-iPredStride;
--- a/codec/common/src/mc.cpp
+++ b/codec/common/src/mc.cpp
@@ -45,8 +45,6 @@
 #include "macros.h"
 #include "asmdefs_mmi.h"
 
-namespace {
-
 typedef void (*PMcChromaWidthExtFunc) (const uint8_t* pSrc, int32_t iSrcStride, uint8_t* pDst, int32_t iDstStride,
                                        const uint8_t* kpABCD, int32_t iHeight);
 typedef void (*PWelsSampleWidthAveragingFunc) (uint8_t*, int32_t, const uint8_t*, int32_t, const uint8_t*,
@@ -4195,9 +4193,10 @@
   kpfFuncs[iWidth >> 4] (pDst, iDstStride, pSrcA, iSrcAStride, pSrcB, iSrcBStride, iHeight);
 }
 #endif//HAVE_MMI
-} // anon ns.
 
-void WelsCommon::InitMcFunc (SMcFunc* pMcFuncs, uint32_t uiCpuFlag) {
+void InitMcFunc (SMcFunc* pMcFuncs, uint32_t uiCpuFlag) {
+  USED(uiCpuFlag);
+
   pMcFuncs->pfLumaHalfpelHor  = McHorVer20_c;
   pMcFuncs->pfLumaHalfpelVer  = McHorVer02_c;
   pMcFuncs->pfLumaHalfpelCen  = McHorVer22_c;
--- a/codec/common/src/sad_common.cpp
+++ b/codec/common/src/sad_common.cpp
@@ -43,7 +43,7 @@
 
 int32_t WelsSampleSad4x4_c (uint8_t* pSample1, int32_t iStride1, uint8_t* pSample2, int32_t iStride2) {
   int32_t iSadSum = 0;
-  int32_t i = 0;
+  int32_t i;
   uint8_t* pSrc1 = pSample1;
   uint8_t* pSrc2 = pSample2;
   for (i = 0; i < 4; i++) {
@@ -75,7 +75,7 @@
 
 int32_t WelsSampleSad8x8_c (uint8_t* pSample1, int32_t iStride1, uint8_t* pSample2, int32_t iStride2) {
   int32_t iSadSum = 0;
-  int32_t i = 0;
+  int32_t i;
   uint8_t* pSrc1 = pSample1;
   uint8_t* pSrc2 = pSample2;
   for (i = 0; i < 8; i++) {
--- a/codec/decoder/core/inc/au_parser.h
+++ b/codec/decoder/core/inc/au_parser.h
@@ -46,8 +46,6 @@
 #include "parameter_sets.h"
 #include "decoder_context.h"
 
-namespace WelsDec {
-
 /*!
  *************************************************************************************
  * \brief   Start Code Prefix (0x 00 00 00 01) detection
@@ -192,8 +190,6 @@
  *************************************************************************************
  */
 int32_t ResetFmoList (PWelsDecoderContext pCtx);
-
-} // namespace WelsDec
 
 #endif//WELS_ACCESS_UNIT_PARSER_H__
 
--- a/codec/decoder/core/inc/bit_stream.h
+++ b/codec/decoder/core/inc/bit_stream.h
@@ -38,10 +38,6 @@
 #include "wels_common_defs.h"
 #include "golomb_common.h"
 
-using namespace WelsCommon;
-
-namespace WelsDec {
-
 /*!
  * \brief   input bits for decoder or initialize bitstream writing in encoder
  *
@@ -56,7 +52,5 @@
 int32_t InitReadBits (PBitStringAux pBitString, intX_t iEndOffset);
 
 void RBSP2EBSP (uint8_t* pDstBuf, uint8_t* pSrcBuf, const int32_t kiSize);
-
-} // namespace WelsDec
 
 #endif//WELS_BIT_STREAM_H__
--- a/codec/decoder/core/inc/cabac_decoder.h
+++ b/codec/decoder/core/inc/cabac_decoder.h
@@ -42,7 +42,6 @@
 #include "decoder_context.h"
 #include "error_code.h"
 #include "wels_common_defs.h"
-namespace WelsDec {
 static const uint8_t g_kRenormTable256[256] = {
   6, 6, 6, 6, 6, 6, 6, 6,
   5, 5, 5, 5, 5, 5, 5, 5,
@@ -87,19 +86,19 @@
 int32_t InitCabacDecEngineFromBS (PWelsCabacDecEngine pDecEngine, SBitStringAux* pBsAux);
 void RestoreCabacDecEngineToBS (PWelsCabacDecEngine pDecEngine, SBitStringAux* pBsAux);
 //3. actual decoding
-int32_t Read32BitsCabac (PWelsCabacDecEngine pDecEngine, uint32_t& uiValue, int32_t& iNumBitsRead);
-int32_t DecodeBinCabac (PWelsCabacDecEngine pDecEngine, PWelsCabacCtx pBinCtx, uint32_t& uiBit);
-int32_t DecodeBypassCabac (PWelsCabacDecEngine pDecEngine, uint32_t& uiBinVal);
-int32_t  DecodeTerminateCabac (PWelsCabacDecEngine pDecEngine, uint32_t& uiBinVal);
+int32_t Read32BitsCabac (PWelsCabacDecEngine pDecEngine, uint32_t *uiValue, int32_t *iNumBitsRead);
+int32_t DecodeBinCabac (PWelsCabacDecEngine pDecEngine, PWelsCabacCtx pBinCtx, uint32_t *uiBit);
+int32_t DecodeBypassCabac (PWelsCabacDecEngine pDecEngine, uint32_t *uiBinVal);
+int32_t  DecodeTerminateCabac (PWelsCabacDecEngine pDecEngine, uint32_t *uiBinVal);
 
 //4. unary parsing
 int32_t DecodeUnaryBinCabac (PWelsCabacDecEngine pDecEngine, PWelsCabacCtx pBinCtx, int32_t iCtxOffset,
-                             uint32_t& uiSymVal);
+                             uint32_t *uiSymVal);
 
 //5. EXGk parsing
-int32_t DecodeExpBypassCabac (PWelsCabacDecEngine pDecEngine, int32_t iCount, uint32_t& uiSymVal);
-uint32_t DecodeUEGLevelCabac (PWelsCabacDecEngine pDecEngine, PWelsCabacCtx pBinCtx, uint32_t& uiBinVal);
-int32_t DecodeUEGMvCabac (PWelsCabacDecEngine pDecEngine, PWelsCabacCtx pBinCtx, uint32_t iMaxC,  uint32_t& uiCode);
+int32_t DecodeExpBypassCabac (PWelsCabacDecEngine pDecEngine, int32_t iCount, uint32_t *uiSymVal);
+uint32_t DecodeUEGLevelCabac (PWelsCabacDecEngine pDecEngine, PWelsCabacCtx pBinCtx, uint32_t *uiBinVal);
+int32_t DecodeUEGMvCabac (PWelsCabacDecEngine pDecEngine, PWelsCabacCtx pBinCtx, uint32_t iMaxC,  uint32_t *uiCode);
 
 #define WELS_CABAC_HALF    0x01FE
 #define WELS_CABAC_QUARTER 0x0100
@@ -106,6 +105,5 @@
 #define WELS_CABAC_FALSE_RETURN(iErrorInfo) \
 if(iErrorInfo) { \
   return iErrorInfo; \
-}
 }
 #endif
--- a/codec/decoder/core/inc/deblocking.h
+++ b/codec/decoder/core/inc/deblocking.h
@@ -43,7 +43,6 @@
 
 #include "decoder_context.h"
 #include "deblocking_common.h"
-namespace WelsDec {
 
 /*!
  * \brief   deblocking module initialize
@@ -74,7 +73,7 @@
 *
 * \return  NONE
 */
-void WelsDeblockingInitFilter (PWelsDecoderContext pCtx, SDeblockingFilter& pFilter, int32_t& iFilterIdc);
+void WelsDeblockingInitFilter (PWelsDecoderContext pCtx, SDeblockingFilter *pFilter, int32_t *iFilterIdc);
 
 /*!
 * \brief   AVC MB deblocking filtering target layer
@@ -83,7 +82,7 @@
 *
 * \return  NONE
 */
-void WelsDeblockingFilterMB (PDqLayer pCurDqLayer, SDeblockingFilter& pFilter, int32_t& iFilterIdc,
+void WelsDeblockingFilterMB (PDqLayer pCurDqLayer, SDeblockingFilter *pFilter, int32_t *iFilterIdc,
                              PDeblockingFilterMbFunc pDeblockMb);
 
 /*!
@@ -99,20 +98,18 @@
 
 uint32_t DeblockingBsMarginalMBAvcbase (PDeblockingFilter  pFilter, PDqLayer pCurDqLayer, int32_t iEdge,
                                         int32_t iNeighMb, int32_t iMbXy);
-uint32_t DeblockingBSliceBsMarginalMBAvcbase (PDqLayer pCurDqLayer, int32_t iEdge, int32_t iNeighMb, int32_t iMbXy);
+uint32_t DeblockingBSliceBsMarginalMBAvcbase (PDeblockingFilter  pFilter, PDqLayer pCurDqLayer, int32_t iEdge, int32_t iNeighMb, int32_t iMbXy);
 
 int32_t DeblockingAvailableNoInterlayer (PDqLayer pCurDqLayer, int32_t iFilterIdc);
 
 void WelsDeblockingMb (PDqLayer pCurDqLayer, PDeblockingFilter  pFilter, int32_t iBoundryFlag);
 
-inline int8_t* GetPNzc (PDqLayer pCurDqLayer, int32_t iMbXy) {
+static inline int8_t* GetPNzc (PDqLayer pCurDqLayer, int32_t iMbXy) {
   if (pCurDqLayer->pDec != NULL && pCurDqLayer->pDec->pNzc != NULL) {
     return pCurDqLayer->pDec->pNzc[iMbXy];
   }
   return pCurDqLayer->pNzc[iMbXy];
 }
-
-} // namespace WelsDec
 
 #endif //WELS_DEBLOCKING_H__
 
--- a/codec/decoder/core/inc/dec_frame.h
+++ b/codec/decoder/core/inc/dec_frame.h
@@ -44,8 +44,6 @@
 #include "bit_stream.h"
 #include "fmo.h"
 
-namespace WelsDec {
-
 ///////////////////////////////////DQ Layer level///////////////////////////////////
 typedef struct TagDqLayer       SDqLayer;
 typedef SDqLayer*               PDqLayer;
@@ -148,9 +146,5 @@
   int32_t                   iMbHeight;              // MB height of this picture, equal to sSps.iMbHeight;
 
 } SGpuAvcDqLayer, *PGpuAvcDqLayer;
-
-///////////////////////////////////////////////////////////////////////
-
-} // namespace WelsDec
 
 #endif//WELS_DEC_FRAME_H__
--- a/codec/decoder/core/inc/dec_golomb.h
+++ b/codec/decoder/core/inc/dec_golomb.h
@@ -47,12 +47,12 @@
 #include "ls_defines.h"
 #include "error_code.h"
 
-namespace WelsDec {
-
 #define WELS_READ_VERIFY(uiRet) do{ \
   uint32_t uiRetTmp = (uint32_t)uiRet; \
-  if( uiRetTmp != ERR_NONE ) \
+  if( uiRetTmp != ERR_NONE ) { \
+    fprint(2, "%s: error %d ( ../codec/%s:%d )\n", #uiRet, uiRetTmp, __FILE__, __LINE__); \
     return uiRetTmp; \
+  } \
 }while(0)
 #define GET_WORD(iCurBits, pBufPtr, iLeftBits, iAllowedBytes, iReadBytes) { \
   if (iReadBytes > iAllowedBytes+1) { \
@@ -338,7 +338,5 @@
 #define MAX_MB_SIZE 36864
 // for aspect_ratio_idc
 #define EXTENDED_SAR 255
-
-} // namespace WelsDec
 
 #endif//WELS_EXPONENTIAL_GOLOMB_ENTROPY_CODING_H__
--- a/codec/decoder/core/inc/decode_mb_aux.h
+++ b/codec/decoder/core/inc/decode_mb_aux.h
@@ -36,8 +36,6 @@
 #include "typedefs.h"
 #include "macros.h"
 
-namespace WelsDec {
-
 void IdctResAddPred_c (uint8_t* pPred, const int32_t kiStride, int16_t* pRs);
 void IdctResAddPred8x8_c (uint8_t* pPred, const int32_t kiStride, int16_t* pRs);
 
@@ -72,7 +70,5 @@
 #endif//__cplusplus
 
 void GetI4LumaIChromaAddrTable (int32_t* pBlockOffset, const int32_t kiYStride, const int32_t kiUVStride);
-
-} // namespace WelsDec
 
 #endif//WELS_DECODE_MB_AUX_H__
--- a/codec/decoder/core/inc/decode_slice.h
+++ b/codec/decoder/core/inc/decode_slice.h
@@ -35,25 +35,23 @@
 
 #include "decoder_context.h"
 
-namespace WelsDec {
-
 int32_t WelsActualDecodeMbCavlcISlice (PWelsDecoderContext pCtx);
-int32_t WelsDecodeMbCavlcISlice (PWelsDecoderContext pCtx, PNalUnit pNalCur, uint32_t& uiEosFlag);
+int32_t WelsDecodeMbCavlcISlice (PWelsDecoderContext pCtx, PNalUnit pNalCur, uint32_t *uiEosFlag);
 
 int32_t WelsActualDecodeMbCavlcPSlice (PWelsDecoderContext pCtx);
-int32_t WelsDecodeMbCavlcPSlice (PWelsDecoderContext pCtx, PNalUnit pNalCur, uint32_t& uiEosFlag);
+int32_t WelsDecodeMbCavlcPSlice (PWelsDecoderContext pCtx, PNalUnit pNalCur, uint32_t *uiEosFlag);
 
 int32_t WelsActualDecodeMbCavlcBSlice (PWelsDecoderContext pCtx);
-int32_t WelsDecodeMbCavlcBSlice (PWelsDecoderContext pCtx, PNalUnit pNalCur, uint32_t& uiEosFlag);
+int32_t WelsDecodeMbCavlcBSlice (PWelsDecoderContext pCtx, PNalUnit pNalCur, uint32_t *uiEosFlag);
 
-typedef int32_t (*PWelsDecMbFunc) (PWelsDecoderContext pCtx, PNalUnit pNalCur, uint32_t& uiEosFlag);
+typedef int32_t (*PWelsDecMbFunc) (PWelsDecoderContext pCtx, PNalUnit pNalCur, uint32_t *uiEosFlag);
 
-int32_t WelsDecodeMbCabacISlice (PWelsDecoderContext pCtx, PNalUnit pNalCur, uint32_t& uiEosFlag);
-int32_t WelsDecodeMbCabacPSlice (PWelsDecoderContext pCtx, PNalUnit pNalCur, uint32_t& uiEosFlag);
-int32_t WelsDecodeMbCabacBSlice (PWelsDecoderContext pCtx, PNalUnit pNalCur, uint32_t& uiEosFlag);
-int32_t WelsDecodeMbCabacISliceBaseMode0 (PWelsDecoderContext pCtx, uint32_t& uiEosFlag);
-int32_t WelsDecodeMbCabacPSliceBaseMode0 (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t& uiEosFlag);
-int32_t WelsDecodeMbCabacBSliceBaseMode0 (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t& uiEosFlag);
+int32_t WelsDecodeMbCabacISlice (PWelsDecoderContext pCtx, PNalUnit pNalCur, uint32_t *uiEosFlag);
+int32_t WelsDecodeMbCabacPSlice (PWelsDecoderContext pCtx, PNalUnit pNalCur, uint32_t *uiEosFlag);
+int32_t WelsDecodeMbCabacBSlice (PWelsDecoderContext pCtx, PNalUnit pNalCur, uint32_t *uiEosFlag);
+int32_t WelsDecodeMbCabacISliceBaseMode0 (PWelsDecoderContext pCtx, uint32_t *uiEosFlag);
+int32_t WelsDecodeMbCabacPSliceBaseMode0 (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t *uiEosFlag);
+int32_t WelsDecodeMbCabacBSliceBaseMode0 (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t *uiEosFlag);
 
 int32_t WelsTargetSliceConstruction (PWelsDecoderContext pCtx); //construction based on slice
 
@@ -96,8 +94,6 @@
 void WelsBlockFuncInit (SBlockFunc* pFunc,  int32_t iCpu);
 void WelsBlockZero16x16_c (int16_t* block, int32_t stride);
 void WelsBlockZero8x8_c (int16_t* block, int32_t stride);
-
-} // namespace WelsDec
 
 #endif //WELS_DECODE_SLICE_H__
 
--- a/codec/decoder/core/inc/decoder.h
+++ b/codec/decoder/core/inc/decoder.h
@@ -43,8 +43,6 @@
 #include "typedefs.h"
 #include "decoder_context.h"
 
-namespace WelsDec {
-
 #ifdef __cplusplus
 extern "C" {
 #endif//__cplusplus
@@ -62,12 +60,12 @@
 /*
 * fill last decoded picture info
 */
-void WelsDecoderLastDecPicInfoDefaults (SWelsLastDecPicInfo& sLastDecPicInfo);
+void WelsDecoderLastDecPicInfoDefaults (SWelsLastDecPicInfo *sLastDecPicInfo);
 
 /*!
 * \brief   fill data fields in SPS and PPS default for decoder context
 */
-void WelsDecoderSpsPpsDefaults (SWelsDecoderSpsPpsCTX& sSpsPpsCtx);
+void WelsDecoderSpsPpsDefaults (SWelsDecoderSpsPpsCTX *sSpsPpsCtx);
 
 /*!
 * \brief   copy SpsPps from one Ctx to another ctx for threaded code
@@ -127,7 +125,7 @@
  *  request memory blocks for decoder avc part
  */
 int32_t WelsRequestMem (PWelsDecoderContext pCtx, const int32_t kiMbWidth, const int32_t kiMbHeight,
-                        bool& bReallocFlag);
+                        bool *bReallocFlag);
 
 
 /*
@@ -175,12 +173,10 @@
 void DestroyPicBuff (PWelsDecoderContext pCtx, PPicBuff* ppPicBuf, CMemoryAlign* pMa);
 //reset picture reodering buffer list
 void ResetReorderingPictureBuffers (PPictReoderingStatus pPictReoderingStatus, PPictInfo pPictInfo,
-                                    const bool& bFullReset);
+                                    const bool *bFullReset);
 
 #ifdef __cplusplus
 }
 #endif//__cplusplus
-
-} // namespace WelsDec
 
 #endif//WELS_DECODER_SYSTEM_ARCHITECTURE_H__
--- a/codec/decoder/core/inc/decoder_context.h
+++ b/codec/decoder/core/inc/decoder_context.h
@@ -58,7 +58,6 @@
 #include "memory_align.h"
 #include "wels_decoder_thread.h"
 
-namespace WelsDec {
 #define MAX_PRED_MODE_ID_I16x16  3
 #define MAX_PRED_MODE_ID_CHROMA  3
 #define MAX_PRED_MODE_ID_I4x4    8
@@ -561,8 +560,8 @@
 static inline int32_t GetPrevFrameNum (PWelsDecoderContext pCtx) {
   if (pCtx->uiDecodingTimeStamp > 0) {
     PWelsDecoderThreadCTX pThreadCtx = (PWelsDecoderThreadCTX)pCtx->pThreadCtx;
-    int32_t iThreadCount = int32_t (pThreadCtx->sThreadInfo.uiThrMaxNum);
-    int32_t  uiThrNum = int32_t (pThreadCtx->sThreadInfo.uiThrNum);
+    int32_t iThreadCount = (int32_t) pThreadCtx->sThreadInfo.uiThrMaxNum;
+    int32_t  uiThrNum = (int32_t) (pThreadCtx->sThreadInfo.uiThrNum);
     for (int32_t i = 0; i < iThreadCount; ++i) {
       int32_t id = i - uiThrNum;
       if (id != 0 && pThreadCtx[id].pCtx->uiDecodingTimeStamp == pCtx->uiDecodingTimeStamp - 1) {
@@ -579,8 +578,5 @@
 //#ifdef __cplusplus
 //}
 //#endif//__cplusplus
-
-
-} // namespace WelsDec
 
 #endif//WELS_DECODER_FRAMEWORK_H__
--- a/codec/decoder/core/inc/decoder_core.h
+++ b/codec/decoder/core/inc/decoder_core.h
@@ -47,7 +47,6 @@
 
 #include "codec_def.h"
 
-namespace WelsDec {
 /*
  * InitBsBuffer
  * Memory allocation for Bitstream Buffer
@@ -199,7 +198,6 @@
 bool CheckRefPicturesComplete (PWelsDecoderContext pCtx); // Check whether all ref pictures are complete
 
 void ForceResetParaSetStatusAndAUList (PWelsDecoderContext pCtx);
-} // namespace WelsDec
 
 #endif//WELS_DECODER_CORE_H__
 
--- a/codec/decoder/core/inc/error_code.h
+++ b/codec/decoder/core/inc/error_code.h
@@ -40,8 +40,6 @@
 #ifndef WELS_ERROR_CODE_H__
 #define WELS_ERROR_CODE_H__
 
-namespace WelsDec {
-
 typedef enum TagWelsErr {
   ERR_NONE                = 0,
   ERR_INVALID_PARAMETERS  = 1,
@@ -214,8 +212,6 @@
   ERR_INFO_PARSEONLY_ERROR,
 };
 //-----------------------------------------------------------------------------------------------------------
-
-} // namespace WelsDec
 
 #endif//WELS_ERROR_CODE_H__
 
--- a/codec/decoder/core/inc/error_concealment.h
+++ b/codec/decoder/core/inc/error_concealment.h
@@ -42,7 +42,6 @@
 #include "rec_mb.h"
 #include "decoder_context.h"
 
-namespace WelsDec {
 //Initialize error concealment
 void InitErrorCon (PWelsDecoderContext pCtx);
 //Do error concealment using frame copy method
@@ -61,8 +60,6 @@
 // ImplementErrorConceal
 // Do actual error concealment
 void ImplementErrorCon (PWelsDecoderContext pCtx);
-
-} // namespace WelsDec
 
 #endif//WELS_ERROR_CONCEALMENT_H__
 
--- a/codec/decoder/core/inc/fmo.h
+++ b/codec/decoder/core/inc/fmo.h
@@ -45,8 +45,6 @@
 #include "parameter_sets.h"
 #include "memory_align.h"
 
-namespace WelsDec {
-
 #ifndef MB_XY_T
 #define MB_XY_T int32_t
 #endif//MB_XY_T
@@ -108,7 +106,5 @@
  * \return  iNextMb - successful; -1 - failed;
  */
 MB_XY_T FmoNextMb (PFmo pFmo, const MB_XY_T kiMbXy);
-
-} // namespace WelsDec
 
 #endif//WELS_FLEXIBLE_MACROBLOCK_ORDERING_H__
--- a/codec/decoder/core/inc/get_intra_predictor.h
+++ b/codec/decoder/core/inc/get_intra_predictor.h
@@ -43,8 +43,6 @@
 
 #include "typedefs.h"
 
-namespace WelsDec {
-
 void WelsI4x4LumaPredV_c (uint8_t* pPred, const int32_t kiStride);
 void WelsI4x4LumaPredH_c (uint8_t* pPred, const int32_t kiStride);
 void WelsI4x4LumaPredDc_c (uint8_t* pPred, const int32_t kiStride);
@@ -183,8 +181,6 @@
 #if defined(__cplusplus)
 }
 #endif//__cplusplus
-
-} // namespace WelsDec
 
 #endif //WELS_GET_INTRA_PREDICTOR_H__
 
--- a/codec/decoder/core/inc/manage_dec_ref.h
+++ b/codec/decoder/core/inc/manage_dec_ref.h
@@ -45,8 +45,6 @@
 #include "typedefs.h"
 #include "decoder_context.h"
 
-namespace WelsDec {
-
 void  WelsResetRefPic (PWelsDecoderContext pCtx);
 void  WelsResetRefPicWithoutUnRef (PWelsDecoderContext pCtx);
 int32_t WelsInitRefList (PWelsDecoderContext pCtx, int32_t iPoc);
@@ -53,9 +51,7 @@
 int32_t WelsInitBSliceRefList (PWelsDecoderContext pCtx, int32_t iPoc);
 int32_t WelsReorderRefList (PWelsDecoderContext pCtx);
 int32_t WelsReorderRefList2 (PWelsDecoderContext pCtx);
-int32_t WelsMarkAsRef (PWelsDecoderContext pCtx, PPicture pLastDec = NULL);
-
-} // namespace WelsDec
+int32_t WelsMarkAsRef (PWelsDecoderContext pCtx, PPicture pLastDec);
 
 #endif//WELS_MANAGE_DEC_REF_H__
 
--- a/codec/decoder/core/inc/mb_cache.h
+++ b/codec/decoder/core/inc/mb_cache.h
@@ -36,8 +36,6 @@
 
 #include "typedefs.h"
 
-namespace WelsDec {
-
 #define REF_NOT_AVAIL    -2
 #define REF_NOT_IN_LIST  -1  //intra
 
@@ -74,7 +72,5 @@
 int8_t  iLeftCbp;
 int8_t iDummy[2]; //for align
 } SWelsNeighAvail, *PWelsNeighAvail;
-
-} // namespace WelsDec
 
 #endif//WELS_MACROBLOCK_CACHE_H__
--- a/codec/decoder/core/inc/memmgr_nal_unit.h
+++ b/codec/decoder/core/inc/memmgr_nal_unit.h
@@ -46,8 +46,6 @@
 #include "nalu.h"
 #include "memory_align.h"
 
-namespace WelsDec {
-
 int32_t MemInitNalList (PAccessUnit* ppAu, const uint32_t kuiSize, CMemoryAlign* pMa);
 
 int32_t MemFreeNalList (PAccessUnit* ppAu, CMemoryAlign* pMa);
@@ -58,8 +56,6 @@
  *  Need expand NAL Unit list if exceeding count number of available NAL Units withing an Access Unit
  */
 PNalUnit MemGetNextNal (PAccessUnit* ppAu, CMemoryAlign* pMa);
-
-} // namespace WelsDec
 
 #endif//WELS_MEMORY_MANAGER_NAL_UNIT_H__
 
--- a/codec/decoder/core/inc/mv_pred.h
+++ b/codec/decoder/core/inc/mv_pred.h
@@ -44,8 +44,6 @@
 #include "dec_frame.h"
 #include "decoder_context.h"
 
-namespace WelsDec {
-
 /*!
 * \brief     update mv and ref_index cache for current MB, only for P_16x16 (SKIP inclusive)
 * \param
@@ -98,8 +96,7 @@
 * \param
 * \param   output iMvp[] and ref
 */
-int32_t  PredMvBDirectSpatial (PWelsDecoderContext pCtx, int16_t iMvp[LIST_A][2], int8_t ref[LIST_A],
-                               SubMbType& subMbType);
+int32_t  PredMvBDirectSpatial (PWelsDecoderContext pCtx, int16_t iMvp[LIST_A][2], int8_t ref[LIST_A], SubMbType *subMbType);
 
 /*!
 * \brief   get Colocated MB for both Spatial and Temporal Direct Mode
@@ -106,13 +103,13 @@
 * \param
 * \param   output MbType and SubMbType
 */
-int32_t GetColocatedMb (PWelsDecoderContext pCtx, MbType& mbType, SubMbType& subMbType);
+int32_t GetColocatedMb (PWelsDecoderContext pCtx, MbType *mbType, SubMbType *subMbType);
 
 /*!
 * \brief   get the motion predictor for B-slice temporal direct mode 16x16
 */
 int32_t PredBDirectTemporal (PWelsDecoderContext pCtx, int16_t iMvp[LIST_A][2], int8_t ref[LIST_A],
-                             SubMbType& subMbType);
+                             SubMbType *subMbType);
 
 /*!
 * \brief   get the motion params for B-slice spatial direct mode
@@ -149,8 +146,8 @@
 * \param
 * \param   output motion vector cache and motion vector deviation cache
 */
-void FillSpatialDirect8x8Mv (PDqLayer pCurDqLayer, const int16_t& iIdx8, const int8_t& iPartCount, const int8_t& iPartW,
-                             const SubMbType& subMbType, const bool& bIsLongRef, int16_t pMvDirect[LIST_A][2], int8_t iRef[LIST_A],
+void FillSpatialDirect8x8Mv (PDqLayer pCurDqLayer, const int16_t iIdx8, const int8_t iPartCount, const int8_t iPartW,
+                             const SubMbType subMbType, const bool bIsLongRef, int16_t pMvDirect[LIST_A][2], int8_t iRef[LIST_A],
                              int16_t pMotionVector[LIST_A][30][MV_A], int16_t pMvdCache[LIST_A][30][MV_A]);
 
 /*!
@@ -158,10 +155,7 @@
 * \param
 * \param   output motion vector cache and motion vector deviation cache
 */
-void FillTemporalDirect8x8Mv (PDqLayer pCurDqLayer, const int16_t& iIdx8, const int8_t& iPartCount,
-                              const int8_t& iPartW,
-                              const SubMbType& subMbType, int8_t iRef[LIST_A], int16_t (*mvColoc)[2],
-                              int16_t pMotionVector[LIST_A][30][MV_A], int16_t pMvdCache[LIST_A][30][MV_A]);
+void FillTemporalDirect8x8Mv (PDqLayer pCurDqLayer, const int16_t iIdx8, const int8_t iPartCount, const int8_t iPartW, const SubMbType subMbType, int8_t iRef[LIST_A], int16_t (*mvColoc)[2], int16_t pMotionVector[LIST_A][30][MV_A], int16_t pMvdCache[LIST_A][30][MV_A]);
 
 /*!
 * \brief   returns ref_index in List_0 from the colocated ref_index in LIST_0.
@@ -168,8 +162,8 @@
 * \param
 *  returns ref_index in List_0 of ref picture LIST_0
 */
-int8_t MapColToList0 (PWelsDecoderContext& pCtx, const int8_t& colocRefIndexL0,
-                      const int32_t& ref0Count); //ISO/IEC 14496-10:2009(E) (8-193)
+int8_t MapColToList0 (PWelsDecoderContext pCtx, const int8_t colocRefIndexL0,
+                      const int32_t ref0Count); //ISO/IEC 14496-10:2009(E) (8-193)
 
 /*!
 * \brief     update ref_index cache for current MB, for 8x8
@@ -176,9 +170,9 @@
 * \param
 * \param
 */
-void Update8x8RefIdx (PDqLayer& pCurDqLayer, const int16_t& iPartIdx, const int32_t& listIdx, const int8_t& iRef);
+void Update8x8RefIdx (PDqLayer pCurDqLayer, const int16_t iPartIdx, const int32_t listIdx, const int8_t iRef);
 
-inline uint32_t* GetMbType (PDqLayer& pCurDqLayer) {
+static inline uint32_t* GetMbType (PDqLayer pCurDqLayer) {
   if (pCurDqLayer->pDec != NULL) {
     return pCurDqLayer->pDec->pMbType;
   } else {
@@ -185,7 +179,5 @@
     return pCurDqLayer->pMbType;
   }
 }
-
-} // namespace WelsDec
 
 #endif//WELS_MV_PRED_H__
--- a/codec/decoder/core/inc/nal_prefix.h
+++ b/codec/decoder/core/inc/nal_prefix.h
@@ -38,8 +38,6 @@
 #include "wels_common_basis.h"
 #include "slice.h"
 
-namespace WelsDec {
-
 ///////////////////////////////////NAL Unit prefix/headers///////////////////////////////////
 
 /* Prefix NAL Unix syntax, refer to Page 392 in JVT X201wcm */
@@ -50,7 +48,5 @@
   bool               bPrefixNalUnitExtFlag;
   bool               bPrefixNalCorrectFlag;
 } SPrefixNalUnit, *PPrefixNalUnit;
-
-} // namespace WelsDec
 
 #endif//WELS_NAL_UNIT_PREFIX_H__
--- a/codec/decoder/core/inc/nalu.h
+++ b/codec/decoder/core/inc/nalu.h
@@ -39,8 +39,6 @@
 #include "nal_prefix.h"
 #include "bit_stream.h"
 
-namespace WelsDec {
-
 ///////////////////////////////////NAL UNIT level///////////////////////////////////
 
 /* NAL Unit Structure */
@@ -73,7 +71,5 @@
   uint32_t                uiEndPos;
   bool                    bCompletedAuFlag;       // Indicate whether it is a completed AU
 } SAccessUnit, *PAccessUnit;
-
-} // namespace WelsDec
 
 #endif//WELS_NAL_UNIT_H__
--- a/codec/decoder/core/inc/parameter_sets.h
+++ b/codec/decoder/core/inc/parameter_sets.h
@@ -37,7 +37,6 @@
 #include "wels_const.h"
 #include "wels_common_basis.h"
 
-namespace WelsDec {
 /* VUI syntax in Sequence Parameter Set, refer to E.1 in Rec */
 typedef struct TagVui {
   bool bAspectRatioInfoPresentFlag;
@@ -211,7 +210,5 @@
   int32_t iSecondChromaQPIndexOffset; //second_chroma_qp_index_offset
 
 } SPps, *PPps;
-
-} // namespace WelsDec
 
 #endif //WELS_PARAMETER_SETS_H__
--- a/codec/decoder/core/inc/parse_mb_syn_cabac.h
+++ b/codec/decoder/core/inc/parse_mb_syn_cabac.h
@@ -41,18 +41,18 @@
 
 #include "decoder_context.h"
 #include "cabac_decoder.h"
-namespace WelsDec {
-int32_t ParseEndOfSliceCabac (PWelsDecoderContext pCtx, uint32_t& uiBinVal);
-int32_t ParseSkipFlagCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t& uiSkip);
-int32_t ParseMBTypeISliceCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t& uiBinVal);
-int32_t ParseMBTypePSliceCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t& uiBinVal);
-int32_t ParseMBTypeBSliceCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t& uiBinVal);
+
+int32_t ParseEndOfSliceCabac (PWelsDecoderContext pCtx, uint32_t *uiBinVal);
+int32_t ParseSkipFlagCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t *uiSkip);
+int32_t ParseMBTypeISliceCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t *uiBinVal);
+int32_t ParseMBTypePSliceCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t *uiBinVal);
+int32_t ParseMBTypeBSliceCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t *uiBinVal);
 int32_t ParseTransformSize8x8FlagCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail,
-                                        bool& bTransformSize8x8Flag);
-int32_t ParseSubMBTypeCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t& uiSubMbType);
-int32_t ParseBSubMBTypeCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t& uiSubMbType);
-int32_t ParseIntraPredModeLumaCabac (PWelsDecoderContext pCtx, int32_t& iBinVal);
-int32_t ParseIntraPredModeChromaCabac (PWelsDecoderContext pCtx, uint8_t uiNeighAvail, int32_t& iBinVal);
+                                        bool *bTransformSize8x8Flag);
+int32_t ParseSubMBTypeCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t *uiSubMbType);
+int32_t ParseBSubMBTypeCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t *uiSubMbType);
+int32_t ParseIntraPredModeLumaCabac (PWelsDecoderContext pCtx, int32_t *iBinVal);
+int32_t ParseIntraPredModeChromaCabac (PWelsDecoderContext pCtx, uint8_t uiNeighAvail, int32_t *iBinVal);
 int32_t ParseInterPMotionInfoCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint8_t* pNonZeroCount,
                                     int16_t pMotionVector[LIST_A][30][MV_A], int16_t pMvdCache[LIST_A][30][MV_A], int8_t pRefIndex[LIST_A][30]);
 int32_t ParseInterBMotionInfoCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint8_t* pNonZeroCount,
@@ -60,15 +60,15 @@
                                     int8_t pDirect[30]);
 int32_t ParseRefIdxCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint8_t* nzc,
                           int8_t ref_idx[LIST_A][30], int8_t direct[30],
-                          int32_t iListIdx, int32_t index, int32_t iActiveRefNum, int32_t b8mode, int8_t& iRefIdxVal);
+                          int32_t iListIdx, int32_t index, int32_t iActiveRefNum, int32_t b8mode, int8_t *iRefIdxVal);
 int32_t ParseMvdInfoCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, int8_t pRefIndex[LIST_A][30],
-                           int16_t pMvdCache[LIST_A][30][2], int32_t index, int8_t iListIdx, int8_t iMvComp, int16_t& iMvdVal);
-int32_t ParseCbpInfoCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t& uiBinVal);
-int32_t ParseDeltaQpCabac (PWelsDecoderContext pCtx, int32_t& iQpDelta);
+                           int16_t pMvdCache[LIST_A][30][2], int32_t index, int8_t iListIdx, int8_t iMvComp, int16_t *iMvdVal);
+int32_t ParseCbpInfoCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t *uiBinVal);
+int32_t ParseDeltaQpCabac (PWelsDecoderContext pCtx, int32_t *iQpDelta);
 int32_t ParseCbfInfoCabac (PWelsNeighAvail pNeighAvail, uint8_t* pNzcCache, int32_t index, int32_t iResProperty,
-                           PWelsDecoderContext pCtx, uint32_t& uiCbpBit);
+                           PWelsDecoderContext pCtx, uint32_t *uiCbpBit);
 int32_t ParseSignificantMapCabac (int32_t* pSignificantMap, int32_t iResProperty, PWelsDecoderContext pCtx,
-                                  uint32_t& uiBinVal);
+                                  uint32_t *uiBinVal);
 int32_t ParseSignificantCoeffCabac (int32_t* significant, int32_t iResProperty, PWelsDecoderContext pCtx);
 int32_t ParseResidualBlockCabac (PWelsNeighAvail pNeighAvail, uint8_t* pNonZeroCountCache, SBitStringAux* pBsAux,
                                  int32_t index, int32_t iMaxNumCoeff, const uint8_t* pScanTable, int32_t iResProperty, int16_t* sTCoeff, uint8_t uiQp,
@@ -82,8 +82,7 @@
                                const int8_t iListIdx);
 void    UpdateP8x8DirectCabac (PDqLayer pCurDqLayer, int32_t iPartIdx);
 void    UpdateP16x16DirectCabac (PDqLayer pCurDqLayer);
-void    UpdateP8x8RefCacheIdxCabac (int8_t pRefIndex[LIST_A][30], const int16_t& iPartIdx, const int32_t& listIdx,
-                                    const int8_t& iRef);
-}
+void    UpdateP8x8RefCacheIdxCabac (int8_t pRefIndex[LIST_A][30], const int16_t iPartIdx, const int32_t listIdx,
+                                    const int8_t iRef);
 //#pragma pack()
 #endif
--- a/codec/decoder/core/inc/parse_mb_syn_cavlc.h
+++ b/codec/decoder/core/inc/parse_mb_syn_cavlc.h
@@ -47,10 +47,7 @@
 #include "dec_frame.h"
 #include "slice.h"
 
-namespace WelsDec {
 
-
-
 void GetNeighborAvailMbType (PWelsNeighAvail pNeighAvail, PDqLayer pCurDqLayer);
 void WelsFillCacheNonZeroCount (PWelsNeighAvail pNeighAvail, uint8_t* pNonZeroCount, PDqLayer pCurDqLayer);
 void WelsFillCacheConstrain0IntraNxN (PWelsNeighAvail pNeighAvail, uint8_t* pNonZeroCount, int8_t* pIntraPredMode,
@@ -133,5 +130,5 @@
                         PBitStringAux pBs);
 int32_t ParseInterBInfo (PWelsDecoderContext pCtx, int16_t iMvArray[LIST_A][30][MV_A],
                          int8_t iRefIdxArray[LIST_A][30], PBitStringAux pBs);
-} // namespace WelsDec
+
 #endif//WELS_PARSE_MB_SYN_CAVLC_H__
--- a/codec/decoder/core/inc/pic_queue.h
+++ b/codec/decoder/core/inc/pic_queue.h
@@ -37,8 +37,6 @@
 
 #include "picture.h"
 
-namespace WelsDec {
-
 #define   PICTURE_RESOLUTION_ALIGNMENT      32
 
 
@@ -55,8 +53,6 @@
 PPicture PrefetchPic (PPicBuff pPicBuff);  // To get current node applicable
 PPicture PrefetchPicForThread (PPicBuff pPicBuff); // To get current node applicable in the case of threaded mode
 PPicture PrefetchLastPicForThread (PPicBuff pPicBuff,
-                                   const int32_t& iLast); // To get last node applicable in the case of threaded mode
-
-} // namespace WelsDec
+                                   const int32_t iLast); // To get last node applicable in the case of threaded mode
 
 #endif//WELS_PICTURE_QUEUE_H__
--- a/codec/decoder/core/inc/picture.h
+++ b/codec/decoder/core/inc/picture.h
@@ -39,15 +39,13 @@
 #include "wels_const_common.h"
 #include "wels_decoder_thread.h"
 
-using namespace WelsCommon;
-
-namespace WelsDec {
-
 /*
 *  Reconstructed Picture definition
 *  It is used to express reference picture, also consequent reconstruction picture for output
 */
 
+typedef struct SPicture SPicture;
+
 struct SPicture {
   /************************************payload data*********************************/
   uint8_t*        pBuffer[4];             // pointer to the first allocated byte, basical offset of buffer, dimension:
@@ -105,7 +103,5 @@
 };// "Picture" declaration is comflict with Mac system
 
 typedef struct SPicture* PPicture;
-
-} // namespace WelsDec
 
 #endif//WELS_PICTURE_H__
--- a/codec/decoder/core/inc/rec_mb.h
+++ b/codec/decoder/core/inc/rec_mb.h
@@ -47,8 +47,6 @@
 
 #include "decoder_context.h"
 
-namespace WelsDec {
-
 #define WELS_B_MB_REC_VERIFY(uiRet) do{ \
   uint32_t uiRetTmp = (uint32_t)uiRet; \
   if( uiRetTmp != ERR_NONE ) \
@@ -74,7 +72,7 @@
   int32_t iPicHeight;
 } sMCRefMember;
 
-void BaseMC (PWelsDecoderContext pCtx, sMCRefMember* pMCRefMem, const int32_t& listIdx, const int8_t& iRefIdx,
+void BaseMC (PWelsDecoderContext pCtx, sMCRefMember* pMCRefMem, const int32_t listIdx, const int8_t iRefIdx,
              int32_t iXOffset, int32_t iYOffset, SMcFunc* pMCFunc,
              int32_t iBlkWidth, int32_t iBlkHeight, int16_t iMVs[2]);
 
@@ -97,8 +95,6 @@
 int32_t GetInterPred (uint8_t* pPredY, uint8_t* pPredCb, uint8_t* pPredCr, PWelsDecoderContext pCtx);
 
 int32_t GetInterBPred (uint8_t* pPredYCbCr[3], uint8_t* pTempPredYCbCr[3], PWelsDecoderContext pCtx);
-
-} // namespace WelsDec
 
 #endif //WELS_REC_MB_H__
 
--- a/codec/decoder/core/inc/slice.h
+++ b/codec/decoder/core/inc/slice.h
@@ -40,8 +40,6 @@
 #include "picture.h"
 #include "parameter_sets.h"
 
-namespace WelsDec {
-
 /*
  *  Reference picture list reordering syntax, refer to page 64 in JVT X201wcm
  */
@@ -202,7 +200,5 @@
   int32_t         iLastDeltaQp;
   int16_t         iMvScale[LIST_A][MAX_DPB_COUNT]; //Moton vector scale For Temporal Direct Mode Type
 } SSlice, *PSlice;
-
-} // namespace WelsDec
 
 #endif//WELS_SLICE_H__
--- a/codec/decoder/core/inc/vlc_decoder.h
+++ b/codec/decoder/core/inc/vlc_decoder.h
@@ -36,8 +36,6 @@
 #include "bit_stream.h"
 #include "dec_golomb.h"
 
-namespace WelsDec {
-
 typedef struct TagVlcTable {
 const uint8_t (*kpCoeffTokenVlcTable[4][8])[2];
 const uint8_t (*kpChromaCoeffTokenVlcTable)[2];
@@ -171,7 +169,5 @@
 pVlcTable->kpTotalZerosTable[1][2] = g_kuiTotalZerosChromaTable2;
 
 }
-
-} // namespace WelsDec
 
 #endif//WELS_VLC_DECODER_H__
--- a/codec/decoder/core/inc/wels_common_basis.h
+++ b/codec/decoder/core/inc/wels_common_basis.h
@@ -39,10 +39,6 @@
 
 #include "wels_common_defs.h"
 
-using namespace WelsCommon;
-
-namespace WelsDec {
-
 /*common use table*/
 extern const uint8_t g_kuiScan8[24];
 extern const uint8_t g_kuiLumaDcZigzagScan[16];
@@ -310,8 +306,5 @@
   {18, 11}, {15, 11}, {64, 33}, {160, 99}, { 4, 3}, //10~14
   { 3,  2}, { 2,  1}                                //15~16
 };
-
-
-} // namespace WelsDec
 
 #endif//WELS_COMMON_BASIS_H__
--- a/codec/decoder/core/inc/wels_decoder_thread.h
+++ b/codec/decoder/core/inc/wels_decoder_thread.h
@@ -43,40 +43,9 @@
 
 #include "WelsThreadLib.h"
 
-#ifdef  __cplusplus
-extern "C" {
-#endif
+typedef   int       WELS_MUTEX_ATTR;
 
-#define WELS_DEC_MAX_NUM_CPU 16
-#define WELS_DEC_MAX_THREAD_STACK_SIZE   4096
-#define WELS_DEC_THREAD_COMMAND_RUN 0
-#define WELS_DEC_THREAD_COMMAND_ABORT 1
-
-#if defined(_WIN32) || defined(__CYGWIN__)
 typedef struct tagWelsDecSemphore {
-  WELS_THREAD_HANDLE h;
-} SWelsDecSemphore;
-
-typedef struct tagWelsDecEvent {
-  WELS_THREAD_HANDLE h;
-  int isSignaled;
-} SWelsDecEvent;
-
-typedef struct tagWelsDecThread {
-  WELS_THREAD_HANDLE h;
-} SWelsDecThread;
-
-#define WelsDecThreadFunc(fn,a) DWORD WINAPI fn(LPVOID a)
-#define WelsDecThreadFuncArg(a) LPWELS_THREAD_ROUTINE a
-#define WELS_DEC_THREAD_WAIT_TIMEDOUT    WAIT_TIMEOUT
-#define WELS_DEC_THREAD_WAIT_SIGNALED    WAIT_OBJECT_0
-#define WELS_DEC_THREAD_WAIT_INFINITE    INFINITE
-
-#else // NON-WINDOWS
-
-typedef   pthread_mutexattr_t       WELS_MUTEX_ATTR;
-
-typedef struct tagWelsDecSemphore {
   long max;
   long v;
   WELS_EVENT  e;
@@ -86,7 +55,7 @@
 typedef struct tagWelsDecEvent {
   int manualReset;
   int isSignaled;
-  pthread_cond_t c;
+  int c;
   WELS_MUTEX m;
 } SWelsDecEvent;
 
@@ -101,8 +70,6 @@
 #define WELS_DEC_THREAD_WAIT_SIGNALED    EINTR
 #define WELS_DEC_THREAD_WAIT_INFINITE    -1
 
-#endif//_WIN32
-
 #define WelsDecThreadReturn   WELS_THREAD_ROUTINE_RETURN(0);
 
 int32_t GetCPUCount();
@@ -162,9 +129,5 @@
 
 #define WAIT_SEMAPHORE(ph,timeout) \
   SemWait(ph,(int32_t)timeout)
-
-#ifdef  __cplusplus
-}
-#endif
 
 #endif
--- a/codec/decoder/core/src/au_parser.cpp
+++ b/codec/decoder/core/src/au_parser.cpp
@@ -48,7 +48,6 @@
 
 #define _PARSE_NALHRD_VCLHRD_PARAMS_ 1
 
-namespace WelsDec {
 /*!
  *************************************************************************************
  * \brief   Start Code Prefix (0x 00 00 00 01) detection
@@ -107,13 +106,13 @@
  */
 uint8_t* ParseNalHeader (PWelsDecoderContext pCtx, SNalUnitHeader* pNalUnitHeader, uint8_t* pSrcRbsp,
                          int32_t iSrcRbspLen, uint8_t* pSrcNal, int32_t iSrcNalLen, int32_t* pConsumedBytes) {
-  PNalUnit pCurNal = NULL;
+  PNalUnit pCurNal;
   uint8_t* pNal     = pSrcRbsp;
   int32_t iNalSize  = iSrcRbspLen;
-  PBitStringAux pBs = NULL;
+  PBitStringAux pBs;
   bool bExtensionFlag = false;
-  int32_t iErr = ERR_NONE;
-  int32_t iBitSize = 0;
+  int32_t iErr;
+  int32_t iBitSize;
   SDataBuffer* pSavedData = &pCtx->sSavedData;
   SLogContext* pLogCtx = & (pCtx->sLogCtx);
   pNalUnitHeader->eNalUnitType = NAL_UNIT_UNSPEC_0;//SHOULD init it. because pCtx->sCurNalHead is common variable.
@@ -121,7 +120,7 @@
   //remove the consecutive ZERO at the end of current NAL in the reverse order.--2011.6.1
   {
     int32_t iIndex = iSrcRbspLen - 1;
-    uint8_t uiBsZero = 0;
+    uint8_t uiBsZero;
     while (iIndex >= 0) {
       uiBsZero = pSrcRbsp[iIndex];
       if (0 == uiBsZero) {
@@ -266,7 +265,7 @@
     bExtensionFlag = true;
   case NAL_UNIT_CODED_SLICE:
   case NAL_UNIT_CODED_SLICE_IDR: {
-    PAccessUnit pCurAu = NULL;
+    PAccessUnit pCurAu;
     uint32_t uiAvailNalNum;
     pCurNal = MemGetNextNal (&pCtx->pAccessUnitList, pCtx->pMemAlign);
     if (NULL == pCurNal) {
@@ -574,11 +573,11 @@
  */
 int32_t ParseNonVclNal (PWelsDecoderContext pCtx, uint8_t* pRbsp, const int32_t kiSrcLen, uint8_t* pSrcNal,
                         const int32_t kSrcNalLen) {
-  PBitStringAux pBs = NULL;
-  EWelsNalUnitType eNalType     = NAL_UNIT_UNSPEC_0; // make initial value as unspecified
+  PBitStringAux pBs;
+  EWelsNalUnitType eNalType; // make initial value as unspecified
   int32_t iPicWidth             = 0;
   int32_t iPicHeight            = 0;
-  int32_t iBitSize              = 0;
+  int32_t iBitSize;
   int32_t iErr                  = ERR_NONE;
   if (kiSrcLen <= 0)
     return iErr;
@@ -720,7 +719,7 @@
 
 
 int32_t DecodeSpsSvcExt (PWelsDecoderContext pCtx, PSubsetSps pSpsExt, PBitStringAux pBs) {
-  PSpsSvcExt  pExt = NULL;
+  PSpsSvcExt  pExt;
   uint32_t uiCode;
   int32_t iCode;
 
@@ -832,7 +831,6 @@
   default:
     return NULL;
   }
-  return NULL;
 }
 
 bool CheckSpsActive (PWelsDecoderContext pCtx, PSps pSps, bool bUseSubsetFlag) {
@@ -912,8 +910,8 @@
                   uint8_t* pSrcNal, const int32_t kSrcNalLen) {
   PBitStringAux pBs = pBsAux;
   SSubsetSps sTempSubsetSps;
-  PSps pSps = NULL;
-  PSubsetSps pSubsetSps = NULL;
+  PSps pSps;
+  PSubsetSps pSubsetSps;
   SNalUnitHeader* pNalHead = &pCtx->sCurNalHead;
   ProfileIdc uiProfileIdc;
   uint8_t uiLevelIdc;
@@ -920,7 +918,7 @@
   int32_t iSpsId;
   uint32_t uiCode;
   int32_t iCode;
-  int32_t iRet = ERR_NONE;
+  int32_t iRet;
   bool bConstraintSetFlags[6] = { false };
   const bool kbUseSubsetFlag   = IS_SUBSET_SPS_NAL (pNalHead->eNalUnitType);
 
@@ -1185,7 +1183,7 @@
       SBitStringAux sSubsetSpsBs;
       CMemoryAlign* pMa = pCtx->pMemAlign;
 
-      uint8_t* pBsBuf = static_cast<uint8_t*> (pMa->WelsMallocz (SPS_PPS_BS_SIZE + 4,
+      uint8_t* pBsBuf = (uint8_t*) (pMa->WelsMallocz (SPS_PPS_BS_SIZE + 4,
                         "Temp buffer for parse only usage.")); //to reserve 4 bytes for UVLC writing buffer
       if (NULL == pBsBuf) {
         WelsLog (& (pCtx->sLogCtx), WELS_LOG_ERROR, "sps buffer alloc failed for parse only!");
@@ -1258,7 +1256,7 @@
 
   *pPicWidth  = pSps->iMbWidth << 4;
   *pPicHeight = pSps->iMbHeight << 4;
-  PSps pTmpSps = NULL;
+  PSps pTmpSps;
   if (kbUseSubsetFlag) {
     pTmpSps = &pCtx->sSpsPpsCtx.sSubsetSpsBuffer[iSpsId].sSps;
   } else {
@@ -1325,10 +1323,10 @@
  */
 int32_t ParsePps (PWelsDecoderContext pCtx, PPps pPpsList, PBitStringAux pBsAux, uint8_t* pSrcNal,
                   const int32_t kSrcNalLen) {
-
-  PPps pPps = NULL;
+  USED(pPpsList);
+  PPps pPps;
   SPps sTempPps;
-  uint32_t uiPpsId = 0;
+  uint32_t uiPpsId;
   uint32_t iTmp;
   uint32_t uiCode;
   int32_t iCode;
@@ -1545,7 +1543,7 @@
   WELS_READ_VERIFY (BsGetOneBit (pBsAux, &uiCode)); //timing_info_present_flag
   pVui->bTimingInfoPresentFlag = !!uiCode;
   if (pVui->bTimingInfoPresentFlag) {
-    uint32_t uiTmp = 0;
+    uint32_t uiTmp;
     WELS_READ_VERIFY (BsGetBits (pBsAux, 16, &uiCode)); //num_units_in_tick
     uiTmp = (uiCode << 16);
     WELS_READ_VERIFY (BsGetBits (pBsAux, 16, &uiCode)); //num_units_in_tick
@@ -1657,7 +1655,8 @@
  */
 int32_t ParseSei (void* pSei, PBitStringAux pBsAux) { // reserved Sei_Msg type
 
-
+  USED(pSei);
+  USED(pBsAux);
   return ERR_NONE;
 }
 /*
@@ -1783,5 +1782,3 @@
   }
   return iCountNum;
 }
-
-} // namespace WelsDec
--- a/codec/decoder/core/src/bit_stream.cpp
+++ b/codec/decoder/core/src/bit_stream.cpp
@@ -40,10 +40,8 @@
 #include "bit_stream.h"
 #include "error_code.h"
 
-namespace WelsDec {
-
 inline uint32_t GetValue4Bytes (uint8_t* pDstNal) {
-  uint32_t uiValue = 0;
+  uint32_t uiValue;
   uiValue = (pDstNal[0] << 24) | (pDstNal[1] << 16) | (pDstNal[2] << 8) | (pDstNal[3]);
   return uiValue;
 }
@@ -105,6 +103,3 @@
     *pDstPointer++ = *pSrcPointer++;
   }
 }
-
-} // namespace WelsDec
-
--- a/codec/decoder/core/src/cabac_decoder.cpp
+++ b/codec/decoder/core/src/cabac_decoder.cpp
@@ -31,7 +31,7 @@
  *      cabac_decoder.cpp:      deals with cabac state transition and related functions
  */
 #include "cabac_decoder.h"
-namespace WelsDec {
+
 static const int16_t g_kMvdBinPos2Ctx [8] = {0, 1, 2, 3, 3, 3, 3, 3};
 
 void WelsCabacGlobalInit (PWelsDecoderContext pCtx) {
@@ -41,8 +41,8 @@
         int32_t m               = g_kiCabacGlobalContextIdx[iIdx][iModel][0];
         int32_t n               = g_kiCabacGlobalContextIdx[iIdx][iModel][1];
         int32_t iPreCtxState    = WELS_CLIP3 ((((m * iQp) >> 4) + n), 1, 126);
-        uint8_t uiValMps         = 0;
-        uint8_t uiStateIdx       = 0;
+        uint8_t uiValMps;
+        uint8_t uiStateIdx;
         if (iPreCtxState <= 63) {
           uiStateIdx = 63 - iPreCtxState;
           uiValMps = 0;
@@ -59,7 +59,8 @@
 
 // ------------------- 1. context initialization
 void WelsCabacContextInit (PWelsDecoderContext  pCtx, uint8_t eSliceType, int32_t iCabacInitIdc, int32_t iQp) {
-  int32_t iIdx =  pCtx->eSliceType == WelsCommon::I_SLICE ? 0 : iCabacInitIdc + 1;
+  int32_t iIdx =  pCtx->eSliceType == I_SLICE ? 0 : iCabacInitIdc + 1;
+  (void)eSliceType;
   if (!pCtx->bCabacInited) {
     WelsCabacGlobalInit (pCtx);
   }
@@ -102,43 +103,43 @@
 }
 
 // ------------------- 3. actual decoding
-int32_t Read32BitsCabac (PWelsCabacDecEngine pDecEngine, uint32_t& uiValue, int32_t& iNumBitsRead) {
+int32_t Read32BitsCabac (PWelsCabacDecEngine pDecEngine, uint32_t *uiValue, int32_t *iNumBitsRead) {
   intX_t iLeftBytes = pDecEngine->pBuffEnd - pDecEngine->pBuffCurr;
-  iNumBitsRead = 0;
-  uiValue = 0;
+  *iNumBitsRead = 0;
+  *uiValue = 0;
   if (iLeftBytes <= 0) {
     return GENERATE_ERROR_NO (ERR_LEVEL_MB_DATA, ERR_CABAC_NO_BS_TO_READ);
   }
   switch (iLeftBytes) {
   case 3:
-    uiValue = ((pDecEngine->pBuffCurr[0]) << 16 | (pDecEngine->pBuffCurr[1]) << 8 | (pDecEngine->pBuffCurr[2]));
+    *uiValue = ((pDecEngine->pBuffCurr[0]) << 16 | (pDecEngine->pBuffCurr[1]) << 8 | (pDecEngine->pBuffCurr[2]));
     pDecEngine->pBuffCurr += 3;
-    iNumBitsRead = 24;
+    *iNumBitsRead = 24;
     break;
   case 2:
-    uiValue = ((pDecEngine->pBuffCurr[0]) << 8 | (pDecEngine->pBuffCurr[1]));
+    *uiValue = ((pDecEngine->pBuffCurr[0]) << 8 | (pDecEngine->pBuffCurr[1]));
     pDecEngine->pBuffCurr += 2;
-    iNumBitsRead = 16;
+    *iNumBitsRead = 16;
     break;
   case 1:
-    uiValue = pDecEngine->pBuffCurr[0];
+    *uiValue = pDecEngine->pBuffCurr[0];
     pDecEngine->pBuffCurr += 1;
-    iNumBitsRead = 8;
+    *iNumBitsRead = 8;
     break;
   default:
-    uiValue = ((pDecEngine->pBuffCurr[0] << 24) | (pDecEngine->pBuffCurr[1]) << 16 | (pDecEngine->pBuffCurr[2]) << 8 |
+    *uiValue = ((pDecEngine->pBuffCurr[0] << 24) | (pDecEngine->pBuffCurr[1]) << 16 | (pDecEngine->pBuffCurr[2]) << 8 |
                (pDecEngine->pBuffCurr[3]));
     pDecEngine->pBuffCurr += 4;
-    iNumBitsRead = 32;
+    *iNumBitsRead = 32;
     break;
   }
   return ERR_NONE;
 }
 
-int32_t DecodeBinCabac (PWelsCabacDecEngine pDecEngine, PWelsCabacCtx pBinCtx, uint32_t& uiBinVal) {
-  int32_t iErrorInfo = ERR_NONE;
+int32_t DecodeBinCabac (PWelsCabacDecEngine pDecEngine, PWelsCabacCtx pBinCtx, uint32_t *uiBinVal) {
+  int32_t iErrorInfo;
   uint32_t uiState = pBinCtx->uiState;
-  uiBinVal = pBinCtx->uiMPS;
+  *uiBinVal = pBinCtx->uiMPS;
   uint64_t uiOffset = pDecEngine->uiOffset;
   uint64_t uiRange = pDecEngine->uiRange;
 
@@ -147,7 +148,7 @@
   uiRange -= uiRangeLPS;
   if (uiOffset >= (uiRange << pDecEngine->iBitsLeft)) { //LPS
     uiOffset -= (uiRange << pDecEngine->iBitsLeft);
-    uiBinVal ^= 0x0001;
+    *uiBinVal ^= 0x0001;
     if (!uiState)
       pBinCtx->uiMPS ^= 0x01;
     pBinCtx->uiState = g_kuiStateTransTable[uiState][0];
@@ -171,7 +172,7 @@
   }
   uint32_t uiVal = 0;
   int32_t iNumBitsRead = 0;
-  iErrorInfo = Read32BitsCabac (pDecEngine, uiVal, iNumBitsRead);
+  iErrorInfo = Read32BitsCabac (pDecEngine, &uiVal, &iNumBitsRead);
   pDecEngine->uiOffset = (uiOffset << iNumBitsRead) | uiVal;
   pDecEngine->iBitsLeft += iNumBitsRead;
   if (iErrorInfo && pDecEngine->iBitsLeft < 0) {
@@ -180,8 +181,8 @@
   return ERR_NONE;
 }
 
-int32_t DecodeBypassCabac (PWelsCabacDecEngine pDecEngine, uint32_t& uiBinVal) {
-  int32_t iErrorInfo = ERR_NONE;
+int32_t DecodeBypassCabac (PWelsCabacDecEngine pDecEngine, uint32_t *uiBinVal) {
+  int32_t iErrorInfo;
   int32_t iBitsLeft = pDecEngine->iBitsLeft;
   uint64_t uiOffset = pDecEngine->uiOffset;
   uint64_t uiRangeValue;
@@ -190,7 +191,7 @@
   if (iBitsLeft <= 0) {
     uint32_t uiVal = 0;
     int32_t iNumBitsRead = 0;
-    iErrorInfo = Read32BitsCabac (pDecEngine, uiVal, iNumBitsRead);
+    iErrorInfo = Read32BitsCabac (pDecEngine, &uiVal, &iNumBitsRead);
     uiOffset = (uiOffset << iNumBitsRead) | uiVal;
     iBitsLeft = iNumBitsRead;
     if (iErrorInfo && iBitsLeft == 0) {
@@ -202,24 +203,24 @@
   if (uiOffset >= uiRangeValue) {
     pDecEngine->iBitsLeft = iBitsLeft;
     pDecEngine->uiOffset = uiOffset - uiRangeValue;
-    uiBinVal = 1;
+    *uiBinVal = 1;
     return ERR_NONE;
   }
   pDecEngine->iBitsLeft = iBitsLeft;
   pDecEngine->uiOffset = uiOffset;
-  uiBinVal = 0;
+  *uiBinVal = 0;
   return ERR_NONE;
 }
 
-int32_t DecodeTerminateCabac (PWelsCabacDecEngine pDecEngine, uint32_t& uiBinVal) {
+int32_t DecodeTerminateCabac (PWelsCabacDecEngine pDecEngine, uint32_t *uiBinVal) {
   int32_t iErrorInfo = ERR_NONE;
   uint64_t uiRange = pDecEngine->uiRange - 2;
   uint64_t uiOffset = pDecEngine->uiOffset;
 
   if (uiOffset >= (uiRange << pDecEngine->iBitsLeft)) {
-    uiBinVal = 1;
+    *uiBinVal = 1;
   } else {
-    uiBinVal = 0;
+    *uiBinVal = 0;
     // Renorm
     if (uiRange < WELS_CABAC_QUARTER) {
       int32_t iRenorm = g_kRenormTable256[uiRange];
@@ -228,7 +229,7 @@
       if (pDecEngine->iBitsLeft < 0) {
         uint32_t uiVal = 0;
         int32_t iNumBitsRead = 0;
-        iErrorInfo = Read32BitsCabac (pDecEngine, uiVal, iNumBitsRead);
+        iErrorInfo = Read32BitsCabac (pDecEngine, &uiVal, &iNumBitsRead);
         pDecEngine->uiOffset = (pDecEngine->uiOffset << iNumBitsRead) | uiVal;
         pDecEngine->iBitsLeft += iNumBitsRead;
       }
@@ -245,30 +246,30 @@
 }
 
 int32_t DecodeUnaryBinCabac (PWelsCabacDecEngine pDecEngine, PWelsCabacCtx pBinCtx, int32_t iCtxOffset,
-                             uint32_t& uiSymVal) {
-  uiSymVal = 0;
+                             uint32_t *uiSymVal) {
+  *uiSymVal = 0;
   WELS_READ_VERIFY (DecodeBinCabac (pDecEngine, pBinCtx, uiSymVal));
-  if (uiSymVal == 0) {
+  if (*uiSymVal == 0) {
     return ERR_NONE;
   } else {
     uint32_t uiCode;
     pBinCtx += iCtxOffset;
-    uiSymVal = 0;
+    *uiSymVal = 0;
     do {
-      WELS_READ_VERIFY (DecodeBinCabac (pDecEngine, pBinCtx, uiCode));
-      ++uiSymVal;
+      WELS_READ_VERIFY (DecodeBinCabac (pDecEngine, pBinCtx, &uiCode));
+      ++(*uiSymVal);
     } while (uiCode != 0);
     return ERR_NONE;
   }
 }
 
-int32_t DecodeExpBypassCabac (PWelsCabacDecEngine pDecEngine, int32_t iCount, uint32_t& uiSymVal) {
+int32_t DecodeExpBypassCabac (PWelsCabacDecEngine pDecEngine, int32_t iCount, uint32_t *uiSymVal) {
   uint32_t uiCode;
   int32_t iSymTmp = 0;
   int32_t iSymTmp2 = 0;
-  uiSymVal = 0;
+  *uiSymVal = 0;
   do {
-    WELS_READ_VERIFY (DecodeBypassCabac (pDecEngine, uiCode));
+    WELS_READ_VERIFY (DecodeBypassCabac (pDecEngine, &uiCode));
     if (uiCode == 1) {
       iSymTmp += (1 << iCount);
       ++iCount;
@@ -279,55 +280,54 @@
   }
 
   while (iCount--) {
-    WELS_READ_VERIFY (DecodeBypassCabac (pDecEngine, uiCode));
+    WELS_READ_VERIFY (DecodeBypassCabac (pDecEngine, &uiCode));
     if (uiCode == 1) {
       iSymTmp2 |= (1 << iCount);
     }
   }
-  uiSymVal = (uint32_t) (iSymTmp + iSymTmp2);
+  *uiSymVal = (uint32_t) (iSymTmp + iSymTmp2);
   return ERR_NONE;
 }
 
-uint32_t DecodeUEGLevelCabac (PWelsCabacDecEngine pDecEngine, PWelsCabacCtx pBinCtx, uint32_t& uiCode) {
-  uiCode = 0;
+uint32_t DecodeUEGLevelCabac (PWelsCabacDecEngine pDecEngine, PWelsCabacCtx pBinCtx, uint32_t *uiCode) {
+  *uiCode = 0;
   WELS_READ_VERIFY (DecodeBinCabac (pDecEngine, pBinCtx, uiCode));
-  if (uiCode == 0)
+  if (*uiCode == 0)
     return ERR_NONE;
   else {
     uint32_t uiTmp, uiCount = 1;
-    uiCode = 0;
+    *uiCode = 0;
     do {
-      WELS_READ_VERIFY (DecodeBinCabac (pDecEngine, pBinCtx, uiTmp));
-      ++uiCode;
+      WELS_READ_VERIFY (DecodeBinCabac (pDecEngine, pBinCtx, &uiTmp));
+      ++(*uiCode);
       ++uiCount;
     } while (uiTmp != 0 && uiCount != 13);
 
     if (uiTmp != 0) {
-      WELS_READ_VERIFY (DecodeExpBypassCabac (pDecEngine, 0, uiTmp));
-      uiCode += uiTmp + 1;
+      WELS_READ_VERIFY (DecodeExpBypassCabac (pDecEngine, 0, &uiTmp));
+      *uiCode += uiTmp + 1;
     }
     return ERR_NONE;
   }
-  return ERR_NONE;
 }
 
-int32_t DecodeUEGMvCabac (PWelsCabacDecEngine pDecEngine, PWelsCabacCtx pBinCtx, uint32_t iMaxBin,  uint32_t& uiCode) {
+int32_t DecodeUEGMvCabac (PWelsCabacDecEngine pDecEngine, PWelsCabacCtx pBinCtx, uint32_t iMaxBin,  uint32_t *uiCode) {
+  USED(iMaxBin);
   WELS_READ_VERIFY (DecodeBinCabac (pDecEngine, pBinCtx + g_kMvdBinPos2Ctx[0], uiCode));
-  if (uiCode == 0)
+  if (*uiCode == 0)
     return ERR_NONE;
   else {
     uint32_t uiTmp, uiCount = 1;
-    uiCode = 0;
+    *uiCode = 0;
     do {
-      WELS_READ_VERIFY (DecodeBinCabac (pDecEngine, pBinCtx + g_kMvdBinPos2Ctx[uiCount++], uiTmp));
-      uiCode++;
+      WELS_READ_VERIFY (DecodeBinCabac (pDecEngine, pBinCtx + g_kMvdBinPos2Ctx[uiCount++], &uiTmp));
+      (*uiCode)++;
     } while (uiTmp != 0 && uiCount != 8);
 
     if (uiTmp != 0) {
-      WELS_READ_VERIFY (DecodeExpBypassCabac (pDecEngine, 3, uiTmp));
-      uiCode += (uiTmp + 1);
+      WELS_READ_VERIFY (DecodeExpBypassCabac (pDecEngine, 3, &uiTmp));
+      *uiCode += (uiTmp + 1);
     }
     return ERR_NONE;
   }
-}
 }
--- a/codec/decoder/core/src/deblocking.cpp
+++ b/codec/decoder/core/src/deblocking.cpp
@@ -42,8 +42,6 @@
 #include "deblocking_common.h"
 #include "cpu_core.h"
 
-namespace WelsDec {
-
 #define NO_SUPPORTED_FILTER_IDX     (-1)
 #define LEFT_FLAG_BIT 0
 #define TOP_FLAG_BIT 1
@@ -672,8 +670,8 @@
   int32_t iMbY = pCurDqLayer->iMbY;
   int32_t iMbX = pCurDqLayer->iMbX;
   int32_t iMbXy = pCurDqLayer->iMbXyIndex;
-  bool bLeftFlag = false;
-  bool bTopFlag  = false;
+  bool bLeftFlag;
+  bool bTopFlag;
 
   if (2 == iFilterIdc) {
     bLeftFlag = (iMbX > 0) && (pCurDqLayer->pSliceIdc[iMbXy] == pCurDqLayer->pSliceIdc[iMbXy - 1]);
@@ -720,6 +718,7 @@
 
 
 void FilteringEdgeLumaIntraH (SDeblockingFilter* pFilter, uint8_t* pPix, int32_t iStride, uint8_t* pBS) {
+  USED(pBS);
   int32_t iIndexA;
   int32_t iAlpha;
   int32_t iBeta;
@@ -734,6 +733,7 @@
 }
 
 void FilteringEdgeLumaIntraV (SDeblockingFilter* pFilter, uint8_t* pPix, int32_t iStride, uint8_t* pBS) {
+  USED(pBS);
   int32_t iIndexA;
   int32_t iAlpha;
   int32_t iBeta;
@@ -748,6 +748,7 @@
 }
 void FilteringEdgeChromaH (SDeblockingFilter* pFilter, uint8_t* pPixCb, uint8_t* pPixCr, int32_t iStride,
                            uint8_t* pBS) {
+  USED(pBS);
   int32_t iIndexA;
   int32_t iAlpha;
   int32_t iBeta;
@@ -821,6 +822,7 @@
 
 void FilteringEdgeChromaIntraH (SDeblockingFilter* pFilter, uint8_t* pPixCb, uint8_t* pPixCr, int32_t iStride,
                                 uint8_t* pBS) {
+  USED(pBS);
   int32_t iIndexA;
   int32_t iAlpha;
   int32_t iBeta;
@@ -851,6 +853,7 @@
 
 void FilteringEdgeChromaIntraV (SDeblockingFilter* pFilter, uint8_t* pPixCb, uint8_t* pPixCr, int32_t iStride,
                                 uint8_t* pBS) {
+  USED(pBS);
   int32_t iIndexA;
   int32_t iAlpha;
   int32_t iBeta;
@@ -1221,7 +1224,7 @@
   SDeblockingFilter pFilter;
   memset (&pFilter, 0, sizeof (pFilter));
   PFmo pFmo = pCtx->pFmo;
-  int32_t iNextMbXyIndex = 0;
+  int32_t iNextMbXyIndex;
   int32_t iTotalNumMb = pCurDqLayer->sLayerInfo.sSliceInLayer.iTotalMbInCurSlice;
   int32_t iCountNumMb = 0;
   int32_t iBoundryFlag;
@@ -1285,30 +1288,30 @@
 *
 * \return  NONE
 */
-void WelsDeblockingInitFilter (PWelsDecoderContext pCtx, SDeblockingFilter& pFilter, int32_t& iFilterIdc) {
+void WelsDeblockingInitFilter (PWelsDecoderContext pCtx, SDeblockingFilter *pFilter, int32_t *iFilterIdc) {
   PDqLayer pCurDqLayer = pCtx->pCurDqLayer;
   PSliceHeaderExt pSliceHeaderExt = &pCurDqLayer->sLayerInfo.sSliceInLayer.sSliceHeaderExt;
 
-  memset (&pFilter, 0, sizeof (pFilter));
+  memset (pFilter, 0, sizeof (*pFilter));
 
-  iFilterIdc = pCurDqLayer->sLayerInfo.sSliceInLayer.sSliceHeaderExt.sSliceHeader.uiDisableDeblockingFilterIdc;
+  *iFilterIdc = pCurDqLayer->sLayerInfo.sSliceInLayer.sSliceHeaderExt.sSliceHeader.uiDisableDeblockingFilterIdc;
 
   /* Step1: parameters set */
-  pFilter.pCsData[0] = pCtx->pDec->pData[0];
-  pFilter.pCsData[1] = pCtx->pDec->pData[1];
-  pFilter.pCsData[2] = pCtx->pDec->pData[2];
+  pFilter->pCsData[0] = pCtx->pDec->pData[0];
+  pFilter->pCsData[1] = pCtx->pDec->pData[1];
+  pFilter->pCsData[2] = pCtx->pDec->pData[2];
 
-  pFilter.iCsStride[0] = pCtx->pDec->iLinesize[0];
-  pFilter.iCsStride[1] = pCtx->pDec->iLinesize[1];
+  pFilter->iCsStride[0] = pCtx->pDec->iLinesize[0];
+  pFilter->iCsStride[1] = pCtx->pDec->iLinesize[1];
 
-  pFilter.eSliceType = (EWelsSliceType)pCurDqLayer->sLayerInfo.sSliceInLayer.eSliceType;
+  pFilter->eSliceType = (EWelsSliceType)pCurDqLayer->sLayerInfo.sSliceInLayer.eSliceType;
 
-  pFilter.iSliceAlphaC0Offset = pSliceHeaderExt->sSliceHeader.iSliceAlphaC0Offset;
-  pFilter.iSliceBetaOffset = pSliceHeaderExt->sSliceHeader.iSliceBetaOffset;
+  pFilter->iSliceAlphaC0Offset = pSliceHeaderExt->sSliceHeader.iSliceAlphaC0Offset;
+  pFilter->iSliceBetaOffset = pSliceHeaderExt->sSliceHeader.iSliceBetaOffset;
 
-  pFilter.pLoopf = &pCtx->sDeblockingFunc;
-  pFilter.pRefPics[0] = pCtx->sRefPic.pRefList[0];
-  pFilter.pRefPics[1] = pCtx->sRefPic.pRefList[1];
+  pFilter->pLoopf = &pCtx->sDeblockingFunc;
+  pFilter->pRefPics[0] = pCtx->sRefPic.pRefList[0];
+  pFilter->pRefPics[1] = pCtx->sRefPic.pRefList[1];
 }
 
 /*!
@@ -1318,12 +1321,12 @@
 *
 * \return  NONE
 */
-void WelsDeblockingFilterMB (PDqLayer pCurDqLayer, SDeblockingFilter& pFilter, int32_t& iFilterIdc,
+void WelsDeblockingFilterMB (PDqLayer pCurDqLayer, SDeblockingFilter *pFilter, int32_t *iFilterIdc,
                              PDeblockingFilterMbFunc pDeblockMb) {
   /* macroblock deblocking */
-  if (0 == iFilterIdc || 2 == iFilterIdc) {
-    int32_t iBoundryFlag = DeblockingAvailableNoInterlayer (pCurDqLayer, iFilterIdc);
-    pDeblockMb (pCurDqLayer, &pFilter, iBoundryFlag);
+  if (0 == *iFilterIdc || 2 == *iFilterIdc) {
+    int32_t iBoundryFlag = DeblockingAvailableNoInterlayer (pCurDqLayer, *iFilterIdc);
+    pDeblockMb (pCurDqLayer, pFilter, iBoundryFlag);
   }
 }
 /*!
@@ -1336,6 +1339,8 @@
  */
 
 void  DeblockingInit (SDeblockingFunc*  pFunc,  int32_t iCpu) {
+  USED(iCpu);
+
   pFunc->pfLumaDeblockingLT4Ver     = DeblockLumaLt4V_c;
   pFunc->pfLumaDeblockingEQ4Ver     = DeblockLumaEq4V_c;
   pFunc->pfLumaDeblockingLT4Hor     = DeblockLumaLt4H_c;
@@ -1418,5 +1423,3 @@
   }
 #endif//HAVE_MSA
 }
-
-} // namespace WelsDec
--- a/codec/decoder/core/src/decode_mb_aux.cpp
+++ b/codec/decoder/core/src/decode_mb_aux.cpp
@@ -30,13 +30,9 @@
  *
  */
 
-#include <string.h>
-
 #include "decode_mb_aux.h"
 #include "wels_common_basis.h"
 
-namespace WelsDec {
-
 //NOTE::: p_RS should NOT be modified and it will lead to mismatch with JSVM.
 //        so should allocate kA array to store the temporary value (idct).
 void IdctResAddPred_c (uint8_t* pPred, const int32_t kiStride, int16_t* pRs) {
@@ -186,5 +182,3 @@
       pOffset[20 + i] = ((kuiA & 0x07) + (kiUVStride/*>>1*/) * (kuiA >> 3)) << 2;
   }
 }
-
-} // namespace WelsDec
--- a/codec/decoder/core/src/decode_slice.cpp
+++ b/codec/decoder/core/src/decode_slice.cpp
@@ -50,13 +50,11 @@
 
 #include "cpu_core.h"
 
-namespace WelsDec {
-
 extern void FreePicture (PPicture pPic, CMemoryAlign* pMa);
 
 extern PPicture AllocPicture (PWelsDecoderContext pCtx, const int32_t kiPicWidth, const int32_t kiPicHeight);
 
-static bool CheckRefPics (const PWelsDecoderContext& pCtx) {
+static bool CheckRefPics (const PWelsDecoderContext pCtx) {
   int32_t listCount = 1;
   if (pCtx->eSliceType == B_SLICE) {
     ++listCount;
@@ -88,7 +86,7 @@
   int32_t iCurLayerWidth  = pCurDqLayer->iMbWidth << 4;
   int32_t iCurLayerHeight = pCurDqLayer->iMbHeight << 4;
 
-  int32_t iNextMbXyIndex = 0;
+  int32_t iNextMbXyIndex;
   PFmo pFmo = pCtx->pFmo;
 
   int32_t iTotalNumMb = pCurSlice->iTotalMbInCurSlice;
@@ -451,15 +449,15 @@
   int32_t iMbXy = pCurDqLayer->iMbXyIndex;
   int32_t iFinalMode, i;
 
-  uint8_t uiNeighAvail = 0;
+  uint8_t uiNeighAvail;
   uint32_t uiCode;
   int32_t iCode;
   pCtx->pMapNxNNeighToSampleFunc (pNeighAvail, iSampleAvail);
   uiNeighAvail = (iSampleAvail[6] << 2) | (iSampleAvail[0] << 1) | (iSampleAvail[1]);
   for (i = 0; i < 16; i++) {
-    int32_t iPrevIntra4x4PredMode = 0;
+    int32_t iPrevIntra4x4PredMode;
     if (pCurDqLayer->sLayerInfo.pPps->bEntropyCodingModeFlag) {
-      WELS_READ_VERIFY (ParseIntraPredModeLumaCabac (pCtx, iCode));
+      WELS_READ_VERIFY (ParseIntraPredModeLumaCabac (pCtx, &iCode));
       iPrevIntra4x4PredMode = iCode;
     } else {
       WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode));
@@ -502,7 +500,7 @@
     return ERR_NONE;
 
   if (pCurDqLayer->sLayerInfo.pPps->bEntropyCodingModeFlag) {
-    WELS_READ_VERIFY (ParseIntraPredModeChromaCabac (pCtx, uiNeighAvail, iCode));
+    WELS_READ_VERIFY (ParseIntraPredModeChromaCabac (pCtx, uiNeighAvail, &iCode));
     if (iCode > MAX_PRED_MODE_ID_CHROMA) {
       return GENERATE_ERROR_NO (ERR_LEVEL_MB_DATA, ERR_INFO_INVALID_I_CHROMA_PRED_MODE);
     }
@@ -530,7 +528,7 @@
   int32_t iMbXy = pCurDqLayer->iMbXyIndex;
   int32_t iFinalMode, i;
 
-  uint8_t uiNeighAvail = 0;
+  uint8_t uiNeighAvail;
   uint32_t uiCode;
   int32_t iCode;
   pCtx->pMapNxNNeighToSampleFunc (pNeighAvail, iSampleAvail);
@@ -540,9 +538,9 @@
   pCurDqLayer->pIntraNxNAvailFlag[iMbXy] = uiNeighAvail;
 
   for (i = 0; i < 4; i++) {
-    int32_t iPrevIntra4x4PredMode = 0;
+    int32_t iPrevIntra4x4PredMode;
     if (pCurDqLayer->sLayerInfo.pPps->bEntropyCodingModeFlag) {
-      WELS_READ_VERIFY (ParseIntraPredModeLumaCabac (pCtx, iCode));
+      WELS_READ_VERIFY (ParseIntraPredModeLumaCabac (pCtx, &iCode));
       iPrevIntra4x4PredMode = iCode;
     } else {
       WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode));
@@ -586,7 +584,7 @@
     return ERR_NONE;
 
   if (pCurDqLayer->sLayerInfo.pPps->bEntropyCodingModeFlag) {
-    WELS_READ_VERIFY (ParseIntraPredModeChromaCabac (pCtx, uiNeighAvail, iCode));
+    WELS_READ_VERIFY (ParseIntraPredModeChromaCabac (pCtx, uiNeighAvail, &iCode));
     if (iCode > MAX_PRED_MODE_ID_CHROMA) {
       return GENERATE_ERROR_NO (ERR_LEVEL_MB_DATA, ERR_INFO_INVALID_I_CHROMA_PRED_MODE);
     }
@@ -623,7 +621,7 @@
     return ERR_NONE;
 
   if (pCurDqLayer->sLayerInfo.pPps->bEntropyCodingModeFlag) {
-    WELS_READ_VERIFY (ParseIntraPredModeChromaCabac (pCtx, uiNeighAvail, iCode));
+    WELS_READ_VERIFY (ParseIntraPredModeChromaCabac (pCtx, uiNeighAvail, &iCode));
     if (iCode > MAX_PRED_MODE_ID_CHROMA) {
       return GENERATE_ERROR_NO (ERR_LEVEL_MB_DATA, ERR_INFO_INVALID_I_CHROMA_PRED_MODE);
     }
@@ -643,7 +641,7 @@
   return ERR_NONE;
 }
 
-int32_t WelsDecodeMbCabacISliceBaseMode0 (PWelsDecoderContext pCtx, uint32_t& uiEosFlag) {
+int32_t WelsDecodeMbCabacISliceBaseMode0 (PWelsDecoderContext pCtx, uint32_t *uiEosFlag) {
   PDqLayer pCurDqLayer             = pCtx->pCurDqLayer;
   PBitStringAux pBsAux           = pCurDqLayer->pBitStringAux;
   PSlice pSlice                  = &pCurDqLayer->sLayerInfo.sSliceInLayer;
@@ -653,7 +651,7 @@
   int32_t iScanIdxEnd   = pSlice->sSliceHeaderExt.uiScanIdxEnd;
   int32_t iMbXy = pCurDqLayer->iMbXyIndex;
   int32_t i;
-  uint32_t uiMbType = 0, uiCbp = 0, uiCbpLuma = 0, uiCbpChroma = 0;
+  uint32_t uiMbType = 0, uiCbp = 0, uiCbpLuma, uiCbpChroma;
 
   ENFORCE_STACK_ALIGN_1D (uint8_t, pNonZeroCount, 48, 16);
 
@@ -663,7 +661,7 @@
   pCurDqLayer->pInterPredictionDoneFlag[iMbXy] = 0;
   pCurDqLayer->pResidualPredFlag[iMbXy] = pSlice->sSliceHeaderExt.bDefaultResidualPredFlag;
   GetNeighborAvailMbType (&sNeighAvail, pCurDqLayer);
-  WELS_READ_VERIFY (ParseMBTypeISliceCabac (pCtx, &sNeighAvail, uiMbType));
+  WELS_READ_VERIFY (ParseMBTypeISliceCabac (pCtx, &sNeighAvail, &uiMbType));
   if (uiMbType > 25) {
     return GENERATE_ERROR_NO (ERR_LEVEL_MB_DATA, ERR_INFO_INVALID_MB_TYPE);
   } else if (!pCtx->pSps->uiChromaFormatIdc && ((uiMbType >= 5 && uiMbType <= 12) || (uiMbType >= 17
@@ -674,7 +672,7 @@
     WELS_READ_VERIFY (ParseIPCMInfoCabac (pCtx));
     pSlice->iLastDeltaQp = 0;
     WELS_READ_VERIFY (ParseEndOfSliceCabac (pCtx, uiEosFlag));
-    if (uiEosFlag) {
+    if (*uiEosFlag) {
       RestoreCabacDecEngineToBS (pCtx->pCabacDecEngine, pCtx->pCurDqLayer->pBitStringAux);
     }
     return ERR_NONE;
@@ -683,7 +681,7 @@
     pCurDqLayer->pDec->pMbType[iMbXy] = MB_TYPE_INTRA4x4;
     if (pCtx->pPps->bTransform8x8ModeFlag) {
       // Transform 8x8 cabac will be added soon
-      WELS_READ_VERIFY (ParseTransformSize8x8FlagCabac (pCtx, &sNeighAvail, pCtx->pCurDqLayer->pTransformSize8x8Flag[iMbXy]));
+      WELS_READ_VERIFY (ParseTransformSize8x8FlagCabac (pCtx, &sNeighAvail, &pCtx->pCurDqLayer->pTransformSize8x8Flag[iMbXy]));
     }
     if (pCtx->pCurDqLayer->pTransformSize8x8Flag[iMbXy]) {
       uiMbType = pCurDqLayer->pDec->pMbType[iMbXy] = MB_TYPE_INTRA8x8;
@@ -694,7 +692,7 @@
       WELS_READ_VERIFY (ParseIntra4x4Mode (pCtx, &sNeighAvail, pIntraPredMode, pBsAux, pCurDqLayer));
     }
     //get uiCbp for I4x4
-    WELS_READ_VERIFY (ParseCbpInfoCabac (pCtx, &sNeighAvail, uiCbp));
+    WELS_READ_VERIFY (ParseCbpInfoCabac (pCtx, &sNeighAvail, &uiCbp));
     pCurDqLayer->pCbp[iMbXy] = uiCbp;
     pSlice->iLastDeltaQp = uiCbp == 0 ? 0 : pSlice->iLastDeltaQp;
     uiCbpChroma = pCtx->pSps->uiChromaFormatIdc ? uiCbp >> 4 : 0;
@@ -730,7 +728,7 @@
   if (pCurDqLayer->pCbp[iMbXy] || MB_TYPE_INTRA16x16 == pCurDqLayer->pDec->pMbType[iMbXy]) {
     memset (pCurDqLayer->pScaledTCoeff[iMbXy], 0, 384 * sizeof (pCurDqLayer->pScaledTCoeff[iMbXy][0]));
     int32_t iQpDelta, iId8x8, iId4x4;
-    WELS_READ_VERIFY (ParseDeltaQpCabac (pCtx, iQpDelta));
+    WELS_READ_VERIFY (ParseDeltaQpCabac (pCtx, &iQpDelta));
     if (iQpDelta > 25 || iQpDelta < -26) {//out of iQpDelta range
       return GENERATE_ERROR_NO (ERR_LEVEL_MB_DATA, ERR_INFO_INVALID_QP);
     }
@@ -844,18 +842,19 @@
   }
 
   WELS_READ_VERIFY (ParseEndOfSliceCabac (pCtx, uiEosFlag));
-  if (uiEosFlag) {
+  if (*uiEosFlag) {
     RestoreCabacDecEngineToBS (pCtx->pCabacDecEngine, pCtx->pCurDqLayer->pBitStringAux);
   }
   return ERR_NONE;
 }
 
-int32_t WelsDecodeMbCabacISlice (PWelsDecoderContext pCtx, PNalUnit pNalCur, uint32_t& uiEosFlag) {
+int32_t WelsDecodeMbCabacISlice (PWelsDecoderContext pCtx, PNalUnit pNalCur, uint32_t *uiEosFlag) {
+  USED(pNalCur);
   WELS_READ_VERIFY (WelsDecodeMbCabacISliceBaseMode0 (pCtx, uiEosFlag));
   return ERR_NONE;
 }
 
-int32_t WelsDecodeMbCabacPSliceBaseMode0 (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t& uiEosFlag) {
+int32_t WelsDecodeMbCabacPSliceBaseMode0 (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t *uiEosFlag) {
   PDqLayer pCurDqLayer             = pCtx->pCurDqLayer;
   PBitStringAux pBsAux           = pCurDqLayer->pBitStringAux;
   PSlice pSlice                  = &pCurDqLayer->sLayerInfo.sSliceInLayer;
@@ -872,7 +871,7 @@
 
   pCurDqLayer->pInterPredictionDoneFlag[iMbXy] = 0;
 
-  WELS_READ_VERIFY (ParseMBTypePSliceCabac (pCtx, pNeighAvail, uiMbType));
+  WELS_READ_VERIFY (ParseMBTypePSliceCabac (pCtx, pNeighAvail, &uiMbType));
   // uiMbType = 4 is not allowded.
   if (uiMbType < 4) { //Inter mode
     int16_t pMotionVector[LIST_A][30][MV_A];
@@ -894,7 +893,7 @@
       WELS_READ_VERIFY (ParseIPCMInfoCabac (pCtx));
       pSlice->iLastDeltaQp = 0;
       WELS_READ_VERIFY (ParseEndOfSliceCabac (pCtx, uiEosFlag));
-      if (uiEosFlag) {
+      if (*uiEosFlag) {
         RestoreCabacDecEngineToBS (pCtx->pCabacDecEngine, pCtx->pCurDqLayer->pBitStringAux);
       }
       return ERR_NONE;
@@ -903,7 +902,7 @@
         ENFORCE_STACK_ALIGN_1D (int8_t, pIntraPredMode, 48, 16);
         pCurDqLayer->pDec->pMbType[iMbXy] = MB_TYPE_INTRA4x4;
         if (pCtx->pPps->bTransform8x8ModeFlag) {
-          WELS_READ_VERIFY (ParseTransformSize8x8FlagCabac (pCtx, pNeighAvail, pCtx->pCurDqLayer->pTransformSize8x8Flag[iMbXy]));
+          WELS_READ_VERIFY (ParseTransformSize8x8FlagCabac (pCtx, pNeighAvail, &pCtx->pCurDqLayer->pTransformSize8x8Flag[iMbXy]));
         }
         if (pCtx->pCurDqLayer->pTransformSize8x8Flag[iMbXy]) {
           uiMbType = pCurDqLayer->pDec->pMbType[iMbXy] = MB_TYPE_INTRA8x8;
@@ -935,7 +934,7 @@
   ST32 (&pCurDqLayer->pNzc[iMbXy][20], 0);
 
   if (MB_TYPE_INTRA16x16 != pCurDqLayer->pDec->pMbType[iMbXy]) {
-    WELS_READ_VERIFY (ParseCbpInfoCabac (pCtx, pNeighAvail, uiCbp));
+    WELS_READ_VERIFY (ParseCbpInfoCabac (pCtx, pNeighAvail, &uiCbp));
 
     pCurDqLayer->pCbp[iMbXy] = uiCbp;
     pSlice->iLastDeltaQp = uiCbp == 0 ? 0 : pSlice->iLastDeltaQp;
@@ -957,7 +956,7 @@
 
       if (bNeedParseTransformSize8x8Flag) {
         WELS_READ_VERIFY (ParseTransformSize8x8FlagCabac (pCtx, pNeighAvail,
-                          pCtx->pCurDqLayer->pTransformSize8x8Flag[iMbXy])); //transform_size_8x8_flag
+                          &pCtx->pCurDqLayer->pTransformSize8x8Flag[iMbXy])); //transform_size_8x8_flag
       }
     }
 
@@ -965,7 +964,7 @@
 
     int32_t iQpDelta, iId8x8, iId4x4;
 
-    WELS_READ_VERIFY (ParseDeltaQpCabac (pCtx, iQpDelta));
+    WELS_READ_VERIFY (ParseDeltaQpCabac (pCtx, &iQpDelta));
     if (iQpDelta > 25 || iQpDelta < -26) { //out of iQpDelta range
       return GENERATE_ERROR_NO (ERR_LEVEL_MB_DATA, ERR_INFO_INVALID_QP);
     }
@@ -1085,7 +1084,7 @@
   }
 
   WELS_READ_VERIFY (ParseEndOfSliceCabac (pCtx, uiEosFlag));
-  if (uiEosFlag) {
+  if (*uiEosFlag) {
     RestoreCabacDecEngineToBS (pCtx->pCabacDecEngine, pCtx->pCurDqLayer->pBitStringAux);
   }
 
@@ -1092,7 +1091,7 @@
   return ERR_NONE;
 }
 
-int32_t WelsDecodeMbCabacBSliceBaseMode0 (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t& uiEosFlag) {
+int32_t WelsDecodeMbCabacBSliceBaseMode0 (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t *uiEosFlag) {
   PDqLayer pCurDqLayer = pCtx->pCurDqLayer;
   PBitStringAux pBsAux = pCurDqLayer->pBitStringAux;
   PSlice pSlice = &pCurDqLayer->sLayerInfo.sSliceInLayer;
@@ -1109,7 +1108,7 @@
 
   pCurDqLayer->pInterPredictionDoneFlag[iMbXy] = 0;
 
-  WELS_READ_VERIFY (ParseMBTypeBSliceCabac (pCtx, pNeighAvail, uiMbType));
+  WELS_READ_VERIFY (ParseMBTypeBSliceCabac (pCtx, pNeighAvail, &uiMbType));
 
   if (uiMbType < 23) { //Inter B mode
     int16_t pMotionVector[LIST_A][30][MV_A];
@@ -1134,7 +1133,7 @@
       WELS_READ_VERIFY (ParseIPCMInfoCabac (pCtx));
       pSlice->iLastDeltaQp = 0;
       WELS_READ_VERIFY (ParseEndOfSliceCabac (pCtx, uiEosFlag));
-      if (uiEosFlag) {
+      if (*uiEosFlag) {
         RestoreCabacDecEngineToBS (pCtx->pCabacDecEngine, pCtx->pCurDqLayer->pBitStringAux);
       }
       return ERR_NONE;
@@ -1143,7 +1142,7 @@
         ENFORCE_STACK_ALIGN_1D (int8_t, pIntraPredMode, 48, 16);
         pCurDqLayer->pDec->pMbType[iMbXy] = MB_TYPE_INTRA4x4;
         if (pCtx->pPps->bTransform8x8ModeFlag) {
-          WELS_READ_VERIFY (ParseTransformSize8x8FlagCabac (pCtx, pNeighAvail, pCtx->pCurDqLayer->pTransformSize8x8Flag[iMbXy]));
+          WELS_READ_VERIFY (ParseTransformSize8x8FlagCabac (pCtx, pNeighAvail, &pCtx->pCurDqLayer->pTransformSize8x8Flag[iMbXy]));
         }
         if (pCtx->pCurDqLayer->pTransformSize8x8Flag[iMbXy]) {
           uiMbType = pCurDqLayer->pDec->pMbType[iMbXy] = MB_TYPE_INTRA8x8;
@@ -1175,7 +1174,7 @@
   ST32 (&pCurDqLayer->pNzc[iMbXy][20], 0);
 
   if (MB_TYPE_INTRA16x16 != pCurDqLayer->pDec->pMbType[iMbXy]) {
-    WELS_READ_VERIFY (ParseCbpInfoCabac (pCtx, pNeighAvail, uiCbp));
+    WELS_READ_VERIFY (ParseCbpInfoCabac (pCtx, pNeighAvail, &uiCbp));
 
     pCurDqLayer->pCbp[iMbXy] = uiCbp;
     pSlice->iLastDeltaQp = uiCbp == 0 ? 0 : pSlice->iLastDeltaQp;
@@ -1198,7 +1197,7 @@
 
       if (bNeedParseTransformSize8x8Flag) {
         WELS_READ_VERIFY (ParseTransformSize8x8FlagCabac (pCtx, pNeighAvail,
-                          pCtx->pCurDqLayer->pTransformSize8x8Flag[iMbXy])); //transform_size_8x8_flag
+                          &pCtx->pCurDqLayer->pTransformSize8x8Flag[iMbXy])); //transform_size_8x8_flag
       }
     }
 
@@ -1206,7 +1205,7 @@
 
     int32_t iQpDelta, iId8x8, iId4x4;
 
-    WELS_READ_VERIFY (ParseDeltaQpCabac (pCtx, iQpDelta));
+    WELS_READ_VERIFY (ParseDeltaQpCabac (pCtx, &iQpDelta));
     if (iQpDelta > 25 || iQpDelta < -26) { //out of iQpDelta range
       return GENERATE_ERROR_NO (ERR_LEVEL_MB_DATA, ERR_INFO_INVALID_QP);
     }
@@ -1326,7 +1325,7 @@
   }
 
   WELS_READ_VERIFY (ParseEndOfSliceCabac (pCtx, uiEosFlag));
-  if (uiEosFlag) {
+  if (*uiEosFlag) {
     RestoreCabacDecEngineToBS (pCtx->pCabacDecEngine, pCtx->pCurDqLayer->pBitStringAux);
   }
 
@@ -1334,7 +1333,8 @@
 }
 
 
-int32_t WelsDecodeMbCabacPSlice (PWelsDecoderContext pCtx, PNalUnit pNalCur, uint32_t& uiEosFlag) {
+int32_t WelsDecodeMbCabacPSlice (PWelsDecoderContext pCtx, PNalUnit pNalCur, uint32_t *uiEosFlag) {
+  USED(pNalCur);
   PDqLayer pCurDqLayer             = pCtx->pCurDqLayer;
   PSlice pSlice                  = &pCurDqLayer->sLayerInfo.sSliceInLayer;
   PSliceHeader pSliceHeader      = &pSlice->sSliceHeaderExt.sSliceHeader;
@@ -1351,8 +1351,7 @@
   pCurDqLayer->pTransformSize8x8Flag[iMbXy] = false;
 
   GetNeighborAvailMbType (&uiNeighAvail, pCurDqLayer);
-  WELS_READ_VERIFY (ParseSkipFlagCabac (pCtx, &uiNeighAvail, uiCode));
-
+  WELS_READ_VERIFY (ParseSkipFlagCabac (pCtx, &uiNeighAvail, &uiCode));
   if (uiCode) {
     int16_t pMv[2] = {0};
     pCurDqLayer->pDec->pMbType[iMbXy] = MB_TYPE_SKIP;
@@ -1399,7 +1398,8 @@
 }
 
 
-int32_t WelsDecodeMbCabacBSlice (PWelsDecoderContext pCtx, PNalUnit pNalCur, uint32_t& uiEosFlag) {
+int32_t WelsDecodeMbCabacBSlice (PWelsDecoderContext pCtx, PNalUnit pNalCur, uint32_t *uiEosFlag) {
+  USED(pNalCur);
   PDqLayer pCurDqLayer = pCtx->pCurDqLayer;
   PSlice pSlice = &pCurDqLayer->sLayerInfo.sSliceInLayer;
   PSliceHeader pSliceHeader = &pSlice->sSliceHeaderExt.sSliceHeader;
@@ -1417,7 +1417,7 @@
   pCurDqLayer->pTransformSize8x8Flag[iMbXy] = false;
 
   GetNeighborAvailMbType (&uiNeighAvail, pCurDqLayer);
-  WELS_READ_VERIFY (ParseSkipFlagCabac (pCtx, &uiNeighAvail, uiCode));
+  WELS_READ_VERIFY (ParseSkipFlagCabac (pCtx, &uiNeighAvail, &uiCode));
 
   memset (pCurDqLayer->pDirect[iMbXy], 0, sizeof (int8_t) * 16);
 
@@ -1450,13 +1450,13 @@
     if (pSliceHeader->iDirectSpatialMvPredFlag) {
 
       //predict direct spatial mv
-      int32_t ret = PredMvBDirectSpatial (pCtx, pMv, ref, subMbType);
+      int32_t ret = PredMvBDirectSpatial (pCtx, pMv, ref, &subMbType);
       if (ret != ERR_NONE) {
         return ret;
       }
     } else {
       //temporal direct mode
-      int32_t ret = PredBDirectTemporal (pCtx, pMv, ref, subMbType);
+      int32_t ret = PredBDirectTemporal (pCtx, pMv, ref, &subMbType);
       if (ret != ERR_NONE) {
         return ret;
       }
@@ -1513,6 +1513,7 @@
 }
 
 int32_t WelsDecodeSlice (PWelsDecoderContext pCtx, bool bFirstSliceInLayer, PNalUnit pNalCur) {
+  USED(bFirstSliceInLayer);
   PDqLayer pCurDqLayer = pCtx->pCurDqLayer;
   PFmo pFmo = pCtx->pFmo;
   int32_t iRet;
@@ -1523,7 +1524,7 @@
   PSliceHeader pSliceHeader = &pSliceHeaderExt->sSliceHeader;
   int32_t iMbX, iMbY;
   const int32_t kiCountNumMb = pSliceHeader->pSps->uiTotalMbCount; //need to be correct when fmo or multi slice
-  uint32_t uiEosFlag = 0;
+  uint32_t uiEosFlag;
   PWelsDecMbFunc pDecMbFunc;
 
   pSlice->iTotalMbInCurSlice = 0; //initialize at the starting of slice decoding.
@@ -1535,6 +1536,7 @@
       WelsLog (& (pCtx->sLogCtx), WELS_LOG_ERROR,
                "WelsDecodeSlice()::::ILP flag exist, not supported with CABAC enabled!");
       pCtx->iErrorCode |= dsBitstreamError;
+      fprint(2, "dsBitstreamError\n");
       return dsBitstreamError;
     }
     if (P_SLICE == pSliceHeader->eSliceType)
@@ -1586,6 +1588,7 @@
   pCurDqLayer->iMbXyIndex = iNextMbXyIndex;
 
   do {
+    //fprint(2, "(-1 == %d) || (%d >= %d) → %d\n", iNextMbXyIndex, iNextMbXyIndex, kiCountNumMb, (-1 == iNextMbXyIndex) || (iNextMbXyIndex >= kiCountNumMb));
     if ((-1 == iNextMbXyIndex) || (iNextMbXyIndex >= kiCountNumMb)) { // slice group boundary or end of a frame
       break;
     }
@@ -1592,9 +1595,10 @@
 
     pCurDqLayer->pSliceIdc[iNextMbXyIndex] = iSliceIdc;
     pCtx->bMbRefConcealed = false;
-    iRet = pDecMbFunc (pCtx,  pNalCur, uiEosFlag);
+    iRet = pDecMbFunc (pCtx,  pNalCur, &uiEosFlag);
     pCurDqLayer->pMbRefConcealedFlag[iNextMbXyIndex] = pCtx->bMbRefConcealed;
     if (iRet != ERR_NONE) {
+      fprint(2, "pDecMbFunc %p %p %d\n", pDecMbFunc, WelsDecodeMbCabacPSlice, iRet);
       return iRet;
     }
 
@@ -1659,6 +1663,7 @@
       pDecMbFunc = WelsDecodeMbCavlcISlice;
     }
   }
+  USED(pDecMbFunc);
 
   if (pSliceHeader->pPps->bConstainedIntraPredFlag) {
     pCtx->pFillInfoCacheIntraNxNFunc = WelsFillCacheConstrain1IntraNxN;
@@ -1697,7 +1702,7 @@
   SDeblockingFilter pFilter;
   int32_t iFilterIdc = 1;
   if (pSliceHeader->uiDisableDeblockingFilterIdc != 1) {
-    WelsDeblockingInitFilter (pCtx, pFilter, iFilterIdc);
+    WelsDeblockingInitFilter (pCtx, &pFilter, &iFilterIdc);
   }
 
   do {
@@ -1707,7 +1712,7 @@
 
     pCurDqLayer->pSliceIdc[iNextMbXyIndex] = iSliceIdc;
     pCtx->bMbRefConcealed = false;
-    iRet = pDecMbFunc (pCtx, pNalCur, uiEosFlag);
+    iRet = pDecMbFunc (pCtx, pNalCur, &uiEosFlag);
     pCurDqLayer->pMbRefConcealedFlag[iNextMbXyIndex] = pCtx->bMbRefConcealed;
     if (iRet != ERR_NONE) {
       return iRet;
@@ -1724,7 +1729,7 @@
       pCtx->sBlockFunc.pWelsSetNonZeroCountFunc (
         pCtx->pDec->pNzc[pCurDqLayer->iMbXyIndex]); // set all none-zero nzc to 1; dbk can be opti!
     }
-    WelsDeblockingFilterMB (pCurDqLayer, pFilter, iFilterIdc, pDeblockMb);
+    WelsDeblockingFilterMB (pCurDqLayer, &pFilter, &iFilterIdc, pDeblockMb);
     if (pCtx->uiNalRefIdc > 0) {
       if (pCurDqLayer->iMbX == 0 || pCurDqLayer->iMbX == pCurDqLayer->iMbWidth - 1 || pCurDqLayer->iMbY == 0
           || pCurDqLayer->iMbY == pCurDqLayer->iMbHeight - 1) {
@@ -1799,8 +1804,8 @@
   const int32_t iMbXy = pCurDqLayer->iMbXyIndex;
   int8_t* pNzc = pCurDqLayer->pNzc[iMbXy];
   int32_t i;
-  int32_t iRet = ERR_NONE;
-  uint32_t uiMbType = 0, uiCbp = 0, uiCbpL = 0, uiCbpC = 0;
+  int32_t iRet;
+  uint32_t uiMbType, uiCbp, uiCbpL, uiCbpC;
   uint32_t uiCode;
   int32_t iCode;
 
@@ -1881,6 +1886,7 @@
       pCurDqLayer->pTransformSize8x8Flag[iMbXy] = !!uiCode;
       if (pCurDqLayer->pTransformSize8x8Flag[iMbXy]) {
         uiMbType = pCurDqLayer->pDec->pMbType[iMbXy] = MB_TYPE_INTRA8x8;
+        USED(uiMbType);
       }
     }
     if (!pCurDqLayer->pTransformSize8x8Flag[iMbXy]) {
@@ -2063,12 +2069,13 @@
   return ERR_NONE;
 }
 
-int32_t WelsDecodeMbCavlcISlice (PWelsDecoderContext pCtx, PNalUnit pNalCur, uint32_t& uiEosFlag) {
+int32_t WelsDecodeMbCavlcISlice (PWelsDecoderContext pCtx, PNalUnit pNalCur, uint32_t *uiEosFlag) {
+  USED(pNalCur);
   PDqLayer pCurDqLayer = pCtx->pCurDqLayer;
   PBitStringAux pBs = pCurDqLayer->pBitStringAux;
   PSliceHeaderExt pSliceHeaderExt = &pCurDqLayer->sLayerInfo.sSliceInLayer.sSliceHeaderExt;
   int32_t iBaseModeFlag;
-  int32_t iRet = 0; //should have the return value to indicate decoding error or not, It's NECESSARY--2010.4.15
+  int32_t iRet; //should have the return value to indicate decoding error or not, It's NECESSARY--2010.4.15
   uint32_t uiCode;
   intX_t iUsedBits;
   if (pSliceHeaderExt->bAdaptiveBaseModeFlag == 1) {
@@ -2092,7 +2099,7 @@
   iUsedBits = ((pBs->pCurBuf - pBs->pStartBuf) << 3) - (16 - pBs->iLeftBits);
   // sub 1, for stop bit
   if ((iUsedBits == (pBs->iBits - 1)) && (0 >= pCurDqLayer->sLayerInfo.sSliceInLayer.iMbSkipRun)) { // slice boundary
-    uiEosFlag = 1;
+    *uiEosFlag = 1;
   }
   if (iUsedBits > (pBs->iBits -
                    1)) { //When BS incomplete, as long as find it, SHOULD stop decoding to avoid mosaic or crash.
@@ -2120,8 +2127,8 @@
   const int32_t iMbXy = pCurDqLayer->iMbXyIndex;
   int8_t* pNzc = pCurDqLayer->pNzc[iMbXy];
   int32_t i;
-  int32_t iRet = ERR_NONE;
-  uint32_t uiMbType = 0, uiCbp = 0, uiCbpL = 0, uiCbpC = 0;
+  int32_t iRet;
+  uint32_t uiMbType, uiCbp, uiCbpL = 0, uiCbpC = 0;
   uint32_t uiCode;
   int32_t iCode;
   int32_t iMbResProperty;
@@ -2230,6 +2237,7 @@
           pCurDqLayer->pTransformSize8x8Flag[iMbXy] = !!uiCode;
           if (pCurDqLayer->pTransformSize8x8Flag[iMbXy]) {
             uiMbType = pCurDqLayer->pDec->pMbType[iMbXy] = MB_TYPE_INTRA8x8;
+            USED(uiMbType);
           }
         }
         if (!pCurDqLayer->pTransformSize8x8Flag[iMbXy]) {
@@ -2440,7 +2448,7 @@
   return ERR_NONE;
 }
 
-int32_t WelsDecodeMbCavlcPSlice (PWelsDecoderContext pCtx, PNalUnit pNalCur, uint32_t& uiEosFlag) {
+int32_t WelsDecodeMbCavlcPSlice (PWelsDecoderContext pCtx, PNalUnit pNalCur, uint32_t *uiEosFlag) {
   PDqLayer pCurDqLayer             = pCtx->pCurDqLayer;
   PBitStringAux pBs              = pCurDqLayer->pBitStringAux;
   PSlice pSlice                  = &pCurDqLayer->sLayerInfo.sSliceInLayer;
@@ -2450,7 +2458,7 @@
   const int32_t iMbXy = pCurDqLayer->iMbXyIndex;
   int8_t* pNzc = pCurDqLayer->pNzc[iMbXy];
   int32_t iBaseModeFlag, i;
-  int32_t iRet = 0; //should have the return value to indicate decoding error or not, It's NECESSARY--2010.4.15
+  int32_t iRet; //should have the return value to indicate decoding error or not, It's NECESSARY--2010.4.15
   uint32_t uiCode;
 
   pCurDqLayer->pNoSubMbPartSizeLessThan8x8Flag[iMbXy] = true;
@@ -2522,7 +2530,7 @@
   iUsedBits = ((pBs->pCurBuf - pBs->pStartBuf) << 3) - (16 - pBs->iLeftBits);
   // sub 1, for stop bit
   if ((iUsedBits == (pBs->iBits - 1)) && (0 >= pCurDqLayer->sLayerInfo.sSliceInLayer.iMbSkipRun)) { // slice boundary
-    uiEosFlag = 1;
+    *uiEosFlag = 1;
   }
   if (iUsedBits > (pBs->iBits -
                    1)) { //When BS incomplete, as long as find it, SHOULD stop decoding to avoid mosaic or crash.
@@ -2534,7 +2542,7 @@
   return ERR_NONE;
 }
 
-int32_t WelsDecodeMbCavlcBSlice (PWelsDecoderContext pCtx, PNalUnit pNalCur, uint32_t& uiEosFlag) {
+int32_t WelsDecodeMbCavlcBSlice (PWelsDecoderContext pCtx, PNalUnit pNalCur, uint32_t *uiEosFlag) {
   PDqLayer pCurDqLayer = pCtx->pCurDqLayer;
   PBitStringAux pBs = pCurDqLayer->pBitStringAux;
   PSlice pSlice = &pCurDqLayer->sLayerInfo.sSliceInLayer;
@@ -2545,7 +2553,7 @@
   const int32_t iMbXy = pCurDqLayer->iMbXyIndex;
   int8_t* pNzc = pCurDqLayer->pNzc[iMbXy];
   int32_t iBaseModeFlag, i;
-  int32_t iRet = 0; //should have the return value to indicate decoding error or not, It's NECESSARY--2010.4.15
+  int32_t iRet; //should have the return value to indicate decoding error or not, It's NECESSARY--2010.4.15
   uint32_t uiCode;
 
   pCurDqLayer->pNoSubMbPartSizeLessThan8x8Flag[iMbXy] = true;
@@ -2587,13 +2595,13 @@
     if (pSliceHeader->iDirectSpatialMvPredFlag) {
 
       //predict direct spatial mv
-      int32_t ret = PredMvBDirectSpatial (pCtx, iMv, ref, subMbType);
+      int32_t ret = PredMvBDirectSpatial (pCtx, iMv, ref, &subMbType);
       if (ret != ERR_NONE) {
         return ret;
       }
     } else {
       //temporal direct mode
-      int32_t ret = PredBDirectTemporal (pCtx, iMv, ref, subMbType);
+      int32_t ret = PredBDirectTemporal (pCtx, iMv, ref, &subMbType);
       if (ret != ERR_NONE) {
         return ret;
       }
@@ -2636,7 +2644,7 @@
   iUsedBits = ((pBs->pCurBuf - pBs->pStartBuf) << 3) - (16 - pBs->iLeftBits);
   // sub 1, for stop bit
   if ((iUsedBits == (pBs->iBits - 1)) && (0 >= pCurDqLayer->sLayerInfo.sSliceInLayer.iMbSkipRun)) { // slice boundary
-    uiEosFlag = 1;
+    *uiEosFlag = 1;
   }
   if (iUsedBits > (pBs->iBits -
                    1)) { //When BS incomplete, as long as find it, SHOULD stop decoding to avoid mosaic or crash.
@@ -2664,8 +2672,8 @@
   const int32_t iMbXy = pCurDqLayer->iMbXyIndex;
   int8_t* pNzc = pCurDqLayer->pNzc[iMbXy];
   int32_t i;
-  int32_t iRet = ERR_NONE;
-  uint32_t uiMbType = 0, uiCbp = 0, uiCbpL = 0, uiCbpC = 0;
+  int32_t iRet;
+  uint32_t uiMbType, uiCbp, uiCbpL = 0, uiCbpC = 0;
   uint32_t uiCode;
   int32_t iCode;
   int32_t iMbResProperty;
@@ -2774,6 +2782,7 @@
           pCurDqLayer->pTransformSize8x8Flag[iMbXy] = !!uiCode;
           if (pCurDqLayer->pTransformSize8x8Flag[iMbXy]) {
             uiMbType = pCurDqLayer->pDec->pMbType[iMbXy] = MB_TYPE_INTRA8x8;
+            USED(uiMbType);
           }
         }
         if (!pCurDqLayer->pTransformSize8x8Flag[iMbXy]) {
@@ -2985,6 +2994,7 @@
 }
 
 void WelsBlockFuncInit (SBlockFunc*    pFunc,  int32_t iCpu) {
+  USED(iCpu);
   pFunc->pWelsSetNonZeroCountFunc   = WelsNonZeroCount_c;
   pFunc->pWelsBlockZero16x16Func    = WelsBlockZero16x16_c;
   pFunc->pWelsBlockZero8x8Func      = WelsBlockZero8x8_c;
@@ -3061,4 +3071,3 @@
   }
   return true;
 }
-} // namespace WelsDec
--- a/codec/decoder/core/src/decoder.cpp
+++ b/codec/decoder/core/src/decoder.cpp
@@ -54,8 +54,6 @@
 #include "memory_align.h"
 #include "wels_decoder_thread.h"
 
-namespace WelsDec {
-
 extern PPicture AllocPicture (PWelsDecoderContext pCtx, const int32_t kiPicWidth, const int32_t kiPicHeight);
 
 extern void FreePicture (PPicture pPic, CMemoryAlign* pMa);
@@ -64,7 +62,7 @@
                               const int32_t kiPicWidth, const int32_t kiPicHeight) {
 
   PPicBuff pPicBuf = NULL;
-  int32_t iPicIdx = 0;
+  int32_t iPicIdx;
   if (kiSize <= 0 || kiPicWidth <= 0 || kiPicHeight <= 0) {
     return ERR_INFO_INVALID_PARAM;
   }
@@ -108,7 +106,7 @@
                                 const int32_t kiPicWidth, const int32_t kiPicHeight, const int32_t kiNewSize) {
   PPicBuff pPicOldBuf = *ppPicBuf;
   PPicBuff pPicNewBuf = NULL;
-  int32_t iPicIdx = 0;
+  int32_t iPicIdx;
   if (kiOldSize <= 0 || kiNewSize <= 0 || kiPicWidth <= 0 || kiPicHeight <= 0) {
     return ERR_INFO_INVALID_PARAM;
   }
@@ -162,7 +160,6 @@
   pPicOldBuf->iCapacity = 0;
   pPicOldBuf->iCurrentIdx = 0;
   pMa->WelsFree (pPicOldBuf, "pPicOldBuf");
-  pPicOldBuf = NULL;
   return ERR_NONE;
 }
 
@@ -170,7 +167,7 @@
                                 const int32_t kiPicWidth, const int32_t kiPicHeight, const int32_t kiNewSize) {
   PPicBuff pPicOldBuf = *ppPicBuf;
   PPicBuff pPicNewBuf = NULL;
-  int32_t iPicIdx = 0;
+  int32_t iPicIdx;
   if (kiOldSize <= 0 || kiNewSize <= 0 || kiPicWidth <= 0 || kiPicHeight <= 0) {
     return ERR_INFO_INVALID_PARAM;
   }
@@ -193,7 +190,7 @@
 
   ResetReorderingPictureBuffers (pCtx->pPictReoderingStatus, pCtx->pPictInfoList, false);
 
-  int32_t iPrevPicIdx = -1;
+  int32_t iPrevPicIdx;
   for (iPrevPicIdx = 0; iPrevPicIdx < kiOldSize; ++iPrevPicIdx) {
     if (pCtx->pLastDecPicInfo->pPreviousDecodedPictureInDpb == pPicOldBuf->ppPic[iPrevPicIdx]) {
       break;
@@ -250,13 +247,12 @@
   pPicOldBuf->iCapacity = 0;
   pPicOldBuf->iCurrentIdx = 0;
   pMa->WelsFree (pPicOldBuf, "pPicOldBuf");
-  pPicOldBuf = NULL;
 
   return ERR_NONE;
 }
 
 void DestroyPicBuff (PWelsDecoderContext pCtx, PPicBuff* ppPicBuf, CMemoryAlign* pMa) {
-  PPicBuff pPicBuf = NULL;
+  PPicBuff pPicBuf;
 
   ResetReorderingPictureBuffers (pCtx->pPictReoderingStatus, pCtx->pPictInfoList, false);
 
@@ -271,7 +267,6 @@
       if (pPic != NULL) {
         FreePicture (pPic, pMa);
       }
-      pPic = NULL;
       ++ iPicIdx;
     }
 
@@ -284,15 +279,14 @@
 
   pMa->WelsFree (pPicBuf, "pPicBuf");
 
-  pPicBuf = NULL;
   *ppPicBuf = NULL;
 }
 
 //reset picture reodering buffer list
 void ResetReorderingPictureBuffers (PPictReoderingStatus pPictReoderingStatus, PPictInfo pPictInfo,
-                                    const bool& fullReset) {
+                                    const bool *fullReset) {
   if (pPictReoderingStatus != NULL && pPictInfo != NULL) {
-    int32_t pictInfoListCount = fullReset ? 16 : (pPictReoderingStatus->iLargestBufferedPicIndex + 1);
+    int32_t pictInfoListCount = *fullReset ? 16 : (pPictReoderingStatus->iLargestBufferedPicIndex + 1);
     pPictReoderingStatus->iPictInfoIndex = 0;
     pPictReoderingStatus->iMinPOC = IMinInt32;
     pPictReoderingStatus->iNumOfPicts = 0;
@@ -367,33 +361,33 @@
 /*
 * fill data fields in SPS and PPS default for decoder context
 */
-void WelsDecoderSpsPpsDefaults (SWelsDecoderSpsPpsCTX& sSpsPpsCtx) {
-  sSpsPpsCtx.bSpsExistAheadFlag = false;
-  sSpsPpsCtx.bSubspsExistAheadFlag = false;
-  sSpsPpsCtx.bPpsExistAheadFlag = false;
-  sSpsPpsCtx.bAvcBasedFlag = true;
-  sSpsPpsCtx.iSpsErrorIgnored = 0;
-  sSpsPpsCtx.iSubSpsErrorIgnored = 0;
-  sSpsPpsCtx.iPpsErrorIgnored = 0;
-  sSpsPpsCtx.iPPSInvalidNum = 0;
-  sSpsPpsCtx.iPPSLastInvalidId = -1;
-  sSpsPpsCtx.iSPSInvalidNum = 0;
-  sSpsPpsCtx.iSPSLastInvalidId = -1;
-  sSpsPpsCtx.iSubSPSInvalidNum = 0;
-  sSpsPpsCtx.iSubSPSLastInvalidId = -1;
-  sSpsPpsCtx.iSeqId = -1;
+void WelsDecoderSpsPpsDefaults (SWelsDecoderSpsPpsCTX *sSpsPpsCtx) {
+  sSpsPpsCtx->bSpsExistAheadFlag = false;
+  sSpsPpsCtx->bSubspsExistAheadFlag = false;
+  sSpsPpsCtx->bPpsExistAheadFlag = false;
+  sSpsPpsCtx->bAvcBasedFlag = true;
+  sSpsPpsCtx->iSpsErrorIgnored = 0;
+  sSpsPpsCtx->iSubSpsErrorIgnored = 0;
+  sSpsPpsCtx->iPpsErrorIgnored = 0;
+  sSpsPpsCtx->iPPSInvalidNum = 0;
+  sSpsPpsCtx->iPPSLastInvalidId = -1;
+  sSpsPpsCtx->iSPSInvalidNum = 0;
+  sSpsPpsCtx->iSPSLastInvalidId = -1;
+  sSpsPpsCtx->iSubSPSInvalidNum = 0;
+  sSpsPpsCtx->iSubSPSLastInvalidId = -1;
+  sSpsPpsCtx->iSeqId = -1;
 }
 
 /*
 * fill last decoded picture info
 */
-void WelsDecoderLastDecPicInfoDefaults (SWelsLastDecPicInfo& sLastDecPicInfo) {
-  sLastDecPicInfo.iPrevPicOrderCntMsb = 0;
-  sLastDecPicInfo.iPrevPicOrderCntLsb = 0;
-  sLastDecPicInfo.pPreviousDecodedPictureInDpb = NULL;
-  sLastDecPicInfo.iPrevFrameNum = -1;
-  sLastDecPicInfo.bLastHasMmco5 = false;
-  sLastDecPicInfo.uiDecodingTimeStamp = 0;
+void WelsDecoderLastDecPicInfoDefaults (SWelsLastDecPicInfo *sLastDecPicInfo) {
+  sLastDecPicInfo->iPrevPicOrderCntMsb = 0;
+  sLastDecPicInfo->iPrevPicOrderCntLsb = 0;
+  sLastDecPicInfo->pPreviousDecodedPictureInDpb = NULL;
+  sLastDecPicInfo->iPrevFrameNum = -1;
+  sLastDecPicInfo->bLastHasMmco5 = false;
+  sLastDecPicInfo->uiDecodingTimeStamp = 0;
 }
 
 /*!
@@ -432,7 +426,7 @@
  *  get size of reference picture list in target layer incoming, = (iNumRefFrames
  */
 static inline int32_t GetTargetRefListSize (PWelsDecoderContext pCtx) {
-  int32_t iNumRefFrames = 0;
+  int32_t iNumRefFrames;
   // +2 for EC MV Copy buffer exchange
   if ((pCtx == NULL) || (pCtx->pSps == NULL)) {
     iNumRefFrames = MAX_REF_PIC_COUNT + 2;
@@ -458,13 +452,13 @@
  *  request memory blocks for decoder avc part
  */
 int32_t WelsRequestMem (PWelsDecoderContext pCtx, const int32_t kiMbWidth, const int32_t kiMbHeight,
-                        bool& bReallocFlag) {
+                        bool *bReallocFlag) {
   const int32_t kiPicWidth      = kiMbWidth << 4;
   const int32_t kiPicHeight     = kiMbHeight << 4;
-  int32_t iErr = ERR_NONE;
+  int32_t iErr;
 
-  int32_t iPicQueueSize         = 0;    // adaptive size of picture queue, = (pSps->iNumRefFrames x 2)
-  bReallocFlag                  = false;
+  int32_t iPicQueueSize;    // adaptive size of picture queue, = (pSps->iNumRefFrames x 2)
+  *bReallocFlag                 = false;
   bool  bNeedChangePicQueue     = true;
   CMemoryAlign* pMa = pCtx->pMemAlign;
 
@@ -537,7 +531,7 @@
     pCtx->pCabacDecEngine = (SWelsCabacDecEngine*) pMa->WelsMallocz (sizeof (SWelsCabacDecEngine), "pCtx->pCabacDecEngine");
   WELS_VERIFY_RETURN_IF (ERR_INFO_OUT_OF_MEMORY, (NULL == pCtx->pCabacDecEngine))
 
-  bReallocFlag              = true;         // memory re-allocation successfully finished
+  *bReallocFlag             = true;         // memory re-allocation successfully finished
   return ERR_NONE;
 }
 
@@ -594,7 +588,7 @@
  * \brief   Open decoder
  */
 int32_t WelsOpenDecoder (PWelsDecoderContext pCtx, SLogContext* pLogCtx) {
-  int iRet = ERR_NONE;
+  int iRet;
   // function pointers
   InitDecFuncs (pCtx, pCtx->uiCpuFlag);
 
@@ -735,21 +729,22 @@
  */
 int32_t WelsDecodeBs (PWelsDecoderContext pCtx, const uint8_t* kpBsBuf, const int32_t kiBsLen,
                       uint8_t** ppDst, SBufferInfo* pDstBufInfo, SParserBsInfo* pDstBsInfo) {
+  USED(pDstBsInfo);
   if (!pCtx->bEndOfStreamFlag) {
     SDataBuffer* pRawData   = &pCtx->sRawData;
-    SDataBuffer* pSavedData = NULL;
+    SDataBuffer* pSavedData;
 
     int32_t iSrcIdx        = 0; //the index of source bit-stream till now after parsing one or more NALs
     int32_t iSrcConsumed   = 0; // consumed bit count of source bs
     int32_t iDstIdx        = 0; //the size of current NAL after 0x03 removal and 00 00 01 removal
-    int32_t iSrcLength     = 0; //the total size of current AU or NAL
+    int32_t iSrcLength; //the total size of current AU or NAL
     int32_t iRet = 0;
     int32_t iConsumedBytes = 0;
     int32_t iOffset        = 0;
 
-    uint8_t* pSrcNal       = NULL;
-    uint8_t* pDstNal       = NULL;
-    uint8_t* pNalPayload   = NULL;
+    uint8_t* pSrcNal;
+    uint8_t* pDstNal;
+    uint8_t* pNalPayload;
 
 
     if (NULL == DetectStartCodePrefix (kpBsBuf, &iOffset,
@@ -758,7 +753,7 @@
       return dsBitstreamError;
     }
 
-    pSrcNal    = const_cast<uint8_t*> (kpBsBuf) + iOffset;
+    pSrcNal    = (uint8_t*) (kpBsBuf) + iOffset;
     iSrcLength = kiBsLen - iOffset;
 
     if ((kiBsLen + 4) > (pRawData->pEnd - pRawData->pCurPos)) {
@@ -834,7 +829,6 @@
             }
           }
           if (iRet) {
-            iRet = 0;
             if (dsNoParamSets & pCtx->iErrorCode) {
 #ifdef LONG_TERM_REF
               pCtx->bParamSetsLostFlag = true;
@@ -896,7 +890,6 @@
       return pCtx->iErrorCode;
     }
     if (iRet) {
-      iRet = 0;
       if (dsNoParamSets & pCtx->iErrorCode) {
 #ifdef LONG_TERM_REF
         pCtx->bParamSetsLostFlag = true;
@@ -942,7 +935,7 @@
  * \return  0 - successful; none 0 - something wrong
  */
 int32_t SyncPictureResolutionExt (PWelsDecoderContext pCtx, const int32_t kiMbWidth, const int32_t kiMbHeight) {
-  int32_t iErr = ERR_NONE;
+  int32_t iErr;
   const int32_t kiPicWidth    = kiMbWidth << 4;
   const int32_t kiPicHeight   = kiMbHeight << 4;
   //fix Bugzilla Bug1479656 reallocate temp dec picture
@@ -952,7 +945,7 @@
     pCtx->pTempDec = AllocPicture (pCtx, pCtx->pSps->iMbWidth << 4, pCtx->pSps->iMbHeight << 4);
   }
   bool bReallocFlag = false;
-  iErr = WelsRequestMem (pCtx, kiMbWidth, kiMbHeight, bReallocFlag); // common memory used
+  iErr = WelsRequestMem (pCtx, kiMbWidth, kiMbHeight, &bReallocFlag); // common memory used
   if (ERR_NONE != iErr) {
     WelsLog (& (pCtx->sLogCtx), WELS_LOG_ERROR,
              "SyncPictureResolutionExt()::WelsRequestMem--buffer allocated failure.");
@@ -969,7 +962,7 @@
 #if defined(MEMORY_MONITOR)
   if (bReallocFlag) {
     WelsLog (& (pCtx->sLogCtx), WELS_LOG_INFO, "SyncPictureResolutionExt(), overall memory usage: %llu bytes",
-             static_cast<unsigned long long> (sizeof (SWelsDecoderContext) + pCtx->pMemAlign->WelsGetMemoryUsage()));
+             (unsigned long long) (sizeof (SWelsDecoderContext) + pCtx->pMemAlign->WelsGetMemoryUsage()));
   }
 #endif//MEMORY_MONITOR
   return iErr;
@@ -983,23 +976,21 @@
   DeblockingInit (&pCtx->sDeblockingFunc, uiCpuFlag);
 }
 
-namespace {
 
-template<void pfIdctResAddPred (uint8_t* pPred, int32_t iStride, int16_t* pRs)>
+
 void IdctFourResAddPred_ (uint8_t* pPred, int32_t iStride, int16_t* pRs, const int8_t* pNzc) {
   if (pNzc[0] || pRs[0 * 16])
-    pfIdctResAddPred (pPred + 0 * iStride + 0, iStride, pRs + 0 * 16);
+    IdctResAddPred_c (pPred + 0 * iStride + 0, iStride, pRs + 0 * 16);
   if (pNzc[1] || pRs[1 * 16])
-    pfIdctResAddPred (pPred + 0 * iStride + 4, iStride, pRs + 1 * 16);
+    IdctResAddPred_c (pPred + 0 * iStride + 4, iStride, pRs + 1 * 16);
   if (pNzc[4] || pRs[2 * 16])
-    pfIdctResAddPred (pPred + 4 * iStride + 0, iStride, pRs + 2 * 16);
+    IdctResAddPred_c (pPred + 4 * iStride + 0, iStride, pRs + 2 * 16);
   if (pNzc[5] || pRs[3 * 16])
-    pfIdctResAddPred (pPred + 4 * iStride + 4, iStride, pRs + 3 * 16);
+    IdctResAddPred_c (pPred + 4 * iStride + 4, iStride, pRs + 3 * 16);
 }
 
-} // anon ns
-
 void InitPredFunc (PWelsDecoderContext pCtx, uint32_t uiCpuFlag) {
+  USED(uiCpuFlag);
   pCtx->pGetI16x16LumaPredFunc[I16_PRED_V     ] = WelsI16x16LumaPredV_c;
   pCtx->pGetI16x16LumaPredFunc[I16_PRED_H     ] = WelsI16x16LumaPredH_c;
   pCtx->pGetI16x16LumaPredFunc[I16_PRED_DC    ] = WelsI16x16LumaPredDc_c;
@@ -1047,7 +1038,7 @@
   pCtx->pGetIChromaPredFunc[C_PRED_DC_128] = WelsIChromaPredDcNA_c;
 
   pCtx->pIdctResAddPredFunc     = IdctResAddPred_c;
-  pCtx->pIdctFourResAddPredFunc = IdctFourResAddPred_<IdctResAddPred_c>;
+  pCtx->pIdctFourResAddPredFunc = (void*)IdctResAddPred_c;
 
   pCtx->pIdctResAddPredFunc8x8  = IdctResAddPred8x8_c;
 
@@ -1243,6 +1234,3 @@
   else if (kbOutput)
     UpdateDecStatNoFreezingInfo (pCtx);
 }
-
-
-} // namespace WelsDec
--- a/codec/decoder/core/src/decoder_core.cpp
+++ b/codec/decoder/core/src/decoder_core.cpp
@@ -43,7 +43,6 @@
 #include "memory_align.h"
 #include "error_concealment.h"
 
-namespace WelsDec {
 static inline int32_t DecodeFrameConstruction (PWelsDecoderContext pCtx, uint8_t** ppDst, SBufferInfo* pDstInfo) {
   PDqLayer pCurDq = pCtx->pCurDqLayer;
   PPicture pPic = pCtx->pDec;
@@ -90,9 +89,9 @@
     PAccessUnit pCurAu = pCtx->pAccessUnitList;
     if (dsErrorFree == pCtx->iErrorCode) { //correct decoding, add to data buffer
       SParserBsInfo* pParser = pCtx->pParserBsInfo;
-      SNalUnit* pCurNal = NULL;
+      SNalUnit* pCurNal;
       int32_t iTotalNalLen = 0;
-      int32_t iNalLen = 0;
+      int32_t iNalLen;
       int32_t iNum = 0;
       while (iNum < pParser->iNalNum) {
         iTotalNalLen += pParser->pNalLenInByte[iNum++];
@@ -100,7 +99,7 @@
       uint8_t* pDstBuf = pParser->pDstBuff + iTotalNalLen;
       int32_t iIdx = pCurAu->uiStartPos;
       int32_t iEndIdx = pCurAu->uiEndPos;
-      uint8_t* pNalBs = NULL;
+      uint8_t* pNalBs;
       pParser->uiOutBsTimeStamp = (pCurAu->pNalUnitsList [iIdx]) ? pCurAu->pNalUnitsList [iIdx]->uiTimeStamp : 0;
       //pParser->iNalNum = 0;
       pParser->iSpsWidthInPixel = (pCtx->pSps->iMbWidth << 4) - ((pCtx->pSps->sFrameCrop.iLeftOffset +
@@ -117,8 +116,8 @@
             WELS_VERIFY_RETURN_IF (ERR_INFO_OUT_OF_MEMORY, ExpandBsLenBuffer (pCtx, pParser->iNalNum + 2))
           }
           bool bSubSps = (NAL_UNIT_CODED_SLICE_EXT == pCurAu->pNalUnitsList [iIdx]->sNalHeaderExt.sNalUnitHeader.eNalUnitType);
-          SSpsBsInfo* pSpsBs = NULL;
-          SPpsBsInfo* pPpsBs = NULL;
+          SSpsBsInfo* pSpsBs;
+          SPpsBsInfo* pPpsBs;
           int32_t iSpsId = pCtx->pSps->iSpsId;
           int32_t iPpsId = pCtx->pPps->iPpsId;
           pCtx->bParamSetsLostFlag = false;
@@ -323,12 +322,12 @@
   int32_t iCode;
 
   WELS_READ_VERIFY (BsGetUe (pBs, &uiCode));
-  WELS_CHECK_SE_BOTH_ERROR_NOLOG (uiCode, 0, 7, "luma_log2_weight_denom",
+  WELS_CHECK_SE_BOTH_ERROR_NOLOG ((int)uiCode, 0, 7, "luma_log2_weight_denom",
                                   GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_INVALID_LUMA_LOG2_WEIGHT_DENOM));
   pSh->sPredWeightTable.uiLumaLog2WeightDenom = uiCode;
   if (pSh->pSps->uiChromaArrayType != 0) {
     WELS_READ_VERIFY (BsGetUe (pBs, &uiCode));
-    WELS_CHECK_SE_BOTH_ERROR_NOLOG (uiCode, 0, 7, "chroma_log2_weight_denom",
+    WELS_CHECK_SE_BOTH_ERROR_NOLOG ((int)uiCode, 0, 7, "chroma_log2_weight_denom",
                                     GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_INVALID_CHROMA_LOG2_WEIGHT_DENOM));
     pSh->sPredWeightTable.uiChromaLog2WeightDenom = uiCode;
   }
@@ -544,7 +543,7 @@
           bMmco4Exist = true;
           WELS_READ_VERIFY (BsGetUe (pBs, &uiCode)); //max_long_term_frame_idx_plus1
           int32_t iMaxLongTermFrameIdx = -1 + uiCode;
-          if (iMaxLongTermFrameIdx > int32_t (pSps->uiLog2MaxFrameNum)) {
+          if (iMaxLongTermFrameIdx > (int32_t) (pSps->uiLog2MaxFrameNum)) {
             //ISO/IEC 14496-10:2009(E) 7.4.3.3 Decoded reference picture marking semantics page 96
             return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_INVALID_REF_MARKING);
           }
@@ -609,7 +608,7 @@
   CMemoryAlign* pMa = pCtx->pMemAlign;
 
   pCtx->iMaxBsBufferSizeInByte = MIN_ACCESS_UNIT_CAPACITY * MAX_BUFFERED_NUM;
-  if ((pCtx->sRawData.pHead = static_cast<uint8_t*> (pMa->WelsMallocz (pCtx->iMaxBsBufferSizeInByte,
+  if ((pCtx->sRawData.pHead = (uint8_t*) (pMa->WelsMallocz (pCtx->iMaxBsBufferSizeInByte,
                               "pCtx->sRawData.pHead"))) == NULL) {
     return ERR_INFO_OUT_OF_MEMORY;
   }
@@ -616,12 +615,12 @@
   pCtx->sRawData.pStartPos = pCtx->sRawData.pCurPos = pCtx->sRawData.pHead;
   pCtx->sRawData.pEnd = pCtx->sRawData.pHead + pCtx->iMaxBsBufferSizeInByte;
   if (pCtx->pParam->bParseOnly) {
-    pCtx->pParserBsInfo = static_cast<SParserBsInfo*> (pMa->WelsMallocz (sizeof (SParserBsInfo), "pCtx->pParserBsInfo"));
+    pCtx->pParserBsInfo = (SParserBsInfo*) (pMa->WelsMallocz (sizeof (SParserBsInfo), "pCtx->pParserBsInfo"));
     if (pCtx->pParserBsInfo == NULL) {
       return ERR_INFO_OUT_OF_MEMORY;
     }
     memset (pCtx->pParserBsInfo, 0, sizeof (SParserBsInfo));
-    pCtx->pParserBsInfo->pDstBuff = static_cast<uint8_t*> (pMa->WelsMallocz (MAX_ACCESS_UNIT_CAPACITY * sizeof (uint8_t),
+    pCtx->pParserBsInfo->pDstBuff = (uint8_t*) (pMa->WelsMallocz (MAX_ACCESS_UNIT_CAPACITY * sizeof (uint8_t),
                                     "pCtx->pParserBsInfo->pDstBuff"));
     if (pCtx->pParserBsInfo->pDstBuff == NULL) {
       return ERR_INFO_OUT_OF_MEMORY;
@@ -628,7 +627,7 @@
     }
     memset (pCtx->pParserBsInfo->pDstBuff, 0, MAX_ACCESS_UNIT_CAPACITY * sizeof (uint8_t));
 
-    if ((pCtx->sSavedData.pHead = static_cast<uint8_t*> (pMa->WelsMallocz (pCtx->iMaxBsBufferSizeInByte,
+    if ((pCtx->sSavedData.pHead = (uint8_t*) (pMa->WelsMallocz (pCtx->iMaxBsBufferSizeInByte,
                                   "pCtx->sSavedData.pHead"))) == NULL) {
       return ERR_INFO_OUT_OF_MEMORY;
     }
@@ -636,7 +635,7 @@
     pCtx->sSavedData.pEnd = pCtx->sSavedData.pHead + pCtx->iMaxBsBufferSizeInByte;
 
     pCtx->iMaxNalNum = MAX_NAL_UNITS_IN_LAYER + 2; //2 reserved for SPS+PPS
-    pCtx->pParserBsInfo->pNalLenInByte = static_cast<int*> (pMa->WelsMallocz (pCtx->iMaxNalNum * sizeof (int),
+    pCtx->pParserBsInfo->pNalLenInByte = (int*) (pMa->WelsMallocz (pCtx->iMaxNalNum * sizeof (int),
                                          "pCtx->pParserBsInfo->pNalLenInByte"));
     if (pCtx->pParserBsInfo->pNalLenInByte == NULL) {
       return ERR_INFO_OUT_OF_MEMORY;
@@ -654,7 +653,7 @@
   CMemoryAlign* pMa = pCtx->pMemAlign;
 
   //Realloc sRawData
-  uint8_t* pNewBsBuff = static_cast<uint8_t*> (pMa->WelsMallocz (iNewBuffLen, "pCtx->sRawData.pHead"));
+  uint8_t* pNewBsBuff = (uint8_t*) (pMa->WelsMallocz (iNewBuffLen, "pCtx->sRawData.pHead"));
   if (pNewBsBuff == NULL) {
     WelsLog (& (pCtx->sLogCtx), WELS_LOG_ERROR, "ExpandBsBuffer() Failed for malloc pNewBsBuff (%d)", iNewBuffLen);
     pCtx->iErrorCode |= dsOutOfMemory;
@@ -679,7 +678,7 @@
 
   if (pCtx->pParam->bParseOnly) {
     //Realloc sSavedData
-    uint8_t* pNewSavedBsBuff = static_cast<uint8_t*> (pMa->WelsMallocz (iNewBuffLen, "pCtx->sSavedData.pHead"));
+    uint8_t* pNewSavedBsBuff = (uint8_t*) (pMa->WelsMallocz (iNewBuffLen, "pCtx->sSavedData.pHead"));
     if (pNewSavedBsBuff == NULL) {
       WelsLog (& (pCtx->sLogCtx), WELS_LOG_ERROR, "ExpandBsBuffer() Failed for malloc pNewSavedBsBuff (%d)", iNewBuffLen);
       pCtx->iErrorCode |= dsOutOfMemory;
@@ -704,7 +703,7 @@
   if (!pParser->pNalLenInByte)
     return ERR_INFO_INVALID_ACCESS;
 
-  int iNewLen = kiCurrLen;
+  int iNewLen;
   if (kiCurrLen >= MAX_MB_SIZE + 2) { //exceeds the max MB number of level 5.2
     WelsLog (& (pCtx->sLogCtx), WELS_LOG_WARNING, "Current nal num (%d) exceededs %d.", kiCurrLen, MAX_MB_SIZE);
     pCtx->iErrorCode |= dsOutOfMemory;
@@ -715,7 +714,7 @@
   }
 
   CMemoryAlign* pMa = pCtx->pMemAlign;
-  int* pNewLenBuffer = static_cast<int*> (pMa->WelsMallocz (iNewLen * sizeof (int),
+  int* pNewLenBuffer = (int*) (pMa->WelsMallocz (iNewLen * sizeof (int),
                                           "pCtx->pParserBsInfo->pNalLenInByte"));
   if (pNewLenBuffer == NULL) {
     pCtx->iErrorCode |= dsOutOfMemory;
@@ -854,7 +853,7 @@
   pDecoderStatistics->iCurrentActiveSpsId = pSps->iSpsId;
 
   pDecoderStatistics->iCurrentActivePpsId = pPps->iPpsId;
-  pDecoderStatistics->uiProfile = static_cast<unsigned int> (pSps->uiProfileIdc);
+  pDecoderStatistics->uiProfile = (unsigned int) (pSps->uiProfileIdc);
   pDecoderStatistics->uiLevel = pSps->uiLevelIdc;
 }
 
@@ -876,19 +875,19 @@
     pCtx->pAccessUnitList->pNalUnitsList[pCtx->pAccessUnitList->uiAvailUnitsNum -
                                                                                 1];
 
-  PNalUnitHeaderExt pNalHeaderExt       = NULL;
-  PSliceHeader pSliceHead               = NULL;
-  PSliceHeaderExt pSliceHeadExt         = NULL;
+  PNalUnitHeaderExt pNalHeaderExt;
+  PSliceHeader pSliceHead;
+  PSliceHeaderExt pSliceHeadExt;
   PSubsetSps pSubsetSps                 = NULL;
-  PSps pSps                             = NULL;
-  PPps pPps                             = NULL;
-  EWelsNalUnitType eNalType             = static_cast<EWelsNalUnitType> (0);
-  int32_t iPpsId                        = 0;
-  int32_t iRet                          = ERR_NONE;
-  uint8_t uiSliceType                   = 0;
+  PSps pSps;
+  PPps pPps;
+  EWelsNalUnitType eNalType;
+  int32_t iPpsId;
+  int32_t iRet;
+  uint8_t uiSliceType;
   uint8_t uiQualityId                   = BASE_QUALITY_ID;
-  bool  bIdrFlag                        = false;
-  bool  bSgChangeCycleInvolved          = false;        // involved slice group change cycle ?
+  bool  bIdrFlag;
+  bool  bSgChangeCycleInvolved;        // involved slice group change cycle ?
   uint32_t uiCode;
   int32_t iCode;
   SLogContext* pLogCtx = & (pCtx->sLogCtx);
@@ -942,7 +941,7 @@
     }
   }
 
-  pSliceHead->eSliceType = static_cast <EWelsSliceType> (uiSliceType);
+  pSliceHead->eSliceType = (EWelsSliceType) (uiSliceType);
 
   WELS_READ_VERIFY (BsGetUe (pBs, &uiCode)); //pic_parameter_set_id
   WELS_CHECK_SE_UPPER_ERROR (uiCode, (MAX_PPS_COUNT - 1), "iPpsId out of range",
@@ -1253,7 +1252,7 @@
     bSgChangeCycleInvolved = (bSgChangeCycleInvolved && (uiQualityId == BASE_QUALITY_ID));
   if (bSgChangeCycleInvolved) {
     if (pPps->uiSliceGroupChangeRate > 0) {
-      const int32_t kiNumBits = (int32_t)WELS_CEIL (log (static_cast<double> (1 + pPps->uiPicSizeInMapUnits /
+      const int32_t kiNumBits = (int32_t)WELS_CEIL (log ((double) (1 + pPps->uiPicSizeInMapUnits /
                                 pPps->uiSliceGroupChangeRate)));
       WELS_READ_VERIFY (BsGetBits (pBs, kiNumBits, &uiCode)); //lice_group_change_cycle
       pSliceHead->iSliceGroupChangeCycle = uiCode;
@@ -1392,11 +1391,11 @@
  *  ppDst:  succeeded VCL NAL based AVC (I/P Slice)
  */
 bool PrefetchNalHeaderExtSyntax (PWelsDecoderContext pCtx, PNalUnit const kppDst, PNalUnit const kpSrc) {
-  PNalUnitHeaderExt pNalHdrExtD = NULL, pNalHdrExtS = NULL;
-  PSliceHeaderExt pShExtD = NULL;
-  PPrefixNalUnit pPrefixS = NULL;
-  PSps pSps = NULL;
-  int32_t iIdx = 0;
+  PNalUnitHeaderExt pNalHdrExtD, pNalHdrExtS;
+  PSliceHeaderExt pShExtD ;
+  PPrefixNalUnit pPrefixS;
+  PSps pSps;
+  int32_t iIdx;
 
   if (kppDst == NULL || kpSrc == NULL)
     return false;
@@ -1792,7 +1791,6 @@
     }
     pMa->WelsFree (pDq, "pDq");
 
-    pDq = NULL;
     pCtx->pDqLayersList[i] = NULL;
 
     ++ i;
@@ -1880,7 +1878,7 @@
   uint8_t uiLastNuDependencyId, uiLastNuLayerDqId;
   uint8_t uiCurNuDependencyId, uiCurNuQualityId, uiCurNuLayerDqId, uiCurNuRefLayerDqId;
 
-  int32_t iCurNalUnitIdx = 0;
+  int32_t iCurNalUnitIdx;
 
   //check the continuity of pNalUnitsList forwards (from pIdxNoInterLayerPred to end_postion)
   uiLastNuDependencyId = pCurAu->pNalUnitsList[iStartIdx]->sNalHeaderExt.uiDependencyId;//starting nal unit
@@ -2020,7 +2018,7 @@
   } else { //P_SLICE
     //step 1: search uiDependencyId equal to pCtx->cur_seq_interval_target_dependency_id
     bool bGetDependId = false;
-    int32_t iIdxDependId = 0;
+    int32_t iIdxDependId;
 
     iIdxDependId = kiEndPos;
     while (iIdxDependId >= 0) {
@@ -2256,7 +2254,7 @@
 *  0 - success; otherwise returned error_no defined in error_no.h
 */
 int32_t WelsDecodeInitAccessUnitStart (PWelsDecoderContext pCtx, SBufferInfo* pDstInfo) {
-  int32_t iErr = ERR_NONE;
+  int32_t iErr;
   PAccessUnit pCurAu = pCtx->pAccessUnitList;
   pCtx->bAuReadyFlag = false;
   pCtx->pLastDecPicInfo->bLastHasMmco5 = false;
@@ -2313,7 +2311,7 @@
 *  0 - success; otherwise returned error_no defined in error_no.h
 */
 int32_t InitConstructAccessUnit (PWelsDecoderContext pCtx, SBufferInfo* pDstInfo) {
-  int32_t iErr = ERR_NONE;
+  int32_t iErr;
 
   iErr = WelsDecodeInitAccessUnitStart (pCtx, pDstInfo);
   if (ERR_NONE != iErr) {
@@ -2342,7 +2340,7 @@
  *  0 - success; otherwise returned error_no defined in error_no.h
  */
 int32_t ConstructAccessUnit (PWelsDecoderContext pCtx, uint8_t** ppDst, SBufferInfo* pDstInfo) {
-  int32_t iErr = ERR_NONE;
+  int32_t iErr;
   if (GetThreadCount (pCtx) <= 1) {
     iErr = InitConstructAccessUnit (pCtx, pDstInfo);
     if (ERR_NONE != iErr) {
@@ -2425,7 +2423,8 @@
 }
 
 int32_t InitRefPicList (PWelsDecoderContext pCtx, const uint8_t kuiNRi, int32_t iPoc) {
-  int32_t iRet = ERR_NONE;
+  USED(kuiNRi);
+  int32_t iRet;
   if (pCtx->eSliceType == B_SLICE) {
     iRet = WelsInitBSliceRefList (pCtx, iPoc);
     CreateImplicitWeightTable (pCtx);
@@ -2480,8 +2479,9 @@
  * Decode current access unit when current AU is completed.
  */
 int32_t DecodeCurrentAccessUnit (PWelsDecoderContext pCtx, uint8_t** ppDst, SBufferInfo* pDstInfo) {
-  PNalUnit pNalCur = pCtx->pNalCur = NULL;
+  PNalUnit pNalCur;
   PAccessUnit pCurAu = pCtx->pAccessUnitList;
+  pCtx->pNalCur = NULL;
 
   int32_t iIdx = pCurAu->uiStartPos;
   int32_t iEndIdx = pCurAu->uiEndPos;
@@ -2501,18 +2501,16 @@
     }
   }
   int32_t iThreadCount = GetThreadCount (pCtx);
-  int32_t iPpsId = 0;
-  int32_t iRet = ERR_NONE;
-
+  int32_t iPpsId;
+  int32_t iRet;
   bool bAllRefComplete = true; // Assume default all ref picutres are complete
 
   const uint8_t kuiTargetLayerDqId = GetTargetDqId (pCtx->uiTargetDqId, pCtx->pParam);
   const uint8_t kuiDependencyIdMax = (kuiTargetLayerDqId & 0x7F) >> 4;
   int16_t iLastIdD = -1, iLastIdQ = -1;
-  int16_t iCurrIdD = 0, iCurrIdQ = 0;
+  int16_t iCurrIdD, iCurrIdQ;
   pCtx->uiNalRefIdc = 0;
-  bool bFreshSliceAvailable =
-    true; // Another fresh slice comingup for given dq layer, for multiple slices in case of header parts of slices sometimes loss over error-prone channels, 8/14/2008
+  bool bFreshSliceAvailable; // Another fresh slice comingup for given dq layer, for multiple slices in case of header parts of slices sometimes loss over error-prone channels, 8/14/2008
 
   //update pCurDqLayer at the starting of AU decoding
   if (pCtx->bInitialDqLayersMem || pCtx->pCurDqLayer == NULL) {
@@ -2525,7 +2523,7 @@
   while (iIdx <= iEndIdx) {
     PDqLayer dq_cur = pCtx->pCurDqLayer;
     SLayerInfo pLayerInfo;
-    PSliceHeaderExt pShExt = NULL;
+    PSliceHeaderExt pShExt;
     PSliceHeader pSh = NULL;
     bool isNewFrame = true;
     if (iThreadCount > 1) {
@@ -2723,6 +2721,7 @@
             SET_EVENT (&pThreadCtx->sSliceDecodeStart);
           }
           iRet = WelsDecodeAndConstructSlice (pCtx);
+fprint(2, "WelsDecodeAndConstructSlice %d\n", iRet);
         } else {
           iRet = WelsDecodeSlice (pCtx, bFreshSliceAvailable, pNalCur);
         }
@@ -2834,7 +2833,7 @@
               ++i;
             }
           }
-          iRet = WelsMarkAsRef (pCtx);
+          iRet = WelsMarkAsRef (pCtx, NULL);
           if (iRet != ERR_NONE) {
             if (iRet == ERR_INFO_DUPLICATE_FRAME_NUM)
               pCtx->iErrorCode |= dsBitstreamError;
@@ -2997,4 +2996,3 @@
 
   return bAllRefComplete;
 }
-} // namespace WelsDec
--- a/codec/decoder/core/src/decoder_data_tables.cpp
+++ b/codec/decoder/core/src/decoder_data_tables.cpp
@@ -36,8 +36,6 @@
 #include "mb_cache.h"
 #include "vlc_decoder.h"
 
-namespace WelsDec {
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 
@@ -564,5 +562,3 @@
 const uint8_t g_kuiZeroLeftBitNumMap[16] = {
   0, 1, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3
 };
-
-} // namespace WelsDec
--- a/codec/decoder/core/src/error_concealment.cpp
+++ b/codec/decoder/core/src/error_concealment.cpp
@@ -38,7 +38,6 @@
 #include "error_concealment.h"
 #include "cpu_core.h"
 
-namespace WelsDec {
 //Init
 void InitErrorCon (PWelsDecoderContext pCtx) {
   if ((pCtx->pParam->eEcActiveIdc == ERROR_CON_SLICE_COPY)
@@ -170,7 +169,9 @@
 
 //Do error concealment using slice MV copy method
 void DoMbECMvCopy (PWelsDecoderContext pCtx, PPicture pDec, PPicture pRef, int32_t iMbXy, int32_t iMbX, int32_t iMbY,
-                   sMCRefMember* pMCRefMem) {
+                   sMCRefMember* pMCRefMem, int32_t iCurrPoc) {
+  USED(iCurrPoc);
+  USED(iMbXy);
   if (pDec == pRef) {
     return; // for protection, shall never go into this logic, error info printed outside.
   }
@@ -180,7 +181,7 @@
   int32_t iScale0;
   int32_t iScale1;
   uint8_t* pDst[3];
-  int32_t iCurrPoc = pDec->iFramePoc;
+  iCurrPoc = pDec->iFramePoc;
   pDst[0] = pDec->pData[0] + iMbXInPix + iMbYInPix * pMCRefMem->iDstLineLuma;
   pDst[1] = pDec->pData[1] + (iMbXInPix >> 1) + (iMbYInPix >> 1) * pMCRefMem->iDstLineChroma;
   pDst[2] = pDec->pData[2] + (iMbXInPix >> 1) + (iMbYInPix >> 1) * pMCRefMem->iDstLineChroma;
@@ -402,7 +403,7 @@
       if (!pMbCorrectlyDecodedFlag[iMbXyIndex]) {
         pCtx->pDec->iMbEcedNum++;
         if (pSrcPic != NULL) {
-          DoMbECMvCopy (pCtx, pDstPic, pSrcPic, iMbXyIndex, iMbX, iMbY, &sMCRefMem);
+          DoMbECMvCopy (pCtx, pDstPic, pSrcPic, iMbXyIndex, iMbX, iMbY, &sMCRefMem, 0);
         } else { //pSrcPic == NULL
           //Y component
           pDstData = pDstPic->pData[0] + iMbY * 16 * iDstStride + iMbX * 16;
@@ -431,7 +432,7 @@
 
 //Mark erroneous frame as Ref Pic into DPB
 int32_t MarkECFrameAsRef (PWelsDecoderContext pCtx) {
-  int32_t iRet = WelsMarkAsRef (pCtx);
+  int32_t iRet = WelsMarkAsRef (pCtx, 0);
   // Under EC mode, the ERR_INFO_DUPLICATE_FRAME_NUM does not need to be process
   if (iRet != ERR_NONE) {
     return iRet;
@@ -476,5 +477,3 @@
   pCtx->iErrorCode |= dsDataErrorConcealed;
   pCtx->pDec->bIsComplete = false; // Set complete flag to false after do EC.
 }
-
-} // namespace WelsDec
--- a/codec/decoder/core/src/fmo.cpp
+++ b/codec/decoder/core/src/fmo.cpp
@@ -42,8 +42,6 @@
 #include "memory_align.h"
 #include "error_code.h"
 
-namespace WelsDec {
-
 /*!
  * \brief   Generate MB allocated map for interleaved slice group (TYPE 0)
  *
@@ -53,8 +51,8 @@
  * \return  0 - successful; none 0 - failed
  */
 static inline int32_t FmoGenerateMbAllocMapType0 (PFmo pFmo, PPps pPps) {
-  uint32_t uiNumSliceGroups = 0;
-  int32_t iMbNum = 0;
+  uint32_t uiNumSliceGroups;
+  int32_t iMbNum;
   int32_t i = 0;
 
   WELS_VERIFY_RETURN_IF (ERR_INFO_INVALID_PARAM, (NULL == pFmo || NULL == pPps))
@@ -90,8 +88,8 @@
  * \return  0 - successful; none 0 - failed
  */
 static inline int32_t FmoGenerateMbAllocMapType1 (PFmo pFmo, PPps pPps, const int32_t kiMbWidth) {
-  uint32_t uiNumSliceGroups = 0;
-  int32_t iMbNum = 0;
+  uint32_t uiNumSliceGroups;
+  int32_t iMbNum;
   int32_t i = 0;
   WELS_VERIFY_RETURN_IF (ERR_INFO_INVALID_PARAM, (NULL == pFmo || NULL == pPps))
   uiNumSliceGroups = pPps->uiNumSliceGroups;
@@ -119,7 +117,7 @@
  */
 static inline int32_t FmoGenerateSliceGroup (PFmo pFmo, const PPps kpPps, const int32_t kiMbWidth,
     const int32_t kiMbHeight, CMemoryAlign* pMa) {
-  int32_t iNumMb = 0;
+  int32_t iNumMb;
   int32_t iErr   = 0;
   bool bResolutionChanged = false;
 
@@ -322,5 +320,3 @@
   // -1: No further MB in this slice (could be end of picture)
   return iNextMb;
 }
-
-} // namespace WelsDec
--- a/codec/decoder/core/src/get_intra_predictor.cpp
+++ b/codec/decoder/core/src/get_intra_predictor.cpp
@@ -39,14 +39,11 @@
  *
  *************************************************************************************
  */
-#include <string.h>
 
 #include "macros.h"
 #include "ls_defines.h"
 #include "get_intra_predictor.h"
 
-namespace WelsDec {
-
 #define I4x4_COUNT 4
 #define I8x8_COUNT 8
 #define I16x16_COUNT 16
@@ -409,6 +406,7 @@
 }
 
 void WelsI8x8LumaPredH_c (uint8_t* pPred, const int32_t kiStride, bool bTLAvail, bool bTRAvail) {
+  USED(bTRAvail);
   uint64_t uiLeft;
   int32_t iStride[8];
   uint8_t uiPixelFilterL[8];
@@ -472,6 +470,7 @@
 }
 
 void WelsI8x8LumaPredDcLeft_c (uint8_t* pPred, const int32_t kiStride, bool bTLAvail, bool bTRAvail) {
+  USED(bTRAvail);
   int32_t iStride[8];
   uint8_t uiPixelFilterL[8];
   uint16_t uiTotal = 0;
@@ -534,6 +533,8 @@
 }
 
 void WelsI8x8LumaPredDcNA_c (uint8_t* pPred, const int32_t kiStride, bool bTLAvail, bool bTRAvail) {
+  USED(bTRAvail);
+  USED(bTLAvail);
   // for normal 8 bit depth, 8-94
   const uint64_t kuiDC64 = 0x8080808080808080ULL;
 
@@ -548,6 +549,7 @@
 
 /*down pLeft*/
 void WelsI8x8LumaPredDDL_c (uint8_t* pPred, const int32_t kiStride, bool bTLAvail, bool bTRAvail) {
+  USED(bTRAvail);
   // Top and Top-right available
   int32_t iStride[8];
   uint8_t uiPixelFilterT[16];
@@ -577,6 +579,7 @@
 
 /*down pLeft*/
 void WelsI8x8LumaPredDDLTop_c (uint8_t* pPred, const int32_t kiStride, bool bTLAvail, bool bTRAvail) {
+  USED(bTRAvail);
   // Top available and Top-right unavailable
   int32_t iStride[8];
   uint8_t uiPixelFilterT[16];
@@ -610,6 +613,7 @@
 
 /*down right*/
 void WelsI8x8LumaPredDDR_c (uint8_t* pPred, const int32_t kiStride, bool bTLAvail, bool bTRAvail) {
+  USED(bTLAvail);
   // The TopLeft, Top, Left are all available under this mode
   int32_t iStride[8];
   uint8_t uiPixelFilterTL;
@@ -660,6 +664,7 @@
 
 /*vertical pLeft*/
 void WelsI8x8LumaPredVL_c (uint8_t* pPred, const int32_t kiStride, bool bTLAvail, bool bTRAvail) {
+  USED(bTRAvail);
   // Top and Top-right available
   int32_t iStride[8];
   uint8_t uiPixelFilterT[16];
@@ -692,6 +697,7 @@
 
 /*vertical pLeft*/
 void WelsI8x8LumaPredVLTop_c (uint8_t* pPred, const int32_t kiStride, bool bTLAvail, bool bTRAvail) {
+  USED(bTRAvail);
   // Top available and Top-right unavailable
   int32_t iStride[8];
   uint8_t uiPixelFilterT[16];
@@ -728,6 +734,7 @@
 
 /*vertical right*/
 void WelsI8x8LumaPredVR_c (uint8_t* pPred, const int32_t kiStride, bool bTLAvail, bool bTRAvail) {
+  USED(bTLAvail);
   // The TopLeft, Top, Left are always available under this mode
   int32_t iStride[8];
   uint8_t uiPixelFilterTL;
@@ -786,6 +793,7 @@
 
 /*horizontal up*/
 void WelsI8x8LumaPredHU_c (uint8_t* pPred, const int32_t kiStride, bool bTLAvail, bool bTRAvail) {
+  USED(bTRAvail);
   int32_t iStride[8];
   uint8_t uiPixelFilterL[8];
   int32_t i, j;
@@ -824,6 +832,7 @@
 
 /*horizontal down*/
 void WelsI8x8LumaPredHD_c (uint8_t* pPred, const int32_t kiStride, bool bTLAvail, bool bTRAvail) {
+  USED(bTLAvail);
   // The TopLeft, Top, Left are all available under this mode
   int32_t iStride[8];
   uint8_t uiPixelFilterTL;
@@ -912,7 +921,7 @@
 
 
 void WelsIChromaPredPlane_c (uint8_t* pPred, const int32_t kiStride) {
-  int32_t a = 0, b = 0, c = 0, H = 0, V = 0;
+  int32_t a, b, c, H = 0, V = 0;
   int32_t i, j;
   uint8_t* pTop = &pPred[-kiStride];
   uint8_t* pLeft = &pPred[-1];
@@ -1051,7 +1060,7 @@
 }
 
 void WelsI16x16LumaPredPlane_c (uint8_t* pPred, const int32_t kiStride) {
-  int32_t a = 0, b = 0, c = 0, H = 0, V = 0;
+  int32_t a, b, c, H = 0, V = 0;
   int32_t i, j;
   uint8_t* pTop = &pPred[-kiStride];
   uint8_t* pLeft = &pPred[-1];
@@ -1079,7 +1088,7 @@
   int32_t iTmp = (kiStride << 4) - kiStride;
   int32_t iSum = 0;
   uint8_t i = 15;
-  uint8_t uiMean = 0;
+  uint8_t uiMean;
 
   /*caculate the kMean value*/
   do {
@@ -1101,7 +1110,7 @@
   int32_t iTmp = (kiStride << 4) - kiStride;
   int32_t iSum = 0;
   uint8_t i = 15;
-  uint8_t uiMean = 0;
+  uint8_t uiMean;
 
   /*caculate the kMean value*/
   do {
@@ -1119,8 +1128,8 @@
 void WelsI16x16LumaPredDcLeft_c (uint8_t* pPred, const int32_t kiStride) {
   int32_t iTmp = (kiStride << 4) - kiStride;
   int32_t iSum = 0;
-  uint64_t uiMean64 = 0;
-  uint8_t uiMean = 0;
+  uint64_t uiMean64;
+  uint8_t uiMean;
   uint8_t i = 15;
 
   /*caculate the kMean value*/
@@ -1153,5 +1162,3 @@
     iTmp -= kiStride;
   } while (i-- > 0);
 }
-
-} // namespace WelsDec
--- a/codec/decoder/core/src/manage_dec_ref.cpp
+++ b/codec/decoder/core/src/manage_dec_ref.cpp
@@ -44,8 +44,6 @@
 #include "error_code.h"
 #include "decoder.h"
 
-namespace WelsDec {
-
 static PPicture WelsDelShortFromList (PRefPic pRefPic, int32_t iFrameNum);
 static PPicture WelsDelLongFromList (PRefPic pRefPic, uint32_t uiLongTermFrameIdx);
 static PPicture WelsDelShortFromListSetUnref (PRefPic pRefPic, int32_t iFrameNum);
@@ -102,7 +100,7 @@
 // 2.IDR NAL i.e. 1st layer in IDR AU
 
 void WelsResetRefPic (PWelsDecoderContext pCtx) {
-  int32_t i = 0;
+  int32_t i;
   PRefPic pRefPic = &pCtx->sRefPic;
   pCtx->sRefPic.uiLongRefCount[LIST_0] = pCtx->sRefPic.uiShortRefCount[LIST_0] = 0;
 
@@ -127,7 +125,7 @@
 }
 
 void WelsResetRefPicWithoutUnRef (PWelsDecoderContext pCtx) {
-  int32_t i = 0;
+  int32_t i;
   PRefPic pRefPic = &pCtx->sRefPic;
   pCtx->sRefPic.uiLongRefCount[LIST_0] = pCtx->sRefPic.uiShortRefCount[LIST_0] = 0;
 
@@ -355,7 +353,7 @@
  * fills the pRefPic.pRefList.
  */
 int32_t WelsInitRefList (PWelsDecoderContext pCtx, int32_t iPoc) {
-
+  USED(iPoc);
   int32_t err = WelsCheckAndRecoverForFutureDecoding (pCtx);
   if (err != ERR_NONE) return err;
 
@@ -392,7 +390,7 @@
   int32_t ListCount = 1;
   if (pCtx->eSliceType == B_SLICE) ListCount = 2;
   for (int32_t listIdx = 0; listIdx < ListCount; ++listIdx) {
-    PPicture pPic = NULL;
+    PPicture pPic;
     PPicture* ppRefList = pCtx->sRefPic.pRefList[listIdx];
     int32_t  iMaxRefIdx = pCtx->iPicQueueNumber;
     if (iMaxRefIdx >= MAX_REF_PIC_COUNT) {
@@ -401,7 +399,7 @@
     int32_t iRefCount = pSliceHeader->uiRefCount[listIdx];
     int32_t iPredFrameNum = pSliceHeader->iFrameNum;
     int32_t iMaxPicNum = 1 << pSliceHeader->pSps->uiLog2MaxFrameNum;
-    int32_t iAbsDiffPicNum = -1;
+    int32_t iAbsDiffPicNum;
     int32_t iReorderingIndex = 0;
     int32_t i = 0;
 
@@ -489,9 +487,9 @@
   int32_t iShortRefCount = pCtx->sRefPic.uiShortRefCount[LIST_0];
   PPicture* ppLongRefList = pCtx->sRefPic.pLongRefList[LIST_0];
   int32_t iLongRefCount = pCtx->sRefPic.uiLongRefCount[LIST_0];
-  int32_t i = 0;
-  int32_t j = 0;
-  int32_t k = 0;
+  int32_t i;
+  int32_t j;
+  int32_t k;
   int32_t iMaxRefIdx = pCtx->pSps->iNumRefFrames;
   const int32_t iCurFrameNum = pSliceHeader->iFrameNum;
   const int32_t iMaxPicNum = 1 << pSliceHeader->pSps->uiLog2MaxFrameNum;
@@ -501,7 +499,7 @@
     PPicture* ppRefList = pCtx->sRefPic.pRefList[listIdx];
     int32_t iCount = 0;
     int32_t iRefCount = pSliceHeader->uiRefCount[listIdx];
-    int32_t iAbsDiffPicNum = -1;
+    int32_t iAbsDiffPicNum;
 
     if (pRefPicListReorderSyn->bRefPicListReorderingFlag[listIdx]) {
       int32_t iPredFrameNum = iCurFrameNum;
@@ -658,8 +656,8 @@
 
 static int32_t MMCO (PWelsDecoderContext pCtx, PRefPic pRefPic, PRefPicMarking pRefPicMarking) {
   PSps pSps = pCtx->pCurDqLayer->sLayerInfo.pSps;
-  int32_t i = 0;
-  int32_t iRet = ERR_NONE;
+  int32_t i;
+  int32_t iRet;
   for (i = 0; i < MAX_MMCO_COUNT && pRefPicMarking->sMmcoRef[i].uiMmcoType != MMCO_END; i++) {
     uint32_t uiMmcoType = pRefPicMarking->sMmcoRef[i].uiMmcoType;
     int32_t iShortFrameNum = (pCtx->iFrameNum - pRefPicMarking->sMmcoRef[i].iDiffOfPicNum) & ((
@@ -684,8 +682,8 @@
 }
 static int32_t MMCOProcess (PWelsDecoderContext pCtx, PRefPic pRefPic, uint32_t uiMmcoType,
                             int32_t iShortFrameNum, uint32_t uiLongTermPicNum, int32_t iLongTermFrameIdx, int32_t iMaxLongTermFrameIdx) {
-  PPicture pPic = NULL;
-  int32_t i = 0;
+  PPicture pPic;
+  int32_t i;
   int32_t iRet = ERR_NONE;
 
   switch (uiMmcoType) {
@@ -756,8 +754,8 @@
 }
 
 static int32_t SlidingWindow (PWelsDecoderContext pCtx, PRefPic pRefPic) {
-  PPicture pPic = NULL;
-  int32_t i = 0;
+  PPicture pPic;
+  int32_t i;
 
   if (pRefPic->uiShortRefCount[LIST_0] + pRefPic->uiLongRefCount[LIST_0] >= pCtx->pSps->iNumRefFrames) {
     if (pRefPic->uiShortRefCount[LIST_0] == 0) {
@@ -764,22 +762,18 @@
       WelsLog (& (pCtx->sLogCtx), WELS_LOG_ERROR, "No reference picture in short term list when sliding window");
       return ERR_INFO_INVALID_MMCO_REF_NUM_NOT_ENOUGH;
     }
-    for (i = pRefPic->uiShortRefCount[LIST_0] - 1; i >= 0; i--) {
-      pPic = WelsDelShortFromList (pRefPic, pRefPic->pShortRefList[LIST_0][i]->iFrameNum);
-      if (pPic) {
-        SetUnRef (pPic);
-        break;
-      } else {
-        return ERR_INFO_INVALID_MMCO_REF_NUM_OVERFLOW;
-      }
-    }
+    i = pRefPic->uiShortRefCount[LIST_0] - 1;
+    pPic = WelsDelShortFromList (pRefPic, pRefPic->pShortRefList[LIST_0][i]->iFrameNum);
+    if (pPic == NULL)
+      return ERR_INFO_INVALID_MMCO_REF_NUM_OVERFLOW;
+    SetUnRef (pPic);
   }
   return ERR_NONE;
 }
 
 static PPicture WelsDelShortFromList (PRefPic pRefPic, int32_t iFrameNum) {
-  int32_t i = 0;
-  int32_t iMoveSize = 0;
+  int32_t i;
+  int32_t iMoveSize;
   PPicture pPic = NULL;
 
   for (i = 0; i < pRefPic->uiShortRefCount[LIST_0]; i++) {
@@ -809,8 +803,8 @@
 }
 
 static PPicture WelsDelLongFromList (PRefPic pRefPic, uint32_t uiLongTermFrameIdx) {
-  PPicture pPic = NULL;
-  int32_t i = 0;
+  PPicture pPic;
+  int32_t i;
   for (i = 0; i < pRefPic->uiLongRefCount[LIST_0]; i++) {
     pPic = pRefPic->pLongRefList[LIST_0][i];
     if (pPic->iLongTermFrameIdx == (int32_t)uiLongTermFrameIdx) {
@@ -864,7 +858,7 @@
 
 static int32_t AddLongTermToList (PRefPic pRefPic, PPicture pPic, int32_t iLongTermFrameIdx,
                                   uint32_t uiLongTermPicNum) {
-  int32_t i = 0;
+  int32_t i;
 
   pPic->bUsedAsRef = true;
   pPic->bIsLongRef = true;
@@ -892,8 +886,8 @@
 
 static int32_t MarkAsLongTerm (PRefPic pRefPic, int32_t iFrameNum, int32_t iLongTermFrameIdx,
                                uint32_t uiLongTermPicNum) {
-  PPicture pPic = NULL;
-  int32_t i = 0;
+  PPicture pPic;
+  int32_t i;
   int32_t iRet = ERR_NONE;
   WelsDelLongFromListSetUnref (pRefPic, iLongTermFrameIdx);
 
@@ -954,5 +948,3 @@
 
   return iRet;
 }
-
-} // namespace WelsDec
--- a/codec/decoder/core/src/memmgr_nal_unit.cpp
+++ b/codec/decoder/core/src/memmgr_nal_unit.cpp
@@ -42,11 +42,9 @@
 #include "memory_align.h"
 #include "error_code.h"
 
-namespace WelsDec {
-
 int32_t MemInitNalList (PAccessUnit* ppAu, const uint32_t kuiSize, CMemoryAlign* pMa) {
   uint32_t uiIdx = 0;
-  uint8_t* pBase = NULL, *pPtr = NULL;
+  uint8_t* pBase, *pPtr;
   const uint32_t kuiSizeAu = sizeof (SAccessUnit);
   const uint32_t kuiSizeNalUnitPtr = kuiSize * sizeof (PNalUnit);
   const uint32_t kuiSizeNalUnit = sizeof (SNalUnit);
@@ -101,7 +99,7 @@
   else {
     PAccessUnit pTmp = NULL;
     int32_t iIdx = 0;
-    int32_t iRet = ERR_NONE;
+    int32_t iRet;
     if ((iRet = MemInitNalList (&pTmp, kiExpSize, pMa)) != ERR_NONE) // request new list with expanding
       return iRet;
 
@@ -129,7 +127,7 @@
  */
 PNalUnit MemGetNextNal (PAccessUnit* ppAu, CMemoryAlign* pMa) {
   PAccessUnit pAu = *ppAu;
-  PNalUnit pNu = NULL;
+  PNalUnit pNu;
 
   if (pAu->uiAvailUnitsNum >= pAu->uiCountUnitsNum) { // need expand list
     const uint32_t kuiExpandingSize = pAu->uiCountUnitsNum + (MAX_NAL_UNIT_NUM_IN_AU >> 1);
@@ -144,5 +142,3 @@
 
   return pNu;
 }
-
-} // namespace WelsDec
--- a/codec/decoder/core/src/mv_pred.cpp
+++ b/codec/decoder/core/src/mv_pred.cpp
@@ -43,8 +43,6 @@
 #include "mb_cache.h"
 #include "parse_mb_syn_cabac.h"
 
-namespace WelsDec {
-
 static inline  void SetRectBlock (void* vp, int32_t w, const int32_t h, int32_t stride, const uint32_t val,
                                   const int32_t size) {
   uint8_t* p = (uint8_t*)vp;
@@ -160,7 +158,7 @@
 
   int32_t iCurSliceIdc, iTopSliceIdc, iLeftTopSliceIdc, iRightTopSliceIdc, iLeftSliceIdc;
   int32_t iLeftTopType, iRightTopType, iTopType, iLeftType;
-  int32_t iCurX, iCurY, iCurXy, iLeftXy, iTopXy = 0, iLeftTopXy = 0, iRightTopXy = 0;
+  int32_t iCurX, iCurY, iCurXy, iLeftXy = 0, iTopXy = 0, iLeftTopXy = 0, iRightTopXy = 0;
 
   int8_t iLeftRef;
   int8_t iTopRef;
@@ -181,7 +179,6 @@
     bLeftAvail = (iLeftSliceIdc == iCurSliceIdc);
   } else {
     bLeftAvail = 0;
-    bLeftTopAvail = 0;
   }
 
   if (iCurY != 0) {
@@ -307,12 +304,12 @@
   }
 }
 
-int32_t GetColocatedMb (PWelsDecoderContext pCtx, MbType& mbType, SubMbType& subMbType) {
+int32_t GetColocatedMb (PWelsDecoderContext pCtx, MbType *mbType, SubMbType *subMbType) {
   PDqLayer pCurDqLayer = pCtx->pCurDqLayer;
   int32_t iMbXy = pCurDqLayer->iMbXyIndex;
 
   uint32_t is8x8 = IS_Inter_8x8 (GetMbType (pCurDqLayer)[iMbXy]);
-  mbType = GetMbType (pCurDqLayer)[iMbXy];
+  *mbType = GetMbType (pCurDqLayer)[iMbXy];
 
   PPicture colocPic = pCtx->sRefPic.pRefList[LIST_1][0];
   if (GetThreadCount (pCtx) > 1) {
@@ -336,14 +333,14 @@
     coloc_mbType |= MB_TYPE_16x16 | MB_TYPE_P0L0 | MB_TYPE_P1L0;
   }
   if (IS_Inter_8x8 (coloc_mbType) && !pCtx->pSps->bDirect8x8InferenceFlag) {
-    subMbType = SUB_MB_TYPE_4x4 | MB_TYPE_P0L0 | MB_TYPE_P0L1 | MB_TYPE_DIRECT;
-    mbType |= MB_TYPE_8x8 | MB_TYPE_L0 | MB_TYPE_L1;
+    *subMbType = SUB_MB_TYPE_4x4 | MB_TYPE_P0L0 | MB_TYPE_P0L1 | MB_TYPE_DIRECT;
+    *mbType |= MB_TYPE_8x8 | MB_TYPE_L0 | MB_TYPE_L1;
   } else if (!is8x8 && (IS_INTER_16x16 (coloc_mbType) || IS_INTRA (coloc_mbType)/* || IS_SKIP(coloc_mbType)*/)) {
-    subMbType = SUB_MB_TYPE_8x8 | MB_TYPE_P0L0 | MB_TYPE_P0L1 | MB_TYPE_DIRECT;
-    mbType |= MB_TYPE_16x16 | MB_TYPE_L0 | MB_TYPE_L1;
+    *subMbType = SUB_MB_TYPE_8x8 | MB_TYPE_P0L0 | MB_TYPE_P0L1 | MB_TYPE_DIRECT;
+    *mbType |= MB_TYPE_16x16 | MB_TYPE_L0 | MB_TYPE_L1;
   } else {
-    subMbType = SUB_MB_TYPE_8x8 | MB_TYPE_P0L0 | MB_TYPE_P0L1 | MB_TYPE_DIRECT;
-    mbType |= MB_TYPE_8x8 | MB_TYPE_L0 | MB_TYPE_L1;
+    *subMbType = SUB_MB_TYPE_8x8 | MB_TYPE_P0L0 | MB_TYPE_P0L1 | MB_TYPE_DIRECT;
+    *mbType |= MB_TYPE_8x8 | MB_TYPE_L0 | MB_TYPE_L1;
   }
 
   if (IS_INTRA (coloc_mbType)) {
@@ -352,7 +349,7 @@
   }
   SetRectBlock (pCurDqLayer->iColocIntra, 4, 4, 4 * sizeof (int8_t), 0, sizeof (int8_t));
 
-  if (IS_INTER_16x16 (mbType)) {
+  if (IS_INTER_16x16 (*mbType)) {
     int16_t iMVZero[2] = { 0 };
     int16_t* pMv = IS_TYPE_L1 (coloc_mbType) ? colocPic->pMv[LIST_1][iMbXy][0] : iMVZero;
     ST32 (pCurDqLayer->iColocMv[LIST_0][0], LD32 (colocPic->pMv[LIST_0][iMbXy][0]));
@@ -390,15 +387,15 @@
 }
 
 int32_t PredMvBDirectSpatial (PWelsDecoderContext pCtx, int16_t iMvp[LIST_A][2], int8_t ref[LIST_A],
-                              SubMbType& subMbType) {
+                              SubMbType *subMbType) {
 
-  int32_t ret = ERR_NONE;
+  int32_t ret;
   PDqLayer pCurDqLayer = pCtx->pCurDqLayer;
   int32_t iMbXy = pCurDqLayer->iMbXyIndex;
   bool bSkipOrDirect = (IS_SKIP (GetMbType (pCurDqLayer)[iMbXy]) | IS_DIRECT (GetMbType (pCurDqLayer)[iMbXy])) > 0;
 
   MbType mbType;
-  ret = GetColocatedMb (pCtx, mbType, subMbType);
+  ret = GetColocatedMb (pCtx, &mbType, subMbType);
   if (ret != ERR_NONE) {
     return ret;
   }
@@ -427,7 +424,6 @@
     bLeftAvail = (iLeftSliceIdc == iCurSliceIdc);
   } else {
     bLeftAvail = 0;
-    bLeftTopAvail = 0;
   }
 
   if (iCurY != 0) {
@@ -557,10 +553,10 @@
     ref[LIST_0] = ref[LIST_1] = 0;
   } else if (ref[LIST_1] < 0) {
     mbType &= ~MB_TYPE_L1;
-    subMbType &= ~MB_TYPE_L1;
+    *subMbType &= ~MB_TYPE_L1;
   } else if (ref[LIST_0] < 0) {
     mbType &= ~MB_TYPE_L0;
-    subMbType &= ~MB_TYPE_L0;
+    *subMbType &= ~MB_TYPE_L0;
   }
   GetMbType (pCurDqLayer)[iMbXy] = mbType;
 
@@ -590,7 +586,7 @@
       int8_t pSubPartCount[4], pPartW[4];
       for (int32_t i = 0; i < 4; i++) { //Direct 8x8 Ref and mv
         int16_t iIdx8 = i << 2;
-        pCurDqLayer->pSubMbType[iMbXy][i] = subMbType;
+        pCurDqLayer->pSubMbType[iMbXy][i] = *subMbType;
         int8_t pRefIndex[LIST_A][30];
         UpdateP8x8RefIdxCabac (pCurDqLayer, pRefIndex, iIdx8, ref[LIST_0], LIST_0);
         UpdateP8x8RefIdxCabac (pCurDqLayer, pRefIndex, iIdx8, ref[LIST_1], LIST_1);
@@ -599,11 +595,11 @@
         pSubPartCount[i] = g_ksInterBSubMbTypeInfo[0].iPartCount;
         pPartW[i] = g_ksInterBSubMbTypeInfo[0].iPartWidth;
 
-        if (IS_SUB_4x4 (subMbType)) {
+        if (IS_SUB_4x4 (*subMbType)) {
           pSubPartCount[i] = 4;
           pPartW[i] = 1;
         }
-        FillSpatialDirect8x8Mv (pCurDqLayer, iIdx8, pSubPartCount[i], pPartW[i], subMbType, bIsLongRef, iMvp, ref, NULL, NULL);
+        FillSpatialDirect8x8Mv (pCurDqLayer, iIdx8, pSubPartCount[i], pPartW[i], *subMbType, bIsLongRef, iMvp, ref, NULL, NULL);
       }
     }
   }
@@ -611,14 +607,14 @@
 }
 
 int32_t PredBDirectTemporal (PWelsDecoderContext pCtx, int16_t iMvp[LIST_A][2], int8_t ref[LIST_A],
-                             SubMbType& subMbType) {
-  int32_t ret = ERR_NONE;
+                             SubMbType *subMbType) {
+  int32_t ret;
   PDqLayer pCurDqLayer = pCtx->pCurDqLayer;
   int32_t iMbXy = pCurDqLayer->iMbXyIndex;
   bool bSkipOrDirect = (IS_SKIP (GetMbType (pCurDqLayer)[iMbXy]) | IS_DIRECT (GetMbType (pCurDqLayer)[iMbXy])) > 0;
 
   MbType mbType;
-  ret = GetColocatedMb (pCtx, mbType, subMbType);
+  ret = GetColocatedMb (pCtx, &mbType, subMbType);
   if (ret != ERR_NONE) {
     return ret;
   }
@@ -644,7 +640,7 @@
       int16_t* mv = pCurDqLayer->iColocMv[LIST_0][0];
       int8_t colocRefIndexL0 = pCurDqLayer->iColocRefIndex[LIST_0][0];
       if (colocRefIndexL0 >= 0) {
-        ref[LIST_0] = MapColToList0 (pCtx, colocRefIndexL0, ref0Count);
+        ref[LIST_0] = MapColToList0(pCtx, colocRefIndexL0, ref0Count);
       } else {
         mv = pCurDqLayer->iColocMv[LIST_1][0];
       }
@@ -666,7 +662,7 @@
       for (int32_t i = 0; i < 4; i++) {
         int16_t iIdx8 = i << 2;
         const uint8_t iScan4Idx = g_kuiScan4[iIdx8];
-        pCurDqLayer->pSubMbType[iMbXy][i] = subMbType;
+        pCurDqLayer->pSubMbType[iMbXy][i] = *subMbType;
 
         int16_t (*mvColoc)[2] = pCurDqLayer->iColocMv[LIST_0];
 
@@ -691,11 +687,11 @@
         pSubPartCount[i] = g_ksInterBSubMbTypeInfo[0].iPartCount;
         pPartW[i] = g_ksInterBSubMbTypeInfo[0].iPartWidth;
 
-        if (IS_SUB_4x4 (subMbType)) {
+        if (IS_SUB_4x4 (*subMbType)) {
           pSubPartCount[i] = 4;
           pPartW[i] = 1;
         }
-        FillTemporalDirect8x8Mv (pCurDqLayer, iIdx8, pSubPartCount[i], pPartW[i], subMbType, ref, mvColoc, NULL, NULL);
+        FillTemporalDirect8x8Mv (pCurDqLayer, iIdx8, pSubPartCount[i], pPartW[i], *subMbType, ref, mvColoc, NULL, NULL);
       }
     }
   }
@@ -716,7 +712,7 @@
   const int8_t kiLeftTopRef   = iRefIndex[listIdx][ kuiLeftTopIdx];
   int8_t iDiagonalRef  = kiRightTopRef;
 
-  int8_t iMatchRef = 0;
+  int8_t iMatchRef;
 
 
   int16_t iAMV[2], iBMV[2], iCMV[2];
@@ -947,8 +943,8 @@
   }
 }
 
-void FillSpatialDirect8x8Mv (PDqLayer pCurDqLayer, const int16_t& iIdx8, const int8_t& iPartCount, const int8_t& iPartW,
-                             const SubMbType& subMbType, const bool& bIsLongRef, int16_t pMvDirect[LIST_A][2], int8_t iRef[LIST_A],
+void FillSpatialDirect8x8Mv (PDqLayer pCurDqLayer, const int16_t iIdx8, const int8_t iPartCount, const int8_t iPartW,
+                             const SubMbType subMbType, const bool bIsLongRef, int16_t pMvDirect[LIST_A][2], int8_t iRef[LIST_A],
                              int16_t pMotionVector[LIST_A][30][MV_A], int16_t pMvdCache[LIST_A][30][MV_A]) {
   int32_t iMbXy = pCurDqLayer->iMbXyIndex;
   for (int32_t j = 0; j < iPartCount; j++) {
@@ -1074,9 +1070,9 @@
   }
 }
 
-void FillTemporalDirect8x8Mv (PDqLayer pCurDqLayer, const int16_t& iIdx8, const int8_t& iPartCount,
-                              const int8_t& iPartW,
-                              const SubMbType& subMbType, int8_t iRef[LIST_A], int16_t (*mvColoc)[2], int16_t pMotionVector[LIST_A][30][MV_A],
+void FillTemporalDirect8x8Mv (PDqLayer pCurDqLayer, const int16_t iIdx8, const int8_t iPartCount,
+                              const int8_t iPartW,
+                              const SubMbType subMbType, int8_t iRef[LIST_A], int16_t (*mvColoc)[2], int16_t pMotionVector[LIST_A][30][MV_A],
                               int16_t pMvdCache[LIST_A][30][MV_A]) {
   PSlice pSlice = &pCurDqLayer->sLayerInfo.sSliceInLayer;
   int32_t iMbXy = pCurDqLayer->iMbXyIndex;
@@ -1155,8 +1151,8 @@
     }
   }
 }
-int8_t MapColToList0 (PWelsDecoderContext& pCtx, const int8_t& colocRefIndexL0,
-                      const int32_t& ref0Count) { //ISO/IEC 14496-10:2009(E) (8-193)
+int8_t MapColToList0 (PWelsDecoderContext pCtx, const int8_t colocRefIndexL0,
+                      const int32_t ref0Count) { //ISO/IEC 14496-10:2009(E) (8-193)
   //When reference is lost, this function must be skipped.
   if ((pCtx->iErrorCode & dsRefLost) == dsRefLost) {
     return 0;
@@ -1172,7 +1168,7 @@
   }
   return 0;
 }
-void Update8x8RefIdx (PDqLayer& pCurDqLayer, const int16_t& iPartIdx, const int32_t& listIdx, const int8_t& iRef) {
+void Update8x8RefIdx (PDqLayer pCurDqLayer, const int16_t iPartIdx, const int32_t listIdx, const int8_t iRef) {
   int32_t iMbXy = pCurDqLayer->iMbXyIndex;
   const uint8_t iScan4Idx = g_kuiScan4[iPartIdx];
   pCurDqLayer->pDec->pRefIndex[listIdx][iMbXy][iScan4Idx] = pCurDqLayer->pDec->pRefIndex[listIdx][iMbXy][iScan4Idx + 1] =
@@ -1180,4 +1176,3 @@
             5] = iRef;
 
 }
-} // namespace WelsDec
--- a/codec/decoder/core/src/parse_mb_syn_cabac.cpp
+++ b/codec/decoder/core/src/parse_mb_syn_cabac.cpp
@@ -34,9 +34,7 @@
 #include "decode_slice.h"
 #include "mv_pred.h"
 #include "error_code.h"
-#include <stdio.h>
 
-namespace WelsDec {
 #define IDX_UNUSED -1
 
 static const int16_t g_kMaxPos       [] = {IDX_UNUSED, 15, 14, 15, 3, 14, 63, 3, 3, 14, 14};
@@ -70,33 +68,34 @@
 };
 
 static uint32_t DecodeCabacIntraMbType (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, int ctx_base) {
+  USED(pNeighAvail);
   uint32_t uiCode;
-  uint32_t uiMbType = 0;
+  uint32_t uiMbType;
 
   PWelsCabacDecEngine pCabacDecEngine = pCtx->pCabacDecEngine;
   PWelsCabacCtx pBinCtx = pCtx->pCabacCtx + ctx_base;
 
-  WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx, uiCode));
+  WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx, &uiCode));
   if (!uiCode) {
     return 0; /* I4x4 */
   }
 
-  WELS_READ_VERIFY (DecodeTerminateCabac (pCabacDecEngine, uiCode));
+  WELS_READ_VERIFY (DecodeTerminateCabac (pCabacDecEngine, &uiCode));
   if (uiCode) {
     return 25; /* PCM */
   }
   uiMbType = 1; /* I16x16 */
-  WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 1, uiCode)); /* cbp_luma != 0 */
+  WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 1, &uiCode)); /* cbp_luma != 0 */
   uiMbType += 12 * uiCode;
 
-  WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 2, uiCode));
+  WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 2, &uiCode));
   if (uiCode) {
-    WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 2, uiCode));
+    WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 2, &uiCode));
     uiMbType += 4 + 4 * uiCode;
   }
-  WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 3, uiCode));
+  WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 3, &uiCode));
   uiMbType += 2 * uiCode;
-  WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 3, uiCode));
+  WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 3, &uiCode));
   uiMbType += 1 * uiCode;
   return uiMbType;
 }
@@ -140,6 +139,7 @@
 
 void UpdateP8x8RefIdxCabac (PDqLayer pCurDqLayer, int8_t pRefIndex[LIST_A][30], int32_t iPartIdx, const int8_t iRef,
                             const int8_t iListIdx) {
+  USED(pRefIndex);
   int32_t iMbXy = pCurDqLayer->iMbXyIndex;
   const uint8_t iScan4Idx = g_kuiScan4[iPartIdx];
   pCurDqLayer->pDec->pRefIndex[iListIdx][iMbXy][iScan4Idx] = pCurDqLayer->pDec->pRefIndex[iListIdx][iMbXy][iScan4Idx + 1]
@@ -221,14 +221,14 @@
   }
 }
 
-int32_t ParseEndOfSliceCabac (PWelsDecoderContext pCtx, uint32_t& uiBinVal) {
-  uiBinVal = 0;
+int32_t ParseEndOfSliceCabac (PWelsDecoderContext pCtx, uint32_t *uiBinVal) {
+  *uiBinVal = 0;
   WELS_READ_VERIFY (DecodeTerminateCabac (pCtx->pCabacDecEngine, uiBinVal));
   return ERR_NONE;
 }
 
-int32_t ParseSkipFlagCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t& uiSkip) {
-  uiSkip = 0;
+int32_t ParseSkipFlagCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t *uiSkip) {
+  *uiSkip = 0;
   int32_t iCtxInc = NEW_CTX_OFFSET_SKIP;
   iCtxInc += (pNeighAvail->iLeftAvail && !IS_SKIP (pNeighAvail->iLeftType)) + (pNeighAvail->iTopAvail
              && !IS_SKIP (pNeighAvail->iTopType));
@@ -240,11 +240,11 @@
 }
 
 
-int32_t ParseMBTypeISliceCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t& uiBinVal) {
+int32_t ParseMBTypeISliceCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t *uiBinVal) {
   uint32_t uiCode;
-  int32_t iIdxA = 0, iIdxB = 0;
+  int32_t iIdxA, iIdxB;
   int32_t iCtxInc;
-  uiBinVal = 0;
+  *uiBinVal = 0;
   PWelsCabacDecEngine pCabacDecEngine = pCtx->pCabacDecEngine;
   PWelsCabacCtx pBinCtx = pCtx->pCabacCtx + NEW_CTX_OFFSET_MB_TYPE_I; //I mode in I slice
   iIdxA = (pNeighAvail->iLeftAvail) && (pNeighAvail->iLeftType != MB_TYPE_INTRA4x4
@@ -252,28 +252,28 @@
   iIdxB = (pNeighAvail->iTopAvail) && (pNeighAvail->iTopType != MB_TYPE_INTRA4x4
                                        && pNeighAvail->iTopType != MB_TYPE_INTRA8x8);
   iCtxInc = iIdxA + iIdxB;
-  WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + iCtxInc, uiCode));
-  uiBinVal = uiCode;
-  if (uiBinVal != 0) {  //I16x16
-    WELS_READ_VERIFY (DecodeTerminateCabac (pCabacDecEngine, uiCode));
+  WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + iCtxInc, &uiCode));
+  *uiBinVal = uiCode;
+  if (*uiBinVal != 0) {  //I16x16
+    WELS_READ_VERIFY (DecodeTerminateCabac (pCabacDecEngine, &uiCode));
     if (uiCode == 1)
-      uiBinVal = 25; //I_PCM
+      *uiBinVal = 25; //I_PCM
     else {
-      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 3, uiCode));
-      uiBinVal = 1 + uiCode * 12;
+      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 3, &uiCode));
+      *uiBinVal = 1 + uiCode * 12;
       //decoding of uiCbp:0,1,2
-      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 4, uiCode));
+      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 4, &uiCode));
       if (uiCode != 0) {
-        WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 5, uiCode));
-        uiBinVal += 4;
+        WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 5, &uiCode));
+        *uiBinVal += 4;
         if (uiCode != 0)
-          uiBinVal += 4;
+          *uiBinVal += 4;
       }
       //decoding of I pred-mode: 0,1,2,3
-      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 6, uiCode));
-      uiBinVal += (uiCode << 1);
-      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 7, uiCode));
-      uiBinVal += uiCode;
+      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 6, &uiCode));
+      *uiBinVal += (uiCode << 1);
+      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 7, &uiCode));
+      *uiBinVal += uiCode;
     }
   }
   //I4x4
@@ -280,66 +280,67 @@
   return ERR_NONE;
 }
 
-int32_t ParseMBTypePSliceCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t& uiMbType) {
+int32_t ParseMBTypePSliceCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t *uiMbType) {
+  USED(pNeighAvail);
   uint32_t uiCode;
-  uiMbType = 0;
+  *uiMbType = 0;
   PWelsCabacDecEngine pCabacDecEngine = pCtx->pCabacDecEngine;
 
   PWelsCabacCtx pBinCtx = pCtx->pCabacCtx + NEW_CTX_OFFSET_SKIP;
-  WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 3, uiCode));
+  WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 3, &uiCode));
   if (uiCode) {
     // Intra MB
-    WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 6, uiCode));
+    WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 6, &uiCode));
     if (uiCode) { // Intra 16x16
-      WELS_READ_VERIFY (DecodeTerminateCabac (pCabacDecEngine, uiCode));
+      WELS_READ_VERIFY (DecodeTerminateCabac (pCabacDecEngine, &uiCode));
       if (uiCode) {
-        uiMbType = 30;
+        *uiMbType = 30;
         return ERR_NONE;//MB_TYPE_INTRA_PCM;
       }
 
-      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 7, uiCode));
-      uiMbType = 6 + uiCode * 12;
+      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 7, &uiCode));
+      *uiMbType = 6 + uiCode * 12;
 
       //uiCbp: 0,1,2
-      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 8, uiCode));
+      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 8, &uiCode));
       if (uiCode) {
-        uiMbType += 4;
-        WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 8, uiCode));
+        *uiMbType += 4;
+        WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 8, &uiCode));
         if (uiCode)
-          uiMbType += 4;
+          *uiMbType += 4;
       }
 
       //IPredMode: 0,1,2,3
-      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 9, uiCode));
-      uiMbType += (uiCode << 1);
-      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 9, uiCode));
-      uiMbType += uiCode;
+      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 9, &uiCode));
+      *uiMbType += (uiCode << 1);
+      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 9, &uiCode));
+      *uiMbType += uiCode;
     } else
       // Intra 4x4
-      uiMbType = 5;
+      *uiMbType = 5;
   } else { // P MB
-    WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 4, uiCode));
+    WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 4, &uiCode));
     if (uiCode) { //second bit
-      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 6, uiCode));
+      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 6, &uiCode));
       if (uiCode)
-        uiMbType = 1;
+        *uiMbType = 1;
       else
-        uiMbType = 2;
+        *uiMbType = 2;
     } else {
-      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 5, uiCode));
+      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 5, &uiCode));
       if (uiCode)
-        uiMbType = 3;
+        *uiMbType = 3;
       else
-        uiMbType = 0;
+        *uiMbType = 0;
     }
   }
   return ERR_NONE;
 }
 
-int32_t ParseMBTypeBSliceCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t& uiMbType) {
+int32_t ParseMBTypeBSliceCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t *uiMbType) {
   uint32_t uiCode;
-  uiMbType = 0;
-  int32_t iIdxA = 0, iIdxB = 0;
+  *uiMbType = 0;
+  int32_t iIdxA, iIdxB;
   int32_t iCtxInc;
 
   PWelsCabacDecEngine pCabacDecEngine = pCtx->pCabacDecEngine;
@@ -349,40 +350,40 @@
   iIdxB = (pNeighAvail->iTopAvail) && !IS_DIRECT (pNeighAvail->iTopType);
 
   iCtxInc = iIdxA + iIdxB;
-  WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + iCtxInc, uiCode));
+  WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + iCtxInc, &uiCode));
   if (!uiCode)
-    uiMbType = 0; // Bi_Direct
+    *uiMbType = 0; // Bi_Direct
   else {
-    WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 3, uiCode));
+    WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 3, &uiCode));
     if (!uiCode) {
-      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 5, uiCode));
-      uiMbType = 1 + uiCode; // 16x16 L0L1
+      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 5, &uiCode));
+      *uiMbType = 1 + uiCode; // 16x16 L0L1
     } else {
-      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 4, uiCode));
-      uiMbType = uiCode << 3;
-      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 5, uiCode));
-      uiMbType |= uiCode << 2;
-      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 5, uiCode));
-      uiMbType |= uiCode << 1;
-      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 5, uiCode));
-      uiMbType |= uiCode;
-      if (uiMbType < 8) {
-        uiMbType += 3;
+      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 4, &uiCode));
+      *uiMbType = uiCode << 3;
+      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 5, &uiCode));
+      *uiMbType |= uiCode << 2;
+      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 5, &uiCode));
+      *uiMbType |= uiCode << 1;
+      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 5, &uiCode));
+      *uiMbType |= uiCode;
+      if (*uiMbType < 8) {
+        *uiMbType += 3;
         return ERR_NONE;
-      } else if (uiMbType == 13) {
-        uiMbType = DecodeCabacIntraMbType (pCtx, pNeighAvail, 32) + 23;
+      } else if (*uiMbType == 13) {
+        *uiMbType = DecodeCabacIntraMbType (pCtx, pNeighAvail, 32) + 23;
         return ERR_NONE;
-      } else if (uiMbType == 14) {
-        uiMbType = 11; // Bi8x16
+      } else if (*uiMbType == 14) {
+        *uiMbType = 11; // Bi8x16
         return ERR_NONE;
-      } else if (uiMbType == 15) {
-        uiMbType = 22; // 8x8
+      } else if (*uiMbType == 15) {
+        *uiMbType = 22; // 8x8
         return ERR_NONE;
       }
-      uiMbType <<= 1;
-      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 5, uiCode));
-      uiMbType |= uiCode;
-      uiMbType -= 4;
+      *uiMbType <<= 1;
+      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 5, &uiCode));
+      *uiMbType |= uiCode;
+      *uiMbType -= 4;
     }
   }
   return ERR_NONE;
@@ -389,7 +390,7 @@
 }
 
 int32_t ParseTransformSize8x8FlagCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail,
-                                        bool& bTransformSize8x8Flag) {
+                                        bool *bTransformSize8x8Flag) {
   uint32_t uiCode;
   int32_t iIdxA, iIdxB;
   int32_t iCtxInc;
@@ -399,83 +400,85 @@
   iIdxB = (pNeighAvail->iTopAvail)
           && (pCtx->pCurDqLayer->pTransformSize8x8Flag[pCtx->pCurDqLayer->iMbXyIndex - pCtx->pCurDqLayer->iMbWidth]);
   iCtxInc = iIdxA + iIdxB;
-  WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + iCtxInc, uiCode));
-  bTransformSize8x8Flag = !!uiCode;
+  WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + iCtxInc, &uiCode));
+  *bTransformSize8x8Flag = !!uiCode;
 
   return ERR_NONE;
 }
 
-int32_t ParseSubMBTypeCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t& uiSubMbType) {
+int32_t ParseSubMBTypeCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t *uiSubMbType) {
+  USED(pNeighAvail);
   uint32_t uiCode;
   PWelsCabacDecEngine pCabacDecEngine = pCtx->pCabacDecEngine;
   PWelsCabacCtx pBinCtx = pCtx->pCabacCtx + NEW_CTX_OFFSET_SUBMB_TYPE;
-  WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx, uiCode));
+  WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx, &uiCode));
   if (uiCode)
-    uiSubMbType = 0;
+    *uiSubMbType = 0;
   else {
-    WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 1, uiCode));
+    WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 1, &uiCode));
     if (uiCode) {
-      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 2, uiCode));
-      uiSubMbType = 3 - uiCode;
+      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 2, &uiCode));
+      *uiSubMbType = 3 - uiCode;
     } else {
-      uiSubMbType = 1;
+      *uiSubMbType = 1;
     }
   }
   return ERR_NONE;
 }
 
-int32_t ParseBSubMBTypeCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t& uiSubMbType) {
+int32_t ParseBSubMBTypeCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t *uiSubMbType) {
+  USED(pNeighAvail);
   uint32_t uiCode;
   PWelsCabacDecEngine pCabacDecEngine = pCtx->pCabacDecEngine;
   PWelsCabacCtx pBinCtx = pCtx->pCabacCtx + NEW_CTX_OFFSET_B_SUBMB_TYPE;
-  WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx, uiCode));
+  WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx, &uiCode));
   if (!uiCode) {
-    uiSubMbType = 0; /* B_Direct_8x8 */
+    *uiSubMbType = 0; /* B_Direct_8x8 */
     return ERR_NONE;
   }
-  WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 1, uiCode));
+  WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 1, &uiCode));
   if (!uiCode) {
-    WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 3, uiCode));
-    uiSubMbType = 1 + uiCode; /* B_L0_8x8, B_L1_8x8 */
+    WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 3, &uiCode));
+    *uiSubMbType = 1 + uiCode; /* B_L0_8x8, B_L1_8x8 */
     return ERR_NONE;
   }
-  uiSubMbType = 3;
-  WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 2, uiCode));
+  *uiSubMbType = 3;
+  WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 2, &uiCode));
   if (uiCode) {
-    WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 3, uiCode));
+    WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 3, &uiCode));
     if (uiCode) {
-      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 3, uiCode));
-      uiSubMbType = 11 + uiCode; /* B_L1_4x4, B_Bi_4x4 */
+      WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 3, &uiCode));
+      *uiSubMbType = 11 + uiCode; /* B_L1_4x4, B_Bi_4x4 */
       return ERR_NONE;
     }
-    uiSubMbType += 4;
+    *uiSubMbType += 4;
   }
-  WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 3, uiCode));
-  uiSubMbType += 2 * uiCode;
-  WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 3, uiCode));
-  uiSubMbType += uiCode;
+  WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 3, &uiCode));
+  *uiSubMbType += 2 * uiCode;
+  WELS_READ_VERIFY (DecodeBinCabac (pCabacDecEngine, pBinCtx + 3, &uiCode));
+  *uiSubMbType += uiCode;
 
   return ERR_NONE;
 }
 
-int32_t ParseIntraPredModeLumaCabac (PWelsDecoderContext pCtx, int32_t& iBinVal) {
+int32_t ParseIntraPredModeLumaCabac (PWelsDecoderContext pCtx, int32_t *iBinVal) {
   uint32_t uiCode;
-  iBinVal = 0;
-  WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine, pCtx->pCabacCtx + NEW_CTX_OFFSET_IPR, uiCode));
+  *iBinVal = 0;
+  WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine, pCtx->pCabacCtx + NEW_CTX_OFFSET_IPR, &uiCode));
   if (uiCode == 1)
-    iBinVal = -1;
+    *iBinVal = -1;
   else {
-    WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine, pCtx->pCabacCtx + NEW_CTX_OFFSET_IPR + 1, uiCode));
-    iBinVal |= uiCode;
-    WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine, pCtx->pCabacCtx + NEW_CTX_OFFSET_IPR + 1, uiCode));
-    iBinVal |= (uiCode << 1);
-    WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine, pCtx->pCabacCtx + NEW_CTX_OFFSET_IPR + 1, uiCode));
-    iBinVal |= (uiCode << 2);
+    WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine, pCtx->pCabacCtx + NEW_CTX_OFFSET_IPR + 1, &uiCode));
+    *iBinVal |= uiCode;
+    WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine, pCtx->pCabacCtx + NEW_CTX_OFFSET_IPR + 1, &uiCode));
+    *iBinVal |= (uiCode << 1);
+    WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine, pCtx->pCabacCtx + NEW_CTX_OFFSET_IPR + 1, &uiCode));
+    *iBinVal |= (uiCode << 2);
   }
   return ERR_NONE;
 }
 
-int32_t ParseIntraPredModeChromaCabac (PWelsDecoderContext pCtx, uint8_t uiNeighAvail, int32_t& iBinVal) {
+int32_t ParseIntraPredModeChromaCabac (PWelsDecoderContext pCtx, uint8_t uiNeighAvail, int32_t *iBinVal) {
   uint32_t uiCode;
   int32_t iIdxA, iIdxB, iCtxInc;
   int8_t* pChromaPredMode = pCtx->pCurDqLayer->pChromaPredMode;
@@ -487,7 +490,7 @@
   int32_t iMbXyTop = iMbXy - pCtx->pCurDqLayer->iMbWidth;
   int32_t iMbXyLeft = iMbXy - 1;
 
-  iBinVal = 0;
+  *iBinVal = 0;
 
   iIdxB = iTopAvail  && (pChromaPredMode[iMbXyTop] > 0 && pChromaPredMode[iMbXyTop] <= 3)
           && pMbType[iMbXyTop]  != MB_TYPE_INTRA_PCM;
@@ -494,24 +497,24 @@
   iIdxA = iLeftAvail && (pChromaPredMode[iMbXyLeft] > 0 && pChromaPredMode[iMbXyLeft] <= 3)
           && pMbType[iMbXyLeft] != MB_TYPE_INTRA_PCM;
   iCtxInc = iIdxA + iIdxB;
-  WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine, pCtx->pCabacCtx + NEW_CTX_OFFSET_CIPR + iCtxInc, uiCode));
-  iBinVal = uiCode;
-  if (iBinVal != 0) {
+  WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine, pCtx->pCabacCtx + NEW_CTX_OFFSET_CIPR + iCtxInc, &uiCode));
+  *iBinVal = uiCode;
+  if (*iBinVal != 0) {
     uint32_t iSym;
-    WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine, pCtx->pCabacCtx + NEW_CTX_OFFSET_CIPR + 3, iSym));
+    WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine, pCtx->pCabacCtx + NEW_CTX_OFFSET_CIPR + 3, &iSym));
     if (iSym == 0) {
-      iBinVal = (iSym + 1);
+      *iBinVal = (iSym + 1);
       return ERR_NONE;
     }
     iSym = 0;
     do {
-      WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine, pCtx->pCabacCtx + NEW_CTX_OFFSET_CIPR + 3, uiCode));
+      WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine, pCtx->pCabacCtx + NEW_CTX_OFFSET_CIPR + 3, &uiCode));
       ++iSym;
     } while ((uiCode != 0) && (iSym < 1));
 
     if ((uiCode != 0) && (iSym == 1))
       ++ iSym;
-    iBinVal = (iSym + 1);
+    *iBinVal = (iSym + 1);
     return ERR_NONE;
   }
   return ERR_NONE;
@@ -541,7 +544,7 @@
   case MB_TYPE_16x16: {
     iPartIdx = 0;
     WELS_READ_VERIFY (ParseRefIdxCabac (pCtx, pNeighAvail, pNonZeroCount, pRefIndex, 0, LIST_0, iPartIdx, pRefCount[0], 0,
-                                        iRef[0]));
+                                        &iRef[0]));
     if ((iRef[0] < 0) || (iRef[0] >= pRefCount[0]) || (ppRefPic[iRef[0]] == NULL)) { //error ref_idx
       pCtx->bMbRefConcealed = true;
       if (pCtx->pParam->eEcActiveIdc != ERROR_CON_DISABLE) {
@@ -554,8 +557,8 @@
     pCtx->bMbRefConcealed = pCtx->bRPLRError || pCtx->bMbRefConcealed || ! (ppRefPic[iRef[0]]
                             && (ppRefPic[iRef[0]]->bIsComplete || bIsPending));
     PredMv (pMotionVector, pRefIndex, LIST_0, 0, 4, iRef[0], pMv);
-    WELS_READ_VERIFY (ParseMvdInfoCabac (pCtx, pNeighAvail, pRefIndex, pMvdCache, iPartIdx, LIST_0, 0, pMvd[0]));
-    WELS_READ_VERIFY (ParseMvdInfoCabac (pCtx, pNeighAvail, pRefIndex, pMvdCache, iPartIdx, LIST_0, 1, pMvd[1]));
+    WELS_READ_VERIFY (ParseMvdInfoCabac (pCtx, pNeighAvail, pRefIndex, pMvdCache, iPartIdx, LIST_0, 0, &pMvd[0]));
+    WELS_READ_VERIFY (ParseMvdInfoCabac (pCtx, pNeighAvail, pRefIndex, pMvdCache, iPartIdx, LIST_0, 1, &pMvd[1]));
     pMv[0] += pMvd[0];
     pMv[1] += pMvd[1];
     WELS_CHECK_SE_BOTH_WARNING (pMv[1], iMinVmv, iMaxVmv, "vertical mv");
@@ -567,7 +570,7 @@
     for (i = 0; i < 2; i++) {
       iPartIdx = i << 3;
       WELS_READ_VERIFY (ParseRefIdxCabac (pCtx, pNeighAvail, pNonZeroCount, pRefIndex, 0, LIST_0, iPartIdx, pRefCount[0], 0,
-                                          iRef[i]));
+                                          &iRef[i]));
       if ((iRef[i] < 0) || (iRef[i] >= pRefCount[0]) || (ppRefPic[iRef[i]] == NULL)) { //error ref_idx
         pCtx->bMbRefConcealed = true;
         if (pCtx->pParam->eEcActiveIdc != ERROR_CON_DISABLE) {
@@ -584,8 +587,8 @@
     for (i = 0; i < 2; i++) {
       iPartIdx = i << 3;
       PredInter16x8Mv (pMotionVector, pRefIndex, LIST_0, iPartIdx, iRef[i], pMv);
-      WELS_READ_VERIFY (ParseMvdInfoCabac (pCtx, pNeighAvail, pRefIndex, pMvdCache, iPartIdx, LIST_0, 0, pMvd[0]));
-      WELS_READ_VERIFY (ParseMvdInfoCabac (pCtx, pNeighAvail, pRefIndex, pMvdCache, iPartIdx, LIST_0, 1, pMvd[1]));
+      WELS_READ_VERIFY (ParseMvdInfoCabac (pCtx, pNeighAvail, pRefIndex, pMvdCache, iPartIdx, LIST_0, 0, &pMvd[0]));
+      WELS_READ_VERIFY (ParseMvdInfoCabac (pCtx, pNeighAvail, pRefIndex, pMvdCache, iPartIdx, LIST_0, 1, &pMvd[1]));
       pMv[0] += pMvd[0];
       pMv[1] += pMvd[1];
       WELS_CHECK_SE_BOTH_WARNING (pMv[1], iMinVmv, iMaxVmv, "vertical mv");
@@ -597,7 +600,7 @@
     for (i = 0; i < 2; i++) {
       iPartIdx = i << 2;
       WELS_READ_VERIFY (ParseRefIdxCabac (pCtx, pNeighAvail, pNonZeroCount, pRefIndex, 0, LIST_0, iPartIdx, pRefCount[0], 0,
-                                          iRef[i]));
+                                          &iRef[i]));
       if ((iRef[i] < 0) || (iRef[i] >= pRefCount[0]) || (ppRefPic[iRef[i]] == NULL)) { //error ref_idx
         pCtx->bMbRefConcealed = true;
         if (pCtx->pParam->eEcActiveIdc != ERROR_CON_DISABLE) {
@@ -615,8 +618,8 @@
       iPartIdx = i << 2;
       PredInter8x16Mv (pMotionVector, pRefIndex, LIST_0, i << 2, iRef[i], pMv/*&mv[0], &mv[1]*/);
 
-      WELS_READ_VERIFY (ParseMvdInfoCabac (pCtx, pNeighAvail, pRefIndex, pMvdCache, iPartIdx, LIST_0, 0, pMvd[0]));
-      WELS_READ_VERIFY (ParseMvdInfoCabac (pCtx, pNeighAvail, pRefIndex, pMvdCache, iPartIdx, LIST_0, 1, pMvd[1]));
+      WELS_READ_VERIFY (ParseMvdInfoCabac (pCtx, pNeighAvail, pRefIndex, pMvdCache, iPartIdx, LIST_0, 0, &pMvd[0]));
+      WELS_READ_VERIFY (ParseMvdInfoCabac (pCtx, pNeighAvail, pRefIndex, pMvdCache, iPartIdx, LIST_0, 1, &pMvd[1]));
       pMv[0] += pMvd[0];
       pMv[1] += pMvd[1];
       WELS_CHECK_SE_BOTH_WARNING (pMv[1], iMinVmv, iMaxVmv, "vertical mv");
@@ -630,7 +633,7 @@
     uint32_t uiSubMbType;
     //sub_mb_type, partition
     for (i = 0; i < 4; i++) {
-      WELS_READ_VERIFY (ParseSubMBTypeCabac (pCtx, pNeighAvail, uiSubMbType));
+      WELS_READ_VERIFY (ParseSubMBTypeCabac (pCtx, pNeighAvail, &uiSubMbType));
       if (uiSubMbType >= 4) { //invalid sub_mb_type
         return GENERATE_ERROR_NO (ERR_LEVEL_MB_DATA, ERR_INFO_INVALID_SUB_MB_TYPE);
       }
@@ -645,7 +648,7 @@
     for (i = 0; i < 4; i++) {
       int16_t iIdx8 = i << 2;
       WELS_READ_VERIFY (ParseRefIdxCabac (pCtx, pNeighAvail, pNonZeroCount, pRefIndex, 0, LIST_0, iIdx8, pRefCount[0], 1,
-                                          pRefIdx[i]));
+                                          &pRefIdx[i]));
       if ((pRefIdx[i] < 0) || (pRefIdx[i] >= pRefCount[0]) || (ppRefPic[pRefIdx[i]] == NULL)) { //error ref_idx
         pCtx->bMbRefConcealed = true;
         if (pCtx->pParam->eEcActiveIdc != ERROR_CON_DISABLE) {
@@ -674,8 +677,8 @@
         iScan4Idx = g_kuiScan4[iPartIdx];
         iCacheIdx = g_kuiCache30ScanIdx[iPartIdx];
         PredMv (pMotionVector, pRefIndex, LIST_0, iPartIdx, iBlockW, pRefIdx[i], pMv);
-        WELS_READ_VERIFY (ParseMvdInfoCabac (pCtx, pNeighAvail, pRefIndex, pMvdCache, iPartIdx, LIST_0, 0, pMvd[0]));
-        WELS_READ_VERIFY (ParseMvdInfoCabac (pCtx, pNeighAvail, pRefIndex, pMvdCache, iPartIdx, LIST_0, 1, pMvd[1]));
+        WELS_READ_VERIFY (ParseMvdInfoCabac (pCtx, pNeighAvail, pRefIndex, pMvdCache, iPartIdx, LIST_0, 0, &pMvd[0]));
+        WELS_READ_VERIFY (ParseMvdInfoCabac (pCtx, pNeighAvail, pRefIndex, pMvdCache, iPartIdx, LIST_0, 1, &pMvd[1]));
         pMv[0] += pMvd[0];
         pMv[1] += pMvd[1];
         WELS_CHECK_SE_BOTH_WARNING (pMv[1], iMinVmv, iMaxVmv, "vertical mv");
@@ -749,13 +752,13 @@
     SubMbType subMbType;
     if (pSliceHeader->iDirectSpatialMvPredFlag) {
       //predict direct spatial mv
-      int32_t ret = PredMvBDirectSpatial (pCtx, pMvDirect, iRef, subMbType);
+      int32_t ret = PredMvBDirectSpatial (pCtx, pMvDirect, iRef, &subMbType);
       if (ret != ERR_NONE) {
         return ret;
       }
     } else {
       //temporal direct 16x16 mode
-      int32_t ret = PredBDirectTemporal (pCtx, pMvDirect, iRef, subMbType);
+      int32_t ret = PredBDirectTemporal (pCtx, pMvDirect, iRef, &subMbType);
       if (ret != ERR_NONE) {
         return ret;
       }
@@ -767,7 +770,7 @@
       if (IS_DIR (mbType, 0, listIdx)) {
         WELS_READ_VERIFY (ParseRefIdxCabac (pCtx, pNeighAvail, pNonZeroCount, pRefIndex, pDirect, listIdx, iPartIdx,
                                             pRefCount[listIdx], 0,
-                                            iRef[listIdx]));
+                                            &iRef[listIdx]));
         if ((iRef[listIdx] < 0) || (iRef[listIdx] >= pRefCount[listIdx])
             || (pCtx->sRefPic.pRefList[listIdx][iRef[listIdx]] == NULL)) { //error ref_idx
           pCtx->bMbRefConcealed = true;
@@ -785,8 +788,8 @@
     for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
       if (IS_DIR (mbType, 0, listIdx)) {
         PredMv (pMotionVector, pRefIndex, listIdx, 0, 4, iRef[listIdx], pMv);
-        WELS_READ_VERIFY (ParseMvdInfoCabac (pCtx, pNeighAvail, pRefIndex, pMvdCache, iPartIdx, listIdx, 0, pMvd[0]));
-        WELS_READ_VERIFY (ParseMvdInfoCabac (pCtx, pNeighAvail, pRefIndex, pMvdCache, iPartIdx, listIdx, 1, pMvd[1]));
+        WELS_READ_VERIFY (ParseMvdInfoCabac (pCtx, pNeighAvail, pRefIndex, pMvdCache, iPartIdx, listIdx, 0, &pMvd[0]));
+        WELS_READ_VERIFY (ParseMvdInfoCabac (pCtx, pNeighAvail, pRefIndex, pMvdCache, iPartIdx, listIdx, 1, &pMvd[1]));
         pMv[0] += pMvd[0];
         pMv[1] += pMvd[1];
         WELS_CHECK_SE_BOTH_WARNING (pMv[1], iMinVmv, iMaxVmv, "vertical mv");
@@ -804,7 +807,7 @@
         int8_t ref_idx = REF_NOT_IN_LIST;
         if (IS_DIR (mbType, i, listIdx)) {
           WELS_READ_VERIFY (ParseRefIdxCabac (pCtx, pNeighAvail, pNonZeroCount, pRefIndex, pDirect, listIdx, iPartIdx,
-                                              pRefCount[listIdx], 0, ref_idx));
+                                              pRefCount[listIdx], 0, &ref_idx));
           if ((ref_idx < 0) || (ref_idx >= pRefCount[listIdx])
               || (pCtx->sRefPic.pRefList[listIdx][ref_idx] == NULL)) { //error ref_idx
             pCtx->bMbRefConcealed = true;
@@ -828,8 +831,8 @@
         int8_t ref_idx = ref_idx_list[listIdx][i];
         if (IS_DIR (mbType, i, listIdx)) {
           PredInter16x8Mv (pMotionVector, pRefIndex, listIdx, iPartIdx, ref_idx, pMv);
-          WELS_READ_VERIFY (ParseMvdInfoCabac (pCtx, pNeighAvail, pRefIndex, pMvdCache, iPartIdx, listIdx, 0, pMvd[0]));
-          WELS_READ_VERIFY (ParseMvdInfoCabac (pCtx, pNeighAvail, pRefIndex, pMvdCache, iPartIdx, listIdx, 1, pMvd[1]));
+          WELS_READ_VERIFY (ParseMvdInfoCabac (pCtx, pNeighAvail, pRefIndex, pMvdCache, iPartIdx, listIdx, 0, &pMvd[0]));
+          WELS_READ_VERIFY (ParseMvdInfoCabac (pCtx, pNeighAvail, pRefIndex, pMvdCache, iPartIdx, listIdx, 1, &pMvd[1]));
           pMv[0] += pMvd[0];
           pMv[1] += pMvd[1];
           WELS_CHECK_SE_BOTH_WARNING (pMv[1], iMinVmv, iMaxVmv, "vertical mv");
@@ -848,7 +851,7 @@
         int8_t ref_idx = REF_NOT_IN_LIST;
         if (IS_DIR (mbType, i, listIdx)) {
           WELS_READ_VERIFY (ParseRefIdxCabac (pCtx, pNeighAvail, pNonZeroCount, pRefIndex, pDirect, listIdx, iPartIdx,
-                                              pRefCount[listIdx], 0, ref_idx));
+                                              pRefCount[listIdx], 0, &ref_idx));
           if ((ref_idx < 0) || (ref_idx >= pRefCount[listIdx])
               || (pCtx->sRefPic.pRefList[listIdx][ref_idx] == NULL)) { //error ref_idx
             pCtx->bMbRefConcealed = true;
@@ -872,8 +875,8 @@
         int8_t ref_idx = ref_idx_list[listIdx][i];
         if (IS_DIR (mbType, i, listIdx)) {
           PredInter8x16Mv (pMotionVector, pRefIndex, listIdx, iPartIdx, ref_idx, pMv);
-          WELS_READ_VERIFY (ParseMvdInfoCabac (pCtx, pNeighAvail, pRefIndex, pMvdCache, iPartIdx, listIdx, 0, pMvd[0]));
-          WELS_READ_VERIFY (ParseMvdInfoCabac (pCtx, pNeighAvail, pRefIndex, pMvdCache, iPartIdx, listIdx, 1, pMvd[1]));
+          WELS_READ_VERIFY (ParseMvdInfoCabac (pCtx, pNeighAvail, pRefIndex, pMvdCache, iPartIdx, listIdx, 0, &pMvd[0]));
+          WELS_READ_VERIFY (ParseMvdInfoCabac (pCtx, pNeighAvail, pRefIndex, pMvdCache, iPartIdx, listIdx, 1, &pMvd[1]));
           pMv[0] += pMvd[0];
           pMv[1] += pMvd[1];
           WELS_CHECK_SE_BOTH_WARNING (pMv[1], iMinVmv, iMaxVmv, "vertical mv");
@@ -899,7 +902,7 @@
     bool has_direct_called = false;
     SubMbType directSubMbType = 0;
     for (int32_t i = 0; i < 4; i++) {
-      WELS_READ_VERIFY (ParseBSubMBTypeCabac (pCtx, pNeighAvail, uiSubMbType));
+      WELS_READ_VERIFY (ParseBSubMBTypeCabac (pCtx, pNeighAvail, &uiSubMbType));
       if (uiSubMbType >= 13) { //invalid sub_mb_type
         return GENERATE_ERROR_NO (ERR_LEVEL_MB_DATA, ERR_INFO_INVALID_SUB_MB_TYPE);
       }
@@ -914,7 +917,7 @@
       if (IS_DIRECT (g_ksInterBSubMbTypeInfo[uiSubMbType].iType)) {
         if (!has_direct_called) {
           if (pSliceHeader->iDirectSpatialMvPredFlag) {
-            int32_t ret = PredMvBDirectSpatial (pCtx, pMvDirect, iRef, directSubMbType);
+            int32_t ret = PredMvBDirectSpatial (pCtx, pMvDirect, iRef, &directSubMbType);
             if (ret != ERR_NONE) {
               return ret;
             }
@@ -921,7 +924,7 @@
 
           } else {
             //temporal direct mode
-            int32_t ret = PredBDirectTemporal (pCtx, pMvDirect, iRef, directSubMbType);
+            int32_t ret = PredBDirectTemporal (pCtx, pMvDirect, iRef, &directSubMbType);
             if (ret != ERR_NONE) {
               return ret;
             }
@@ -983,7 +986,7 @@
           if (IS_DIR (subMbType, 0, listIdx)) {
             WELS_READ_VERIFY (ParseRefIdxCabac (pCtx, pNeighAvail, pNonZeroCount, pRefIndex, pDirect, listIdx, iIdx8,
                                                 pRefCount[listIdx], 1,
-                                                iref));
+                                                &iref));
             if ((iref < 0) || (iref >= pRefCount[listIdx]) || (pCtx->sRefPic.pRefList[listIdx][iref] == NULL)) { //error ref_idx
               pCtx->bMbRefConcealed = true;
               if (pCtx->pParam->eEcActiveIdc != ERROR_CON_DISABLE) {
@@ -1026,8 +1029,8 @@
           iCacheIdx = g_kuiCache30ScanIdx[iPartIdx];
           if (is_dir) {
             PredMv (pMotionVector, pRefIndex, listIdx, iPartIdx, iBlockW, iref, pMv);
-            WELS_READ_VERIFY (ParseMvdInfoCabac (pCtx, pNeighAvail, pRefIndex, pMvdCache, iPartIdx, listIdx, 0, pMvd[0]));
-            WELS_READ_VERIFY (ParseMvdInfoCabac (pCtx, pNeighAvail, pRefIndex, pMvdCache, iPartIdx, listIdx, 1, pMvd[1]));
+            WELS_READ_VERIFY (ParseMvdInfoCabac (pCtx, pNeighAvail, pRefIndex, pMvdCache, iPartIdx, listIdx, 0, &pMvd[0]));
+            WELS_READ_VERIFY (ParseMvdInfoCabac (pCtx, pNeighAvail, pRefIndex, pMvdCache, iPartIdx, listIdx, 1, &pMvd[1]));
             pMv[0] += pMvd[0];
             pMv[1] += pMvd[1];
             WELS_CHECK_SE_BOTH_WARNING (pMv[1], iMinVmv, iMaxVmv, "vertical mv");
@@ -1076,13 +1079,14 @@
 
 int32_t ParseRefIdxCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint8_t* nzc,
                           int8_t ref_idx[LIST_A][30], int8_t direct[30],
-                          int32_t iListIdx, int32_t iZOrderIdx, int32_t iActiveRefNum, int32_t b8mode, int8_t& iRefIdxVal) {
+                          int32_t iListIdx, int32_t iZOrderIdx, int32_t iActiveRefNum, int32_t b8mode, int8_t *iRefIdxVal) {
+  USED(b8mode); USED(nzc);
   if (iActiveRefNum == 1) {
-    iRefIdxVal = 0;
+    *iRefIdxVal = 0;
     return ERR_NONE;
   }
   uint32_t uiCode;
-  int32_t iIdxA = 0, iIdxB = 0;
+  int32_t iIdxA, iIdxB;
   int32_t iCtxInc = 0;
   int8_t* pRefIdxInMB = pCtx->pCurDqLayer->pDec->pRefIndex[iListIdx][pCtx->pCurDqLayer->iMbXyIndex];
   int8_t* pDirect = pCtx->pCurDqLayer->pDirect[pCtx->pCurDqLayer->iMbXyIndex];
@@ -1140,22 +1144,23 @@
     iCtxInc = iIdxA + (iIdxB << 1);
   }
 
-  WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine, pCtx->pCabacCtx + NEW_CTX_OFFSET_REF_NO + iCtxInc, uiCode));
+  WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine, pCtx->pCabacCtx + NEW_CTX_OFFSET_REF_NO + iCtxInc, &uiCode));
   if (uiCode) {
-    WELS_READ_VERIFY (DecodeUnaryBinCabac (pCtx->pCabacDecEngine, pCtx->pCabacCtx + NEW_CTX_OFFSET_REF_NO + 4, 1, uiCode));
+    WELS_READ_VERIFY (DecodeUnaryBinCabac (pCtx->pCabacDecEngine, pCtx->pCabacCtx + NEW_CTX_OFFSET_REF_NO + 4, 1, &uiCode));
     ++uiCode;
   }
-  iRefIdxVal = (int8_t) uiCode;
+  *iRefIdxVal = (int8_t) uiCode;
   return ERR_NONE;
 }
 
 int32_t ParseMvdInfoCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, int8_t pRefIndex[LIST_A][30],
-                           int16_t pMvdCache[LIST_A][30][2], int32_t index, int8_t iListIdx, int8_t iMvComp, int16_t& iMvdVal) {
+                           int16_t pMvdCache[LIST_A][30][2], int32_t index, int8_t iListIdx, int8_t iMvComp, int16_t *iMvdVal) {
+  USED(pNeighAvail);
   uint32_t uiCode;
   int32_t iIdxA = 0;
   //int32_t sym;
   PWelsCabacCtx pBinCtx = pCtx->pCabacCtx + NEW_CTX_OFFSET_MVD + iMvComp * CTX_NUM_MVD;
-  iMvdVal = 0;
+  *iMvdVal = 0;
 
   if (pRefIndex[iListIdx][g_kuiCache30ScanIdx[index] - 6] >= 0)
     iIdxA = WELS_ABS (pMvdCache[iListIdx][g_kuiCache30ScanIdx[index] - 6][iMvComp]);
@@ -1166,23 +1171,23 @@
   if (iIdxA >= 3)
     iCtxInc = 1 + (iIdxA > 32);
 
-  WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine,  pBinCtx + iCtxInc, uiCode));
+  WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine,  pBinCtx + iCtxInc, &uiCode));
   if (uiCode) {
-    WELS_READ_VERIFY (DecodeUEGMvCabac (pCtx->pCabacDecEngine, pBinCtx + 3, 3, uiCode));
-    iMvdVal = (int16_t) (uiCode + 1);
-    WELS_READ_VERIFY (DecodeBypassCabac (pCtx->pCabacDecEngine, uiCode));
+    WELS_READ_VERIFY (DecodeUEGMvCabac (pCtx->pCabacDecEngine, pBinCtx + 3, 3, &uiCode));
+    *iMvdVal = (int16_t) (uiCode + 1);
+    WELS_READ_VERIFY (DecodeBypassCabac (pCtx->pCabacDecEngine, &uiCode));
     if (uiCode) {
-      iMvdVal = -iMvdVal;
+      *iMvdVal = -*iMvdVal;
     }
   } else {
-    iMvdVal = 0;
+    *iMvdVal = 0;
   }
   return ERR_NONE;
 }
 
-int32_t ParseCbpInfoCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t& uiCbp) {
-  int32_t iIdxA = 0, iIdxB = 0, pALeftMb[2], pBTopMb[2];
-  uiCbp = 0;
+int32_t ParseCbpInfoCabac (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, uint32_t *uiCbp) {
+  int32_t iIdxA, iIdxB, pALeftMb[2], pBTopMb[2];
+  *uiCbp = 0;
   uint32_t pCbpBit[6];
   int32_t iCtxInc;
 
@@ -1198,31 +1203,31 @@
 
   //left_top 8x8 block
   iCtxInc = pALeftMb[0] + (pBTopMb[0] << 1);
-  WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine, pCtx->pCabacCtx + NEW_CTX_OFFSET_CBP + iCtxInc, pCbpBit[0]));
+  WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine, pCtx->pCabacCtx + NEW_CTX_OFFSET_CBP + iCtxInc, &pCbpBit[0]));
   if (pCbpBit[0])
-    uiCbp += 0x01;
+    *uiCbp += 0x01;
 
   //right_top 8x8 block
   iIdxA = !pCbpBit[0];
   iCtxInc = iIdxA + (pBTopMb[1] << 1);
-  WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine, pCtx->pCabacCtx + NEW_CTX_OFFSET_CBP + iCtxInc, pCbpBit[1]));
+  WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine, pCtx->pCabacCtx + NEW_CTX_OFFSET_CBP + iCtxInc, &pCbpBit[1]));
   if (pCbpBit[1])
-    uiCbp += 0x02;
+    *uiCbp += 0x02;
 
   //left_bottom 8x8 block
   iIdxB = !pCbpBit[0];
   iCtxInc = pALeftMb[1] + (iIdxB << 1);
-  WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine, pCtx->pCabacCtx + NEW_CTX_OFFSET_CBP + iCtxInc, pCbpBit[2]));
+  WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine, pCtx->pCabacCtx + NEW_CTX_OFFSET_CBP + iCtxInc, &pCbpBit[2]));
   if (pCbpBit[2])
-    uiCbp += 0x04;
+    *uiCbp += 0x04;
 
   //right_bottom 8x8 block
   iIdxB = !pCbpBit[1];
   iIdxA = !pCbpBit[2];
   iCtxInc = iIdxA + (iIdxB << 1);
-  WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine, pCtx->pCabacCtx + NEW_CTX_OFFSET_CBP + iCtxInc, pCbpBit[3]));
+  WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine, pCtx->pCabacCtx + NEW_CTX_OFFSET_CBP + iCtxInc, &pCbpBit[3]));
   if (pCbpBit[3])
-    uiCbp += 0x08;
+    *uiCbp += 0x08;
 
   if (pCtx->pSps->uiChromaFormatIdc == 0)//monochroma
     return ERR_NONE;
@@ -1235,7 +1240,7 @@
   //BitIdx = 0
   iCtxInc = iIdxA + (iIdxB << 1);
   WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine, pCtx->pCabacCtx + NEW_CTX_OFFSET_CBP + CTX_NUM_CBP + iCtxInc,
-                                    pCbpBit[4]));
+                                    &pCbpBit[4]));
 
   //BitIdx = 1
   if (pCbpBit[4]) {
@@ -1244,8 +1249,8 @@
     iCtxInc = iIdxA + (iIdxB << 1);
     WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine,
                                       pCtx->pCabacCtx + NEW_CTX_OFFSET_CBP + 2 * CTX_NUM_CBP + iCtxInc,
-                                      pCbpBit[5]));
-    uiCbp += 1 << (4 + pCbpBit[5]);
+                                      &pCbpBit[5]));
+    *uiCbp += 1 << (4 + pCbpBit[5]);
 
   }
 
@@ -1252,26 +1257,26 @@
   return ERR_NONE;
 }
 
-int32_t ParseDeltaQpCabac (PWelsDecoderContext pCtx, int32_t& iQpDelta) {
+int32_t ParseDeltaQpCabac (PWelsDecoderContext pCtx, int32_t *iQpDelta) {
   uint32_t uiCode;
   PSlice pCurrSlice = & (pCtx->pCurDqLayer->sLayerInfo.sSliceInLayer);
-  iQpDelta = 0;
+  *iQpDelta = 0;
   PWelsCabacCtx pBinCtx = pCtx->pCabacCtx + NEW_CTX_OFFSET_DELTA_QP;
   int32_t iCtxInc = (pCurrSlice->iLastDeltaQp != 0);
-  WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine, pBinCtx + iCtxInc, uiCode));
+  WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine, pBinCtx + iCtxInc, &uiCode));
   if (uiCode != 0) {
-    WELS_READ_VERIFY (DecodeUnaryBinCabac (pCtx->pCabacDecEngine, pBinCtx + 2, 1, uiCode));
+    WELS_READ_VERIFY (DecodeUnaryBinCabac (pCtx->pCabacDecEngine, pBinCtx + 2, 1, &uiCode));
     uiCode++;
-    iQpDelta = (uiCode + 1) >> 1;
+    *iQpDelta = (uiCode + 1) >> 1;
     if ((uiCode & 1) == 0)
-      iQpDelta = - iQpDelta;
+      *iQpDelta = -*iQpDelta;
   }
-  pCurrSlice->iLastDeltaQp = iQpDelta;
+  pCurrSlice->iLastDeltaQp = *iQpDelta;
   return ERR_NONE;
 }
 
 int32_t ParseCbfInfoCabac (PWelsNeighAvail pNeighAvail, uint8_t* pNzcCache, int32_t iZIndex, int32_t iResProperty,
-                           PWelsDecoderContext pCtx, uint32_t& uiCbfBit) {
+                           PWelsDecoderContext pCtx, uint32_t *uiCbfBit) {
   int8_t nA, nB/*, zigzag_idx = 0*/;
   int32_t iCurrBlkXy = pCtx->pCurDqLayer->iMbXyIndex;
   int32_t iTopBlkXy = iCurrBlkXy - pCtx->pCurDqLayer->iMbWidth; //default value: MB neighboring
@@ -1279,7 +1284,7 @@
   uint16_t* pCbfDc = pCtx->pCurDqLayer->pCbfDc;
   uint32_t* pMbType = pCtx->pCurDqLayer->pDec->pMbType;
   int32_t iCtxInc;
-  uiCbfBit = 0;
+  *uiCbfBit = 0;
   nA = nB = (int8_t)!!IS_INTRA (pMbType[iCurrBlkXy]);
 
   if (iResProperty == I16_LUMA_DC || iResProperty == CHROMA_DC_U || iResProperty == CHROMA_DC_V) { //DC
@@ -1290,7 +1295,7 @@
     iCtxInc = nA + (nB << 1);
     WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine,
                                       pCtx->pCabacCtx + NEW_CTX_OFFSET_CBF + g_kBlockCat2CtxOffsetCBF[iResProperty] + iCtxInc, uiCbfBit));
-    if (uiCbfBit)
+    if (*uiCbfBit)
       pCbfDc[iCurrBlkXy] |= (1 << iResProperty);
   } else { //AC
     //for 4x4 blk, make sure blk-idx is correct
@@ -1313,7 +1318,7 @@
 }
 
 int32_t ParseSignificantMapCabac (int32_t* pSignificantMap, int32_t iResProperty, PWelsDecoderContext pCtx,
-                                  uint32_t& uiCoeffNum) {
+                                  uint32_t *uiCoeffNum) {
   uint32_t uiCode;
 
   PWelsCabacCtx pMapCtx  = pCtx->pCabacCtx + (iResProperty == LUMA_DC_AC_8 ? NEW_CTX_OFFSET_MAP_8x8 : NEW_CTX_OFFSET_MAP)
@@ -1323,7 +1328,7 @@
 
 
   int32_t i;
-  uiCoeffNum = 0;
+  *uiCoeffNum = 0;
   int32_t i0 = 0;
   int32_t i1 = g_kMaxPos[iResProperty];
 
@@ -1332,13 +1337,13 @@
   for (i = i0; i < i1; ++i) {
     iCtx = (iResProperty == LUMA_DC_AC_8 ? g_kuiIdx2CtxSignificantCoeffFlag8x8[i] : i);
     //read significant
-    WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine, pMapCtx + iCtx, uiCode));
+    WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine, pMapCtx + iCtx, &uiCode));
     if (uiCode) {
       * (pSignificantMap++) = 1;
-      ++ uiCoeffNum;
+      ++(*uiCoeffNum);
       //read last significant
       iCtx = (iResProperty == LUMA_DC_AC_8 ? g_kuiIdx2CtxLastSignificantCoeffFlag8x8[i] : i);
-      WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine, pLastCtx + iCtx, uiCode));
+      WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine, pLastCtx + iCtx, &uiCode));
       if (uiCode) {
         memset (pSignificantMap, 0, (i1 - i) * sizeof (int32_t));
         return ERR_NONE;
@@ -1351,7 +1356,7 @@
   //if(i < i1+1)
   {
     *pSignificantMap = 1;
-    ++uiCoeffNum;
+    ++(*uiCoeffNum);
   }
 
   return ERR_NONE;
@@ -1371,10 +1376,10 @@
   int32_t c2 = 0;
   for (; i >= 0; --i) {
     if (*pCoff != 0) {
-      WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine, pOneCtx + c1, uiCode));
+      WELS_READ_VERIFY (DecodeBinCabac (pCtx->pCabacDecEngine, pOneCtx + c1, &uiCode));
       *pCoff += uiCode;
       if (*pCoff == 2) {
-        WELS_READ_VERIFY (DecodeUEGLevelCabac (pCtx->pCabacDecEngine, pAbsCtx + c2, uiCode));
+        WELS_READ_VERIFY (DecodeUEGLevelCabac (pCtx->pCabacDecEngine, pAbsCtx + c2, &uiCode));
         *pCoff += uiCode;
         ++c2;
         c2 = WELS_MIN (c2, iMaxType);
@@ -1383,7 +1388,7 @@
         ++c1;
         c1 = WELS_MIN (c1, 4);
       }
-      WELS_READ_VERIFY (DecodeBypassCabac (pCtx->pCabacDecEngine, uiCode));
+      WELS_READ_VERIFY (DecodeBypassCabac (pCtx->pCabacDecEngine, &uiCode));
       if (uiCode)
         *pCoff = - *pCoff;
     }
@@ -1395,6 +1400,7 @@
 int32_t ParseResidualBlockCabac8x8 (PWelsNeighAvail pNeighAvail, uint8_t* pNonZeroCountCache, SBitStringAux* pBsAux,
                                     int32_t iIndex, int32_t iMaxNumCoeff, const uint8_t* pScanTable, int32_t iResProperty,
                                     short* sTCoeff, /*int mb_mode*/ uint8_t uiQp, PWelsDecoderContext pCtx) {
+  USED(iMaxNumCoeff); USED(pBsAux); USED(pNeighAvail);
   uint32_t uiTotalCoeffNum = 0;
   uint32_t uiCbpBit;
   int32_t pSignificantMap[64] = {0};
@@ -1406,7 +1412,7 @@
 
   uiCbpBit = 1; // for 8x8, MaxNumCoeff == 64 && uiCbpBit == 1
   if (uiCbpBit) { //has coeff
-    WELS_READ_VERIFY (ParseSignificantMapCabac (pSignificantMap, iResProperty, pCtx, uiTotalCoeffNum));
+    WELS_READ_VERIFY (ParseSignificantMapCabac (pSignificantMap, iResProperty, pCtx, &uiTotalCoeffNum));
     WELS_READ_VERIFY (ParseSignificantCoeffCabac (pSignificantMap, iResProperty, pCtx));
   }
 
@@ -1436,6 +1442,7 @@
                                  int32_t iIndex, int32_t iMaxNumCoeff,
                                  const uint8_t* pScanTable, int32_t iResProperty, short* sTCoeff, /*int mb_mode*/ uint8_t uiQp,
                                  PWelsDecoderContext pCtx) {
+  USED(iMaxNumCoeff); USED(pBsAux);
   int32_t iCurNzCacheIdx;
   uint32_t uiTotalCoeffNum = 0;
   uint32_t uiCbpBit;
@@ -1446,9 +1453,9 @@
   const uint16_t* pDeQuantMul = (pCtx->bUseScalingList) ? pCtx->pDequant_coeff4x4[iMbResProperty][uiQp] :
                                 g_kuiDequantCoeff[uiQp];
 
-  WELS_READ_VERIFY (ParseCbfInfoCabac (pNeighAvail, pNonZeroCountCache, iIndex, iResProperty, pCtx, uiCbpBit));
+  WELS_READ_VERIFY (ParseCbfInfoCabac (pNeighAvail, pNonZeroCountCache, iIndex, iResProperty, pCtx, &uiCbpBit));
   if (uiCbpBit) { //has coeff
-    WELS_READ_VERIFY (ParseSignificantMapCabac (pSignificantMap, iResProperty, pCtx, uiTotalCoeffNum));
+    WELS_READ_VERIFY (ParseSignificantMapCabac (pSignificantMap, iResProperty, pCtx, &uiTotalCoeffNum));
     WELS_READ_VERIFY (ParseSignificantCoeffCabac (pSignificantMap, iResProperty, pCtx));
   }
 
@@ -1552,10 +1559,9 @@
   WELS_READ_VERIFY (InitCabacDecEngineFromBS (pCabacDecEngine, pBsAux));
   return ERR_NONE;
 }
-void    UpdateP8x8RefCacheIdxCabac (int8_t pRefIndex[LIST_A][30], const int16_t& iPartIdx,
-                                    const int32_t& listIdx, const int8_t& iRef) {
+void    UpdateP8x8RefCacheIdxCabac (int8_t pRefIndex[LIST_A][30], const int16_t iPartIdx,
+                                    const int32_t listIdx, const int8_t iRef) {
   const uint8_t uiCacheIdx = g_kuiCache30ScanIdx[iPartIdx];
   pRefIndex[listIdx][uiCacheIdx] = pRefIndex[listIdx][uiCacheIdx + 1] = pRefIndex[listIdx][uiCacheIdx + 6] =
                                      pRefIndex[listIdx][uiCacheIdx + 7] = iRef;
-}
 }
--- a/codec/decoder/core/src/parse_mb_syn_cavlc.cpp
+++ b/codec/decoder/core/src/parse_mb_syn_cavlc.cpp
@@ -44,7 +44,6 @@
 #include "error_code.h"
 #include "mv_pred.h"
 
-namespace WelsDec {
 #define MAX_LEVEL_PREFIX 15
 
 typedef struct TagReadBitsCache {
@@ -680,8 +679,7 @@
 
 
 // return: used bits
-static int32_t CavlcGetTrailingOnesAndTotalCoeff (uint8_t& uiTotalCoeff, uint8_t& uiTrailingOnes,
-    SReadBitsCache* pBitsCache, SVlcTable* pVlcTable, bool bChromaDc, int8_t nC) {
+static int32_t CavlcGetTrailingOnesAndTotalCoeff (uint8_t *uiTotalCoeff, uint8_t *uiTrailingOnes, SReadBitsCache* pBitsCache, SVlcTable* pVlcTable, bool bChromaDc, int8_t nC) {
   const uint8_t* kpVlcTableMoreBitsCountList[3] = {g_kuiVlcTableMoreBitsCount0, g_kuiVlcTableMoreBitsCount1, g_kuiVlcTableMoreBitsCount2};
   int32_t iUsedBits = 0;
   int32_t iIndexVlc, iIndexValue, iNcMapIdx;
@@ -694,8 +692,8 @@
     uiCount        = pVlcTable->kpChromaCoeffTokenVlcTable[uiValue][1];
     POP_BUFFER (pBitsCache, uiCount);
     iUsedBits     += uiCount;
-    uiTrailingOnes = g_kuiVlcTrailingOneTotalCoeffTable[iIndexVlc][0];
-    uiTotalCoeff   = g_kuiVlcTrailingOneTotalCoeffTable[iIndexVlc][1];
+    *uiTrailingOnes = g_kuiVlcTrailingOneTotalCoeffTable[iIndexVlc][0];
+    *uiTotalCoeff   = g_kuiVlcTrailingOneTotalCoeffTable[iIndexVlc][1];
   } else { //luma
     iNcMapIdx = g_kuiNcMapTable[nC];
     if (iNcMapIdx <= 2) {
@@ -712,6 +710,7 @@
         iIndexVlc  = pVlcTable->kpCoeffTokenVlcTable[0][iNcMapIdx][uiValue][0];
         uiCount    = pVlcTable->kpCoeffTokenVlcTable[0][iNcMapIdx][uiValue][1];
         uiValue    = pBitsCache->uiCache32Bit >> (32 - uiCount);
+        USED(uiValue);
         POP_BUFFER (pBitsCache, uiCount);
         iUsedBits += uiCount;
       }
@@ -721,8 +720,8 @@
       iUsedBits += 6;
       iIndexVlc  = pVlcTable->kpCoeffTokenVlcTable[0][3][uiValue][0];  //differ
     }
-    uiTrailingOnes = g_kuiVlcTrailingOneTotalCoeffTable[iIndexVlc][0];
-    uiTotalCoeff  = g_kuiVlcTrailingOneTotalCoeffTable[iIndexVlc][1];
+    *uiTrailingOnes = g_kuiVlcTrailingOneTotalCoeffTable[iIndexVlc][0];
+    *uiTotalCoeff  = g_kuiVlcTrailingOneTotalCoeffTable[iIndexVlc][1];
   }
 
   return iUsedBits;
@@ -781,7 +780,7 @@
   return iUsedBits;
 }
 
-static int32_t CavlcGetTotalZeros (int32_t& iZerosLeft, SReadBitsCache* pBitsCache, uint8_t uiTotalCoeff,
+static int32_t CavlcGetTotalZeros (int32_t *iZerosLeft, SReadBitsCache* pBitsCache, uint8_t uiTotalCoeff,
                                    SVlcTable* pVlcTable, bool bChromaDc) {
   int32_t iCount, iUsedBits = 0;
   const uint8_t* kpBitNumMap;
@@ -808,7 +807,7 @@
   iCount     = pVlcTable->kpTotalZerosTable[uiTableType][iTotalZeroVlcIdx - 1][uiValue][1];
   POP_BUFFER (pBitsCache, iCount);
   iUsedBits += iCount;
-  iZerosLeft = pVlcTable->kpTotalZerosTable[uiTableType][iTotalZeroVlcIdx - 1][uiValue][0];
+  *iZerosLeft = pVlcTable->kpTotalZerosTable[uiTableType][iTotalZeroVlcIdx - 1][uiValue][0];
 
   return iUsedBits;
 }
@@ -898,7 +897,7 @@
 
   WELS_NON_ZERO_COUNT_AVERAGE (nC, nA, nB);
 
-  iUsedBits += CavlcGetTrailingOnesAndTotalCoeff (uiTotalCoeff, uiTrailingOnes, &sReadBitsCache, pVlcTable, bChromaDc,
+  iUsedBits += CavlcGetTrailingOnesAndTotalCoeff (&uiTotalCoeff, &uiTrailingOnes, &sReadBitsCache, pVlcTable, bChromaDc,
                nC);
 
   if (iResidualProperty != CHROMA_DC && iResidualProperty != I16_LUMA_DC) {
@@ -917,7 +916,7 @@
   }
   iUsedBits += i;
   if (uiTotalCoeff < iMaxNumCoeff) {
-    iUsedBits += CavlcGetTotalZeros (iZerosLeft, &sReadBitsCache, uiTotalCoeff, pVlcTable, bChromaDc);
+    iUsedBits += CavlcGetTotalZeros (&iZerosLeft, &sReadBitsCache, uiTotalCoeff, pVlcTable, bChromaDc);
   } else {
     iZerosLeft = 0;
   }
@@ -1017,7 +1016,7 @@
 
   WELS_NON_ZERO_COUNT_AVERAGE (nC, nA, nB);
 
-  iUsedBits += CavlcGetTrailingOnesAndTotalCoeff (uiTotalCoeff, uiTrailingOnes, &sReadBitsCache, pVlcTable, bChromaDc,
+  iUsedBits += CavlcGetTrailingOnesAndTotalCoeff (&uiTotalCoeff, &uiTrailingOnes, &sReadBitsCache, pVlcTable, bChromaDc,
                nC);
 
   if (iResidualProperty != CHROMA_DC && iResidualProperty != I16_LUMA_DC) {
@@ -1036,7 +1035,7 @@
   }
   iUsedBits += i;
   if (uiTotalCoeff < iMaxNumCoeff) {
-    iUsedBits += CavlcGetTotalZeros (iZerosLeft, &sReadBitsCache, uiTotalCoeff, pVlcTable, bChromaDc);
+    iUsedBits += CavlcGetTotalZeros (&iZerosLeft, &sReadBitsCache, uiTotalCoeff, pVlcTable, bChromaDc);
   } else {
     iZerosLeft = 0;
   }
@@ -1357,13 +1356,13 @@
     SubMbType subMbType;
     if (pSliceHeader->iDirectSpatialMvPredFlag) {
       //predict direct spatial mv
-      int32_t ret = PredMvBDirectSpatial (pCtx, pMvDirect, iRef, subMbType);
+      int32_t ret = PredMvBDirectSpatial (pCtx, pMvDirect, iRef, &subMbType);
       if (ret != ERR_NONE) {
         return ret;
       }
     } else {
       //temporal direct 16x16 mode
-      int32_t ret = PredBDirectTemporal (pCtx, pMvDirect, iRef, subMbType);
+      int32_t ret = PredBDirectTemporal (pCtx, pMvDirect, iRef, &subMbType);
       if (ret != ERR_NONE) {
         return ret;
       }
@@ -1562,7 +1561,7 @@
       if (IS_DIRECT (g_ksInterBSubMbTypeInfo[uiSubMbType].iType)) {
         if (!has_direct_called) {
           if (pSliceHeader->iDirectSpatialMvPredFlag) {
-            int32_t ret = PredMvBDirectSpatial (pCtx, pMvDirect, iRef, directSubMbType);
+            int32_t ret = PredMvBDirectSpatial (pCtx, pMvDirect, iRef, &directSubMbType);
             if (ret != ERR_NONE) {
               return ret;
             }
@@ -1569,7 +1568,7 @@
 
           } else {
             //temporal direct mode
-            int32_t ret = PredBDirectTemporal (pCtx, pMvDirect, iRef, directSubMbType);
+            int32_t ret = PredBDirectTemporal (pCtx, pMvDirect, iRef, &directSubMbType);
             if (ret != ERR_NONE) {
               return ret;
             }
@@ -1722,4 +1721,3 @@
   }
   return ERR_NONE;
 }
-} // namespace WelsDec
--- a/codec/decoder/core/src/pic_queue.cpp
+++ b/codec/decoder/core/src/pic_queue.cpp
@@ -42,8 +42,6 @@
 #include "codec_def.h"
 #include "memory_align.h"
 
-namespace WelsDec {
-
 void FreePicture (PPicture pPic, CMemoryAlign* pMa);
 
 
@@ -60,14 +58,14 @@
 
 
 PPicture AllocPicture (PWelsDecoderContext pCtx, const int32_t kiPicWidth, const int32_t kiPicHeight) {
-  PPicture pPic = NULL;
-  int32_t iPicWidth = 0;
-  int32_t iPicHeight = 0;
+  PPicture pPic;
+  int32_t iPicWidth;
+  int32_t iPicHeight;
 
-  int32_t iPicChromaWidth   = 0;
-  int32_t iPicChromaHeight  = 0;
-  int32_t iLumaSize         = 0;
-  int32_t iChromaSize       = 0;
+  int32_t iPicChromaWidth;
+  int32_t iPicChromaHeight;
+  int32_t iLumaSize;
+  int32_t iChromaSize;
   CMemoryAlign* pMa = pCtx->pMemAlign;
 
   pPic = (PPicture) pMa->WelsMallocz (sizeof (SPicture), "PPicture");
@@ -89,7 +87,7 @@
     pPic->iLinesize[0] = iPicWidth;
     pPic->iLinesize[1] = pPic->iLinesize[2] = iPicChromaWidth;
   } else {
-    pPic->pBuffer[0] = static_cast<uint8_t*> (pMa->WelsMallocz (iLumaSize /* luma */
+    pPic->pBuffer[0] = (uint8_t*) (pMa->WelsMallocz (iLumaSize /* luma */
                        + (iChromaSize << 1) /* Cb,Cr */, "_pic->buffer[0]"));
     WELS_VERIFY_RETURN_PROC_IF (NULL, NULL == pPic->pBuffer[0], FreePicture (pPic, pMa));
 
@@ -177,11 +175,10 @@
       pPic->pReadyEvent = NULL;
     }
     pMa->WelsFree (pPic, "pPic");
-    pPic = NULL;
   }
 }
 PPicture PrefetchPic (PPicBuff pPicBuf) {
-  int32_t iPicIdx = 0;
+  int32_t iPicIdx;
   PPicture pPic  = NULL;
 
   if (pPicBuf->iCapacity == 0) {
@@ -216,7 +213,7 @@
 }
 
 PPicture PrefetchPicForThread (PPicBuff pPicBuf) {
-  PPicture pPic = NULL;
+  PPicture pPic;
 
   if (pPicBuf->iCapacity == 0) {
     return NULL;
@@ -229,7 +226,7 @@
   return pPic;
 }
 
-PPicture PrefetchLastPicForThread (PPicBuff pPicBuf, const int32_t& iLastPicBuffIdx) {
+PPicture PrefetchLastPicForThread (PPicBuff pPicBuf, const int32_t iLastPicBuffIdx) {
   PPicture pPic = NULL;
 
   if (pPicBuf->iCapacity == 0) {
@@ -240,5 +237,3 @@
   }
   return pPic;
 }
-
-} // namespace WelsDec
--- a/codec/decoder/core/src/rec_mb.cpp
+++ b/codec/decoder/core/src/rec_mb.cpp
@@ -42,8 +42,6 @@
 #include "rec_mb.h"
 #include "decode_slice.h"
 
-namespace WelsDec {
-
 void WelsFillRecNeededMbInfo (PWelsDecoderContext pCtx, bool bOutput, PDqLayer pCurDqLayer) {
   PPicture pCurPic = pCtx->pDec;
   int32_t iLumaStride   = pCurPic->iLinesize[0];
@@ -82,7 +80,7 @@
   PIdctResAddPredFunc pIdctResAddPredFunc = pCtx->pIdctResAddPredFunc8x8;
 
   /*************local variable********************/
-  uint8_t i = 0;
+  uint8_t i;
   bool bTLAvail[4], bTRAvail[4];
   // Top-Right : Left : Top-Left : Top
   bTLAvail[0] = !! (pDqLayer->pIntraNxNAvailFlag[iMbXy] & 0x02);
@@ -137,7 +135,7 @@
 
 
   /*************local variable********************/
-  uint8_t i = 0;
+  uint8_t i;
 
   /*************real process*********************/
   for (i = 0; i < 16; i++) {
@@ -214,7 +212,7 @@
 
 
 //according to current 8*8 block ref_index to gain reference picture
-static inline int32_t GetRefPic (sMCRefMember* pMCRefMem, PWelsDecoderContext pCtx, const int8_t& iRefIdx,
+static inline int32_t GetRefPic (sMCRefMember* pMCRefMem, PWelsDecoderContext pCtx, const int8_t iRefIdx,
                                  int32_t listIdx) {
   PPicture pRefPic;
 
@@ -241,7 +239,7 @@
 #ifndef MC_FLOW_SIMPLE_JUDGE
 #define MC_FLOW_SIMPLE_JUDGE 1
 #endif //MC_FLOW_SIMPLE_JUDGE
-void BaseMC (PWelsDecoderContext pCtx, sMCRefMember* pMCRefMem, const int32_t& listIdx, const int8_t& iRefIdx,
+void BaseMC (PWelsDecoderContext pCtx, sMCRefMember* pMCRefMem, const int32_t listIdx, const int8_t iRefIdx,
              int32_t iXOffset, int32_t iYOffset,
              SMcFunc* pMCFunc,
              int32_t iBlkWidth, int32_t iBlkHeight, int16_t iMVs[2]) {
@@ -265,7 +263,7 @@
     }
     int32_t offset = (iFullMVy >> 2) + iBlkHeight + 3 + 16;
     if (offset > pCtx->lastReadyHeightOffset[listIdx][iRefIdx]) {
-      const int32_t down_line = WELS_MIN (offset >> 4, int32_t (pCtx->sMb.iMbHeight) - 1);
+      const int32_t down_line = WELS_MIN (offset >> 4, (int32_t) (pCtx->sMb.iMbHeight) - 1);
       if (pRefPic->pReadyEvent[down_line].isSignaled != 1) {
         WAIT_EVENT (&pRefPic->pReadyEvent[down_line], WELS_DEC_THREAD_WAIT_INFINITE);
       }
@@ -302,7 +300,7 @@
 
   int32_t iLog2denom, iWoc, iOoc;
   int32_t iPredTemp, iLineStride;
-  int32_t iPixel = 0;
+  int32_t iPixel;
   uint8_t* pDst;
   //luma
   iLog2denom = pCurDqLayer->pPredWeightTable->uiLumaLog2WeightDenom;
@@ -366,9 +364,9 @@
 static void BiWeightPrediction (PDqLayer pCurDqLayer, sMCRefMember* pMCRefMem, sMCRefMember* pTempMCRefMem,
                                 int32_t iRefIdx1, int32_t iRefIdx2, bool bWeightedBipredIdcIs1, int32_t iBlkWidth,
                                 int32_t iBlkHeight) {
-  int32_t iWoc1 = 0, iOoc1 = 0, iWoc2 = 0, iOoc2 = 0;
+  int32_t iWoc1, iOoc1 = 0, iWoc2, iOoc2 = 0;
   int32_t iPredTemp, iLineStride;
-  int32_t iPixel = 0;
+  int32_t iPixel;
   //luma
   int32_t iLog2denom = pCurDqLayer->pPredWeightTable->uiLumaLog2WeightDenom;
   if (bWeightedBipredIdcIs1) {
@@ -424,8 +422,9 @@
 
 static void BiPrediction (PDqLayer pCurDqLayer, sMCRefMember* pMCRefMem, sMCRefMember* pTempMCRefMem, int32_t iBlkWidth,
                           int32_t iBlkHeight) {
+  USED(pCurDqLayer);
   int32_t iPredTemp, iLineStride;
-  int32_t iPixel = 0;
+  int32_t iPixel;
   //luma
   iLineStride = pMCRefMem->iDstLineLuma;
 
@@ -488,7 +487,7 @@
   pMCRefMem.iDstLineLuma   = iDstLineLuma;
   pMCRefMem.iDstLineChroma = iDstLineChroma;
 
-  int8_t iRefIndex = 0;
+  int8_t iRefIndex;
 
   switch (iMBType) {
   case MB_TYPE_SKIP:
@@ -701,7 +700,7 @@
 
   int8_t iRefIndex0 = 0;
   int8_t iRefIndex1 = 0;
-  int8_t iRefIndex = 0;
+  int8_t iRefIndex;
 
   bool bWeightedBipredIdcIs1 = pCurDqLayer->sLayerInfo.pPps->uiWeightedBipredIdc == 1;
 
@@ -1058,7 +1057,7 @@
   int32_t iChromaStride = pCtx->pCurDqLayer->pDec->iLinesize[1];
   PIdctFourResAddPredFunc pIdctFourResAddPredFunc = pCtx->pIdctFourResAddPredFunc;
 
-  uint8_t i = 0;
+  uint8_t i;
   uint8_t uiCbpC = pDqLayer->pCbp[iMBXY] >> 4;
 
   if (1 == uiCbpC || 2 == uiCbpC) {
@@ -1074,5 +1073,3 @@
 
   return ERR_NONE;
 }
-
-} // namespace WelsDec
--- a/codec/decoder/core/src/wels_decoder_thread.cpp
+++ b/codec/decoder/core/src/wels_decoder_thread.cpp
@@ -38,29 +38,7 @@
  *************************************************************************************
  */
 
-
-#ifdef __linux__
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-#include <sched.h>
-#elif !defined(_WIN32) && !defined(__CYGWIN__)
-#include <sys/types.h>
-#include <sys/param.h>
-#include <unistd.h>
-#ifndef __Fuchsia__
-#include <sys/sysctl.h>
-#endif
-#ifdef __APPLE__
-#define HW_NCPU_NAME "hw.logicalcpu"
-#else
-#define HW_NCPU_NAME "hw.ncpu"
-#endif
-#endif
-
 #include "wels_decoder_thread.h"
-#include <stdio.h>
-#include <stdlib.h>
 
 int32_t GetCPUCount() {
   WelsLogicalProcessInfo pInfo;
--- /dev/null
+++ b/codec/mkfile
@@ -1,0 +1,55 @@
+</$objtype/mkfile
+
+LIB=libopenh264.a
+
+CFLAGS=$CFLAGS -p -D__plan9__ -D__${objtype}__ -Iapi/svc -Icommon/inc -Idecoder/core/inc/
+
+OFILES=\
+	au_parser.$O\
+	bit_stream.$O\
+	cabac_decoder.$O\
+	deblocking.$O\
+	decode_mb_aux.$O\
+	decode_slice.$O\
+	decoder.$O\
+	decoder_core.$O\
+	decoder_data_tables.$O\
+	error_concealment.$O\
+	fmo.$O\
+	get_intra_predictor.$O\
+	manage_dec_ref.$O\
+	memmgr_nal_unit.$O\
+	mv_pred.$O\
+	parse_mb_syn_cabac.$O\
+	parse_mb_syn_cavlc.$O\
+	pic_queue.$O\
+	rec_mb.$O\
+	\
+	common_tables.$O\
+	copy_mb.$O\
+	crt_util_safe_x.$O\
+	deblocking_common.$O\
+	expand_pic.$O\
+	intra_pred_common.$O\
+	mc.$O\
+	sad_common.$O\
+	utils.$O\
+	\
+	plan9.$O\
+
+#	wels_decoder_thread.$O\
+
+UPDATE=\
+	mkfile\
+	$HFILES\
+	${OFILES:%.$O=%.c}\
+	${TARG:%=%.c}\
+	${LIB}\
+
+</sys/src/cmd/mklib
+
+%.$O: decoder/core/src/%.cpp
+	$CC $CFLAGS -o $target decoder/core/src/$stem.cpp
+
+%.$O: common/src/%.cpp
+	$CC $CFLAGS -o $target common/src/$stem.cpp
--- /dev/null
+++ b/codec/plan9.c
@@ -1,0 +1,92 @@
+#include "decoder.h"
+
+uint32_t
+WelsCPUFeatureDetect(int32_t *pNumberOfLogicProcessors)
+{
+	char *s;
+
+	s = getenv("NPROC");
+	*pNumberOfLogicProcessors = s ? atoi(s) : 0;
+
+	return 0;
+}
+
+void
+EventPost(SWelsDecEvent* e)
+{
+	USED(e);
+}
+
+int
+EventCreate(SWelsDecEvent *e, int manualReset, int initialState)
+{
+	USED(e, manualReset, initialState);
+	return 0;
+}
+
+int
+EventWait(SWelsDecEvent *e, int32_t timeout)
+{
+	USED(e, timeout);
+	return 0;
+}
+
+void
+EventDestroy(SWelsDecEvent *e)
+{
+	USED(e);
+}
+
+void
+EventReset(SWelsDecEvent *e)
+{
+	USED(e);
+}
+
+void *
+WelsMallocz(const uint32_t kuiSize, const char *kpTag)
+{
+	void *p;
+	USED(kpTag);
+	if((p = mallocalign(kuiSize, 16, 0, 0)) == nil)
+		return nil;
+	return memset(p, 0, kuiSize);
+}
+
+static void *
+WelsMalloc(const uint32_t kuiSize, const char *kpTag)
+{
+	USED(kpTag);
+	return mallocalign(kuiSize, 16, 0, 0);
+}
+
+void
+WelsFree(void *pPointer, const char *kpTag)
+{
+	USED(kpTag);
+	free(pPointer);
+}
+
+static uint32_t
+WelsGetCacheLineSize(void)
+{
+	return 16;
+}
+
+static uint32_t
+WelsGetMemoryUsage(void)
+{
+	return 0;
+}
+
+CMemoryAlign cMemoryAlign = {
+#ifdef MEMORY_MONITOR
+	.m_nMemoryUsageInBytes = 0,
+#endif
+	.m_nCacheLineSize = 16,
+	.WelsMallocz = WelsMallocz,
+	.WelsMalloc = WelsMalloc,
+	.WelsFree = WelsFree,
+	.WelsGetCacheLineSize = WelsGetCacheLineSize,
+	.WelsGetMemoryUsage = WelsGetMemoryUsage,
+};