tools.h
资源名称:tcpmp.rar [点击查看]
上传用户:wstnjxml
上传日期:2014-04-03
资源大小:7248k
文件大小:11k
源码类别:
Windows CE
开发平台:
C/C++
- /*****************************************************************************
- *
- * 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
- *
- * $Id: tools.h 607 2006-01-22 20:58:29Z picard $
- *
- * The Core Pocket Media Player
- * Copyright (c) 2004-2005 Gabor Kovacs
- *
- ****************************************************************************/
- #ifndef __TOOLS_H
- #define __TOOLS_H
- #define ALIGN64(x) (((x) + 63) & ~63)
- #define ALIGN16(x) (((x) + 15) & ~15)
- #define ALIGN8(x) (((x) + 7) & ~7)
- #define ALIGN4(x) (((x) + 3) & ~3)
- #define GET_R(x) ((uint8_t)(((x) >> 0) & 255))
- #define GET_G(x) ((uint8_t)(((x) >> 8) & 255))
- #define GET_B(x) ((uint8_t)(((x) >> 16) & 255))
- //some helper functions
- static INLINE bool_t EqInt(const int* a, const int* b) { return *a == *b; }
- static INLINE bool_t EqBool(const bool_t* a, const bool_t* b) { return *a == *b; }
- static INLINE bool_t EqPtr(void** a, void** b) { return *a == *b; }
- DLL void* Alloc16(size_t); //aligned to 16 bytes
- DLL void Free16(void*);
- DLL bool_t EqPoint(const point* a, const point* b);
- DLL bool_t EqRect(const rect* a, const rect* b);
- DLL bool_t EqPixel(const pixel* a, const pixel* b);
- DLL bool_t EqVideo(const video* a, const video* b);
- DLL bool_t EqFrac(const fraction* a, const fraction* b);
- DLL bool_t EqAudio(const audio* a, const audio* b);
- DLL bool_t EqSubtitle(const subtitle* a, const subtitle* b);
- DLL bool_t EqBlitFX(const blitfx* a, const blitfx* b);
- DLL void Simplify(fraction*, int MaxNum, int MaxDen);
- DLL void SwapPChar(tchar_t**, tchar_t**);
- DLL void SwapPByte(uint8_t**, uint8_t**);
- DLL void SwapInt(int*, int*);
- DLL void SwapLong(long*, long*);
- DLL void SwapBool(bool_t*, bool_t*);
- DLL void SwapPoint(point*);
- DLL void SwapRect(rect*);
- DLL void VirtToPhy(const rect* Virtual, rect* Physical, const video*);
- DLL void PhyToVirt(const rect* Physical, rect* Virtual, const video*);
- DLL void ClipRectPhy(rect* Physical, const video*);
- DLL bool_t Compressed(const pixel*);
- DLL bool_t AnyYUV(const pixel*);
- DLL bool_t PlanarYUV(const pixel*, int* UVX2, int* UVY2,int* UVStride2);
- DLL bool_t PlanarYUV444(const pixel*);
- DLL bool_t PlanarYUV422(const pixel*);
- DLL bool_t PlanarYUV410(const pixel*);
- DLL bool_t PlanarYUV420(const pixel*);
- DLL bool_t PackedYUV(const pixel*);
- DLL uint32_t DefFourCC(const pixel*);
- DLL void FillInfo(pixel*);
- DLL int GetImageSize(const video*);
- DLL int GetBPP(const pixel*);
- DLL int BitMaskSize(uint32_t Mask);
- DLL int BitMaskPos(uint32_t Mask);
- DLL uint32_t RGBToFormat(rgbval_t RGB, const pixel*);
- DLL int CombineDir(int SrcDir,int FXDir,int DstDir);
- DLL void FillColor(uint8_t* Dst,int DstPitch,int x,int y,int Width,int Height,int BPP,int Value);
- DLL int AnyAlign(rect* DstRect, rect* SrcRect, const blitfx* FX,
- int DstAlignSize, int DstAlignPos,
- int MinScale, int MaxScale);
- DLL int SurfaceAlloc(planes, const video*);
- DLL void SurfaceFree(planes);
- DLL int SurfaceCopy(const video* SrcFormat, const video* DstFormat,
- const planes Src, planes Dst, const blitfx* FX);
- DLL int SurfaceRotate(const video* SrcFormat, const video* DstFormat,
- const planes Src, planes Dst, int Dir);
- DLL int DefaultAspect(int,int);
- DLL void DefaultPitch(video*);
- DLL void DefaultRGB(pixel*, int BitCount,
- int RBits, int GBits, int BBits,
- int RGaps, int GGaps, int BGaps);
- DLL void BuildChapter(tchar_t* s,int slen,int No,int64_t Time,int Rate);
- // variable names: Result, Data, Size
- #define GETVALUE(Value,Type)
- {
- assert(Size == sizeof(Type));
- *(Type*)Data = Value;
- Result = ERR_NONE;
- }
- #define GETVALUECOND(Value,Type,Cond)
- {
- assert(Size == sizeof(Type));
- if (Cond)
- {
- *(Type*)Data = Value;
- Result = ERR_NONE;
- }
- }
- #define GETSTRING(Text)
- {
- tcscpy_s((tchar_t*)Data,Size/sizeof(tchar_t),Text);
- Result = ERR_NONE;
- }
- #define SETVALUE(Value,Type,Update)
- {
- assert(Size == sizeof(Type));
- Value = *(Type*)Data;
- Result = Update;
- }
- #define SETVALUENULL(Value,Type,Update,Null)
- {
- if (Data)
- {
- assert(Size == sizeof(Type));
- Value = *(Type*)Data;
- }
- else
- Null;
- Result = Update;
- }
- #define SETVALUECOND(Value,Type,Update,Cond)
- {
- assert(Size == sizeof(Type));
- if (Cond)
- {
- Value = *(Type*)Data;
- Result = Update;
- }
- }
- #define SETVALUECMP(Value,Type,Update,EqFunc)
- {
- assert(Size == sizeof(Type));
- Result = ERR_NONE;
- if (!EqFunc(&Value,(Type*)Data))
- {
- Value = *(Type*)Data;
- Result = Update;
- }
- }
- #define SETSTRING(Text)
- {
- tcscpy_s(Text,TSIZEOF(Text),(tchar_t*)Data);
- Result = ERR_NONE;
- }
- #define SETPACKETFORMAT(Value,Type,Update)
- {
- assert(Size == sizeof(Type) || !Data);
- Result = PacketFormatCopy(&Value,(Type*)Data);
- if (Result == ERR_NONE)
- Result = Update;
- }
- #define SETPACKETFORMATCMP(Value,Type,Update)
- {
- assert(Size == sizeof(Type) || !Data);
- Result = ERR_NONE;
- if (!EqPacketFormat(&Value,(Type*)Data))
- {
- Result = PacketFormatCopy(&Value,(Type*)Data);
- if (Result == ERR_NONE)
- Result = Update;
- }
- }
- DLL void SplitURL(const tchar_t* URL, tchar_t* Mime, int MimeLen, tchar_t* Dir, int DirLen, tchar_t* Name, int NameLen, tchar_t* Ext, int ExtLen);
- DLL bool_t SetFileExt(tchar_t* URL, int URLLen, const tchar_t* Ext);
- DLL int CheckExts(const tchar_t* URL, const tchar_t* Exts);
- DLL bool_t CheckContentType(const tchar_t* s, const tchar_t* List);
- DLL void AbsPath(tchar_t* Abs, int AbsLen, const tchar_t* Any, const tchar_t* Base);
- DLL void RelPath(tchar_t* Rel, int RelLen, const tchar_t* Any, const tchar_t* Base);
- DLL bool_t UpperPath(tchar_t* Path, tchar_t* Last, int LastLen);
- DLL bool_t UniqueExts(const int* Begin,const int* Pos);
- DLL void GetAsciiToken(tchar_t* Out,size_t OutLen,const char* In,size_t InLen);
- #define SWAP32(a) ((((uint32_t)(a) >> 24) & 0x000000FF) | (((uint32_t)(a) >> 8) & 0x0000FF00)|
- (((uint32_t)(a) << 8) & 0x00FF0000) | (((uint32_t)(a) << 24) & 0xFF000000))
- #define SWAP16(a) ((uint16_t)((((uint32_t)(a) >> 8) & 0xFF) | (((uint32_t)(a) << 8) & 0xFF00)))
- #define SWAP64(a) (((uint64_t)SWAP32(a) << 32) | SWAP32((uint64_t)(a)>>32))
- #define RSHIFT_ROUND(v,n) (((v)+(1<<(n-1)))>>(n))
- #ifdef IS_BIG_ENDIAN
- #define INT64BE(a) (a)
- #define INT64LE(a) SWAP64(a)
- #define INT32BE(a) (a)
- #define INT32LE(a) SWAP32(a)
- #define INT16BE(a) (a)
- #define INT16LE(a) SWAP16(a)
- #else
- #define INT64LE(a) (a)
- #define INT64BE(a) SWAP64(a)
- #define INT32LE(a) (a)
- #define INT32BE(a) SWAP32(a)
- #define INT16LE(a) (a)
- #define INT16BE(a) SWAP16(a)
- #endif
- #if defined(CONFIG_UNALIGNED_ACCESS)
- #define LOAD16LE(ptr) INT16LE(*(uint16_t*)(ptr))
- #define LOAD16BE(ptr) INT16BE(*(uint16_t*)(ptr))
- #define LOAD32LE(ptr) INT32LE(*(uint32_t*)(ptr))
- #define LOAD32BE(ptr) INT32BE(*(uint32_t*)(ptr))
- #define LOAD64LE(ptr) INT64LE(*(uint64_t*)(ptr))
- #define LOAD64BE(ptr) INT64BE(*(uint64_t*)(ptr))
- #else
- #define LOAD8(ptr,ofs) (((uint8_t*)(ptr))[ofs])
- #define LOAD16LE(ptr) ((uint16_t)((LOAD8(ptr,1)<<8)|LOAD8(ptr,0)))
- #define LOAD16BE(ptr) ((uint16_t)((LOAD8(ptr,0)<<8)|LOAD8(ptr,1)))
- #define LOAD32LE(ptr) ((LOAD8(ptr,3)<<24)|(LOAD8(ptr,2)<<16)|(LOAD8(ptr,1)<<8)|LOAD8(ptr,0))
- #define LOAD32BE(ptr) ((LOAD8(ptr,0)<<24)|(LOAD8(ptr,1)<<16)|(LOAD8(ptr,2)<<8)|LOAD8(ptr,3))
- #define LOAD64LE(ptr) (((uint64_t)(LOAD8(ptr,0)) )|((uint64_t)(LOAD8(ptr,1))<< 8)|((uint64_t)(LOAD8(ptr,2))<<16)|((uint64_t)(LOAD8(ptr,3))<<24)|
- ((uint64_t)(LOAD8(ptr,4))<<32)|((uint64_t)(LOAD8(ptr,5))<<40)|((uint64_t)(LOAD8(ptr,6))<<48)|((uint64_t)(LOAD8(ptr,0))<<56)|)
- #define LOAD64BE(ptr) (((uint64_t)(LOAD8(ptr,0))<<56)|((uint64_t)(LOAD8(ptr,1))<<48)|((uint64_t)(LOAD8(ptr,2))<<40)|((uint64_t)(LOAD8(ptr,3))<<32)|
- ((uint64_t)(LOAD8(ptr,4))<<24)|((uint64_t)(LOAD8(ptr,5))<<16)|((uint64_t)(LOAD8(ptr,6))<< 8)|((uint64_t)(LOAD8(ptr,0)) )|)
- #endif
- #ifdef IS_BIG_ENDIAN
- #define LOAD16(ptr) LOAD16BE(ptr)
- #define LOAD32(ptr) LOAD32BE(ptr)
- #define LOAD64(ptr) LOAD64BE(ptr)
- #define LOAD16SW(ptr) LOAD16LE(ptr)
- #define LOAD32SW(ptr) LOAD32LE(ptr)
- #define LOAD64SW(ptr) LOAD64LE(ptr)
- #else
- #define LOAD16(ptr) LOAD16LE(ptr)
- #define LOAD32(ptr) LOAD32LE(ptr)
- #define LOAD64(ptr) LOAD64LE(ptr)
- #define LOAD16SW(ptr) LOAD16BE(ptr)
- #define LOAD32SW(ptr) LOAD32BE(ptr)
- #define LOAD64SW(ptr) LOAD64BE(ptr)
- #endif
- // a=(a+c+1)/2
- // b=(b+d+1)/2
- #define AVG32R(a,b,c,d)
- c^=a;
- d^=b;
- a|=c;
- b|=d;
- c &= 0xFEFEFEFE;
- d &= 0xFEFEFEFE;
- a-=c>>1;
- b-=d>>1;
- // a=(a+c)/2
- // b=(b+d)/2
- #ifdef ARM
- #define AVG32NR(a,b,c,d)
- c^=a;
- d^=b;
- a &= ~c;
- b &= ~d;
- c &= 0xFEFEFEFE;
- d &= 0xFEFEFEFE;
- a+=c>>1;
- b+=d>>1;
- #else
- #define AVG32NR(a,b,c,d)
- c^=a;
- d^=b;
- a|=c;
- b|=d;
- a-=c & 0x01010101;
- b-=d & 0x01010101;
- c &= 0xFEFEFEFE;
- d &= 0xFEFEFEFE;
- a-=c>>1;
- b-=d>>1;
- #endif
- static INLINE int _log2(uint32_t data)
- {
- int i;
- if (!data) ++data;
- for (i=0;data;++i)
- data >>= 1;
- return i;
- }
- DLL int ScaleRound(int v,int Num,int Den);
- static INLINE int Scale(int v,int Num,int Den)
- {
- if (Den)
- return (int)((int64_t)v * Num / Den);
- return 0;
- }
- static INLINE int Scale64(int v,int64_t Num,int64_t Den)
- {
- if (Den)
- return (int)((int64_t)v * Num / Den);
- return 0;
- }
- #define OFS(name,item) ((int)&(((name*)NULL)->item))
- #define WMVF_ID FOURCC('W','M','V','F')
- #define WMAF_ID FOURCC('W','M','A','F')
- extern DLL const nodedef WMVF;
- extern DLL const nodedef WMAF;
- #endif