diff options
Diffstat (limited to 'Src/libvp6/include/cclib.h')
-rw-r--r-- | Src/libvp6/include/cclib.h | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/Src/libvp6/include/cclib.h b/Src/libvp6/include/cclib.h new file mode 100644 index 00000000..ed58877f --- /dev/null +++ b/Src/libvp6/include/cclib.h @@ -0,0 +1,183 @@ +#ifndef _CCLIB_H +#define _CCLIB_H +#include "cpuidlib.h" + +#ifdef __cplusplus +extern "C" +{ +#else +#if !defined(bool) + typedef int bool; +#endif +#endif + +int InitCCLib( PROCTYPE CpuType ); + +void DeInitCCLib( void ); + +extern void (*RGB32toYV12)( unsigned char *RGBABuffer, int ImageWidth, int ImageHeight, + unsigned char *YBuffer, unsigned char *UBuffer, unsigned char *VBuffer, int SrcPitch,int DstPitch ); + +extern void (*RGB24toYV12)( unsigned char *RGBBuffer, int ImageWidth, int ImageHeight, + unsigned char *YBuffer, unsigned char *UBuffer, unsigned char *VBuffer, int SrcPitch,int DstPitch ); + +extern void (*UYVYtoYV12)( unsigned char *UYVYBuffer, int ImageWidth, int ImageHeight, + unsigned char *YBuffer, unsigned char *UBuffer, unsigned char *VBuffer, int SrcPitch,int DstPitch ); + +extern void (*YUY2toYV12)( unsigned char *UYVYBuffer, int ImageWidth, int ImageHeight, + unsigned char *YBuffer, unsigned char *UBuffer, unsigned char *VBuffer, int SrcPitch,int DstPitch ); + +extern void (*YVYUtoYV12)( unsigned char *YVYUBuffer, int ImageWidth, int ImageHeight, + unsigned char *YBuffer, unsigned char *UBuffer, unsigned char *VBuffer, int SrcPitch,int DstPitch ); + +extern void RGB24toYV12F +( + unsigned char *RGBBuffer, + int ImageWidth, + int ImageHeight, + unsigned char *YBuffer, + unsigned char *UBuffer, + unsigned char *VBuffer, + int SrcPitch, + int DstPitch +); + +extern void RGB32toYV12F +( + unsigned char *RGBBuffer, + int ImageWidth, + int ImageHeight, + unsigned char *YBuffer, + unsigned char *UBuffer, + unsigned char *VBuffer, + int SrcPitch, + int DstPitch +); + +extern void UYVYtoYV12F +( + unsigned char *UYVYBuffer, + int ImageWidth, + int ImageHeight, + unsigned char *YBuffer, + unsigned char *UBuffer, + unsigned char *VBuffer, + int SrcPitch, + int DstPitch +); + +extern void YUY2toYV12F +( + unsigned char *YUY2Buffer, + int ImageWidth, + int ImageHeight, + unsigned char *YBuffer, + unsigned char *UBuffer, + unsigned char *VBuffer, + int SrcPitch, + int DstPitch +); + +extern void YVYUtoYV12F +( + unsigned char *YVYUBuffer, + int ImageWidth, + int ImageHeight, + unsigned char *YBuffer, + unsigned char *UBuffer, + unsigned char *VBuffer, + int SrcPitch, + int DstPitch +); + +/* + * Macros to make it easier to call the needed functions + */ +#define CC_RGB32toYV12( _RGBABuffer, _ImageWidth, _ImageHeight, _YBuffer, _UBuffer, _VBuffer ) \ + (*RGB32toYV12)( _RGBABuffer, _ImageWidth, _ImageHeight, _YBuffer, _UBuffer, _VBuffer, _ImageWidth*4, _ImageWidth ) + +#define CC_RGB24toYV12( _RGBBuffer, _ImageWidth, _ImageHeight, _YBuffer, _UBuffer, _VBuffer ) \ + (*RGB24toYV12)( _RGBBuffer, _ImageWidth, _ImageHeight, _YBuffer, _UBuffer, _VBuffer, _ImageWidth*3, _ImageWidth ) + +#define CC_UYVYtoYV12( _UYVYBuffer, _ImageWidth, _ImageHeight, _YBuffer, _UBuffer, _VBuffer ) \ + (*UYVYtoYV12)( _UYVYBuffer, _ImageWidth, _ImageHeight, _YBuffer, _UBuffer, _VBuffer, _ImageWidth*2, _ImageWidth ) + +#define CC_YUY2toYV12( _YUY2Buffer, _ImageWidth, _ImageHeight, _YBuffer, _UBuffer, _VBuffer ) \ + (*YUY2toYV12)( _YUY2Buffer, _ImageWidth, _ImageHeight, _YBuffer, _UBuffer, _VBuffer, _ImageWidth*2, _ImageWidth ) + +#define CC_YVYUtoYV12( _YVYUBuffer, _ImageWidth, _ImageHeight, _YBuffer, _UBuffer, _VBuffer ) \ + (*YVYUtoYV12)( _YVYUBuffer, _ImageWidth, _ImageHeight, _YBuffer, _UBuffer, _VBuffer, _ImageWidth*2, _ImageWidth ) + +// super generic rgb to yuv color conversion can handle any rgb to yuv conversion +// provided r,g,b components are 1 byte apiece, and that the resulting y is 1 byte +extern void ConvertRGBtoYUV( + const unsigned char* const pucSourceR, const unsigned char* const pucSourceG, const unsigned char* const pucSourceB, + int width, int height, int rgb_step, int rgb_pitch, + unsigned char* const pucDestY, unsigned char* const pucDestU, unsigned char* const pucDestV, + int uv_width_shift, int uv_height_shift, + int y_step, int y_pitch,int uv_step,int uv_pitch); + +extern void ConvertRGBtoYUVI( + const unsigned char* const pucSourceR, const unsigned char* const pucSourceG, const unsigned char* const pucSourceB, + int iWidth, int iHeight, int iStepRGB, int iStrideRGB, + unsigned char* const pucDestY, unsigned char* const pucDestU, unsigned char* const pucDestV, + int uv_width_shift, int uv_height_shift, + int iStepY, int iStrideY, int iStepUV, int iStrideUV); + +// This assumes 3 byte RGB data with the same component ordering in the source and destination +extern void ConvertRGBtoRGB(const unsigned char* const pucSource, long lWidth, long lHeight, long lStepIn, long lStrideIn, + unsigned char* const pucDest, long lStepOut, long lStrideOut); + +extern void ConvertYUVtoRGB( + const unsigned char* const pucYPlane, const unsigned char* const pucUPlane, const unsigned char* const pucVPlane, + long lWidth, long lHeight, + long uv_width_shift, long uv_height_shift, // not used, should both be set to 1 + long lStepY, long lStrideY,long lStepUV, long lStrideUV, + unsigned char* const pucRPlane, unsigned char* const pucGPlane, unsigned char* const pucBPlane, + long lStepRGB, long lStrideRGB); + +extern void ConvertYUVItoRGB( + const unsigned char* const pucYPlane, const unsigned char* const pucUPlane, const unsigned char* const pucVPlane, + long lWidth, long lHeight, + long uv_width_shift, long uv_height_shift, // not used, should both be set to 1 + long lStepY, long lStrideY,long lStepUV, long lStrideUV, + unsigned char* const pucRPlane, unsigned char* const pucGPlane, unsigned char* const pucBPlane, + long lStepRGB, long lStrideRGB); + +extern void ConvertYUVtoRGB2( + const unsigned char* const pucYPlane, const unsigned char* const pucUPlane, const unsigned char* const pucVPlane, + long lWidth, long lHeight, + long uv_width_shift, long uv_height_shift, // not used, should both be set to 1 + long lStepY, long lStrideY,long lStepUV, long lStrideUV, + unsigned char* const pucRPlane, unsigned char* const pucGPlane, unsigned char* const pucBPlane, + long lStepRGB, long lStrideRGB, + bool bSupersampleHoriz, bool bSupersampleVert); + +extern void ConvertYUVItoRGB2( + const unsigned char* const pucYPlane, const unsigned char* const pucUPlane, const unsigned char* const pucVPlane, + long lWidth, long lHeight, + long uv_width_shift, long uv_height_shift, // not used, should both be set to 1 + long lStepY, long lStrideY,long lStepUV, long lStrideUV, + unsigned char* const pucRPlane, unsigned char* const pucGPlane, unsigned char* const pucBPlane, + long lStepRGB, long lStrideRGB, + bool bSupersampleHoriz, bool bSupersampleVert); + +// This assumes packed planar data +extern void ConvertYUVtoYUV(const unsigned char* const pucYIn, const unsigned char* const pucUV1In, const unsigned char* const pucUV2In, + long m_lWidth, long m_lHeight, + unsigned char* const pucYOut, unsigned char* const pucUV1Out, unsigned char* const pucUV2Out); + +// This assumes packed planar data +extern void ConvertYUVtoYUVI(const unsigned char* const pucYIn, const unsigned char* const pucUV1In, const unsigned char* const pucUV2In, + long m_lWidth, long m_lHeight, + unsigned char* const pucYOut, unsigned char* const pucUV1Out, unsigned char* const pucUV2Out); + +// This assumes packed planar data +extern void ConvertYUVItoYUV(const unsigned char* const pucYIn, const unsigned char* const pucUV1In, const unsigned char* const pucUV2In, + long m_lWidth, long m_lHeight, + unsigned char* const pucYOut, unsigned char* const pucUV1Out, unsigned char* const pucUV2Out); + +#ifdef __cplusplus +} +#endif +#endif /* _CCLIB_H */ |