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

📄 portab.h

📁 经过开源的H.264压缩算法代码
💻 H
字号:
/*****************************************************************************
 *
 *  T264 AVC CODEC
 *
 *  Copyright(C) 2004-2005 llcc <lcgate1@yahoo.com.cn>
 *               2004-2005 visionany <visionany@yahoo.com.cn>
 *
 *  This program is free software ; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation ; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY ; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program ; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 *
 ****************************************************************************/

#ifndef _PORTAB_H_
#define _PORTAB_H_

#include "config.h"

#define _RW
#define _R
#define _W
#define _INPUT
#define _OUTPUT

#define TRUE 1
#define FALSE 0

#if defined(_MSC_VER)
#define int8_t   char
#define uint8_t  unsigned char
#define int16_t  short
#define uint16_t unsigned short
#define int32_t  int
#define uint32_t unsigned int
#define int64_t  __int64
#define uint64_t unsigned __int64
#define ptr_t uint32_t

#define BYTE   uint8_t
#define INT32  int32_t
#define INT16  int16_t
#define UINT16 uint16_t
#define UINT32 uint32_t

#if defined(ARCH_IS_IA32)
#define BSWAP(a) __asm mov eax,a __asm bswap eax __asm mov a, eax

         static __inline uint64_t read_counter(void)
         {
             __asm {
                 rdtsc
             }
         }

#define SWAP(type, x, y) { type* _tmp_; _tmp_ = x; x = y ; y = _tmp_;}
#define CLIP1(x) (x & ~255) ? (-x >> 31) : x
#define ABS(x) ((x) > 0 ? (x) : -(x))

#else // ARCH_IS_IA32
#error Please port BSWAP to other platform!
#endif// ARCH_IS_IA32

// vc6 does not support __declspec(aligned(x)) instead we need vc6 + sp5(or more), here we do some test
#if _MSC_VER < 1200
#error We need vc6 or more higher version!
#else   // vc6 or higher
extern _declspec(align(16)) int32_t if_you_see_errors_here_please_install_vc6_sp5_or_higher[1];
#endif

#define DECLARE_ALIGNED_MATRIX(name,sizex,sizey,type,alignment) \
                __declspec(align(alignment)) type name[(sizex)*(sizey)]

#define DECLARE_ALIGNED_MATRIX_H(name,sizex,sizey,type,alignment) \
    __declspec(align(alignment)) type name[(sizex)*(sizey)]

#define DECLARE_ALIGNED2_MATRIX_H(name,sizex,sizey,type,alignment) \
    __declspec(align(alignment)) type name[(sizex)][(sizey)]

#endif // _MSC_VER

#ifdef __GCC__

#include <inttypes.h>

#define ptr_t uint32_t

#if defined(ARCH_IS_IA32)
#define BSWAP(a) __asm__ ( "bswapl %0\n" : "=r" (a) : "0" (a) );

         static __inline int64_t read_counter(void)
         {
             int64_t ts;
             uint32_t ts1, ts2;
             __asm__ __volatile__("rdtsc\n\t":"=a"(ts1), "=d"(ts2));
             ts = ((uint64_t) ts2 << 32) | ((uint64_t) ts1);
             return ts;
         }

#define SWAP(type, x, y) { type* _tmp_; _tmp_ = x; x = y ; y = _tmp_;}
#define CLIP1(x) (x & ~255) ? (-x >> 31) : x
#define ABS(x) ((x) > 0 ? (x) : -(x))

#else // ARCH_IS_IA32
#error Please port BSWAP to other platform!
#endif// ARCH_IS_IA32

#define DECLARE_ALIGNED_MATRIX(name,sizex,sizey,type,alignment) \
                type name[(sizex)*(sizey)] __attribute__((aligned(alignment)))
#define DECLARE_ALIGNED_MATRIX_H DECLARE_ALIGNED_MATRIX
#define DECLARE_ALIGNED2_MATRIX_H(name,sizex,sizey,type,alignment) \
                type name[(sizex)][(sizey)] __attribute__((aligned(alignment)))
#endif // __GCC__

//Ti_DSP Platform ported by YouXiaoquan,HFUT-Ti United Lab,China
//YouXiaoquan@126.com
#ifdef CHIP_DM642
#define int8_t   char
#define uint8_t  unsigned char
#define int16_t  short
#define uint16_t unsigned short
#define int32_t  int
#define uint32_t unsigned int
#define int64_t  long
#define uint64_t unsigned long
#define ptr_t uint32_t

#define BYTE   uint8_t
#define INT32  int32_t
#define INT16  int16_t
#define UINT16 uint16_t
#define UINT32 uint32_t

#define BSWAP(a) { \
                unsigned int _temp0,_temp1,_temp2,_temp3,_temp4;\
                _temp1=(a & 0xFF00FF00)>>8;\
                _temp0=(a & 0x00FF00FF)<<8;\
                _temp2=_temp0+_temp1;\
                _temp3=(_temp2 & 0x0000FFFF)<<16;\
                _temp4=(_temp2 & 0xFFFF0000)>>16;\
                     a=_temp3+_temp4;\
                }
         static __inline uint64_t read_counter(void)
         { 
          /*
             __asm {
                 rdtsc
             }
          *///Port to Ti_Platform
          return clock();
         }

#define SWAP(type, x, y) { type* _tmp_; _tmp_ = x; x = y ; y = _tmp_;}
#define CLIP1(x) (x & ~255) ? (-x >> 31) : x
#define ABS(x) ((x) > 0 ? (x) : -(x))

#define DECLARE_ALIGNED_MATRIX(name,sizex,sizey,type,alignment) \
                type name[(sizex)*(sizey)]
#define DECLARE_ALIGNED_MATRIX_H(name,sizex,sizey,type,alignment) \
                type name[(sizex)*(sizey)]
#define DECLARE_ALIGNED2_MATRIX_H(name,sizex,sizey,type,alignment) \
                type name[(sizex)][(sizey)] 
#endif//// ported to Ti_Dsp_DM642 By You_xiaoQuan HFUT


static __inline int32_t
clip3(int32_t a, int32_t low, int32_t high)
{
    if (a < low)
        return low;
    
    if (a > high)
        return high;

    return a;
}
#endif // _PORTAB_H_

⌨️ 快捷键说明

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