⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scratchmem.h

📁 G.729的编解码C源码(使用Intel的IPP包)堪称效率最高
💻 H
字号:
/* /////////////////////////////////////////////////////////////////////////////////                  INTEL CORPORATION PROPRIETARY INFORMATION//     This software is supplied under the terms of a license agreement or//     nondisclosure agreement with Intel Corporation and may not be copied//     or disclosed except in accordance with the terms of that agreement.//          Copyright(c) 2002-2003 Intel Corporation. All Rights Reserved.//////  Purpose: scratch/stack memory managment header file//*/#ifndef __SCRATCHMEM_H__#define __SCRATCHMEM_H__#if (defined( __ICL ) || defined ( __ECL )) && (defined( _WIN32 ) && !defined( _WIN64 ))__INLINEIpp32s IPP_INT_PTR( const void* ptr )  {    union {        void*   Ptr;        Ipp32s  Int;    } dd;    dd.Ptr = (void*)ptr;    return dd.Int;}__INLINEIpp32u IPP_UINT_PTR( const void* ptr )  {    union {        void*   Ptr;        Ipp32u  Int;    } dd;    dd.Ptr = (void*)ptr;    return dd.Int;}#elif (defined( __ICL ) || defined ( __ECL )) && defined( _WIN64 )__INLINEIpp64s IPP_INT_PTR( const void* ptr )  {    union {        void*   Ptr;        Ipp64s  Int;    } dd;    dd.Ptr = (void*)ptr;    return dd.Int;}__INLINEIpp64u IPP_UINT_PTR( const void* ptr )  {    union {        void*    Ptr;        Ipp64u   Int;    } dd;    dd.Ptr = (void*)ptr;    return dd.Int;}#elif defined( __ICC ) && defined( linux32 )__INLINEIpp32s IPP_INT_PTR( const void* ptr )  {    union {        void*   Ptr;        Ipp32s  Int;    } dd;    dd.Ptr = (void*)ptr;    return dd.Int;}__INLINEIpp32u IPP_UINT_PTR( const void* ptr )  {    union {        void*   Ptr;        Ipp32u  Int;    } dd;    dd.Ptr = (void*)ptr;    return dd.Int;}#elif defined ( __ECC ) && defined( linux64 )__INLINEIpp64s IPP_INT_PTR( const void* ptr )  {    union {        void*   Ptr;        Ipp64s  Int;    } dd;    dd.Ptr = (void*)ptr;    return dd.Int;}__INLINEIpp64u IPP_UINT_PTR( const void* ptr )  {    union {        void*    Ptr;        Ipp64u   Int;    } dd;    dd.Ptr = (void*)ptr;    return dd.Int;}#else  #define IPP_INT_PTR( ptr )  ( (long)(ptr) )  #define IPP_UINT_PTR( ptr ) ( (unsigned long)(ptr) )#endif#define IPP_BYTES_TO_ALIGN(ptr, align) ((-(IPP_INT_PTR(ptr)&((align)-1)))&((align)-1))#define IPP_ALIGNED_PTR(ptr, align) (void*)( (char*)(ptr) + (IPP_BYTES_TO_ALIGN( ptr, align )) )#define IPP_MALLOC_ALIGNED_BYTES  32#define IPP_MALLOC_ALIGNED_0BYTES   0#define IPP_MALLOC_ALIGNED_1BYTES   1#define IPP_MALLOC_ALIGNED_8BYTES   8#define IPP_MALLOC_ALIGNED_16BYTES 16#define IPP_MALLOC_ALIGNED_32BYTES 32#define IPP_ALIGNED_ARRAY(align,arrtype,arrname,arrlength)\ arrtype arrname##AlignedArrBuff[arrlength+IPP_MALLOC_ALIGNED_##align##BYTES/sizeof(arrtype)];\ arrtype *arrname = (arrtype*)IPP_ALIGNED_PTR(arrname##AlignedArrBuff,align)__INLINE void* GetMemory(int arrlen, int sizeOfElem, char **CurPtr){   void *ret;   ret = (void*)IPP_ALIGNED_PTR(*CurPtr,sizeOfElem);   *CurPtr += (arrlen+1)*sizeOfElem;   return ret;}__INLINE void* GetAlignMemory(int align, int arrlen, int sizeOfElem, char **CurPtr){   void *ret;   ret = (void*)IPP_ALIGNED_PTR(*CurPtr,align);   *CurPtr += (arrlen+align/sizeOfElem)*sizeOfElem;   return ret;}#if !defined (SCRATCH_OLD)#if !defined (NO_SCRATCH_MEMORY_USED)   #define LOCAL_ALIGN_ARRAY(align,arrtype,arrname,arrlength,obj)\      arrtype *arrname = (arrtype *)GetAlignMemory(align,(arrlength),sizeof(arrtype),&obj##->Mem.CurPtr)   #define LOCAL_ARRAY(arrtype,arrname,arrlength,obj)\      arrtype *arrname = (arrtype *)GetMemory((arrlength),sizeof(arrtype),&obj##->Mem.CurPtr)#else   #define LOCAL_ALIGN_ARRAY(align,arrtype,arrname,arrlength,obj)\      arrtype arrname##AlignedArrBuff[arrlength+IPP_MALLOC_ALIGNED_##align##BYTES/sizeof(arrtype)];\      arrtype *arrname = (arrtype*)IPP_ALIGNED_PTR(arrname##AlignedArrBuff,align)   #define LOCAL_ARRAY(arrtype,arrname,arrlength,obj)\      arrtype arrname##AlignedArrBuff[arrlength+IPP_MALLOC_ALIGNED_1BYTES/sizeof(arrtype)];\      arrtype *arrname = (arrtype*)IPP_ALIGNED_PTR(arrname##AlignedArrBuff,1)#endif#else#if !defined (NO_SCRATCH_MEMORY_USED)   #define PRE_ALLOC_ARRAY(align,arrtype,arrname,arrlength)\      arrtype *arrname   #define LOCAL_ALIGN_ARRAY(align,arrtype,arrname,arrlength,obj)\      arrname = (arrtype*)IPP_ALIGNED_PTR(obj##->Mem.CurPtr,align);\      obj##->Mem.CurPtr += ((##arrlength##)+IPP_MALLOC_ALIGNED_##align##BYTES/sizeof(arrtype))*sizeof(arrtype)   #define LOCAL_ARRAY(arrtype,arrname,arrlength,obj)\      arrname = (arrtype*)IPP_ALIGNED_PTR(obj##->Mem.CurPtr,sizeof(arrtype));\      obj##->Mem.CurPtr += (##arrlength##+1)*sizeof(arrtype)#else   #define PRE_ALLOC_ARRAY(align,arrtype,arrname,arrlength)\      arrtype arrname##AlignedArrBuff[arrlength+IPP_MALLOC_ALIGNED_##align##BYTES/sizeof(arrtype)];\      arrtype *arrname = (arrtype*)IPP_ALIGNED_PTR(arrname##AlignedArrBuff,align)   #define LOCAL_ALIGN_ARRAY(align,arrtype,arrname,arrlength,obj)   #define LOCAL_ARRAY(arrtype,arrname,arrlength,obj)#endif#endif#if !defined (NO_SCRATCH_MEMORY_USED)   #pragma message("Scratch memory enabled")   #define LOCAL_ARRAY_FREE(arrtype,arrname,arrlength,obj)\      arrname=NULL;\      obj##->Mem.CurPtr -= (##arrlength##+1)*sizeof(arrtype)   #define LOCAL_ALIGN_ARRAY_FREE(align,arrtype,arrname,arrlength,obj)\      arrname=NULL;\      obj##->Mem.CurPtr -= ((##arrlength##)+IPP_MALLOC_ALIGNED_##align##BYTES/sizeof(arrtype))*sizeof(arrtype)   #define CLEAR_SCRATCH_MEMORY(obj)\      obj##->Mem.CurPtr = obj##->Mem.base   #define OPEN_SCRATCH_BLOCK(obj)\      obj##->Mem.VecPtr[obj##->Mem.offset] = IPP_INT_PTR(obj##->Mem.CurPtr);\      obj##->Mem.offset++   #define CLOSE_SCRATCH_BLOCK(obj)\      obj##->Mem.offset--;\      obj##->Mem.CurPtr = (char *)obj##->Mem.VecPtr[obj##->Mem.offset]#else   #define LOCAL_ARRAY_FREE(arrtype,arrname,arrlength,obj)   #define LOCAL_ALIGN_ARRAY_FREE(align,arrtype,arrname,arrlength,obj)   #define CLEAR_SCRATCH_MEMORY(obj)   #define OPEN_SCRATCH_BLOCK(obj)   #define CLOSE_SCRATCH_BLOCK(obj)#endif#endif /*__SCRATCHMEM_H__*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -