#include #include #include #include #include #include #define IPAD 2 #define SHARED_MEMORY_SIZE 32 #define SHARED_MEMORY_SIZE_Y 32 #define BLOCK_SIZE SHARED_MEMORY_SIZE namespace YUVTailorAndBlender { enum COLORSPACE { RGB = 0x0000, I420 = 0x0001, NV12 = 0x0002, NV21 = 0x0003, YV12 = I420, YCbCr = NV12, }; extern __host__ void TurnNV12ToI420Classics(unsigned char* pNV12, int nWidth, int nHeight, unsigned char* pI420, int nPitch); extern __host__ void TurnNV12ToI420Dissociative(unsigned char* pNV12, int nWidth, int nHeight, unsigned char* pI420, int nPitch); extern __host__ void TurnCUDAFormatToI420(unsigned char* dataY, unsigned char* dataUV, size_t pitchY, size_t pitchUV, unsigned char* dstImage, int width, int height,CUstream* pStream = nullptr); extern __host__ void CopyPlane( unsigned char* pSrc, int nSrcWidth, int nSrcHeight, int nSrcPitch, unsigned char* pDst, int nDstWidth, int nDstHeight, int nDstPitch, int nCopyWidth, int nCopyHeight, int nCopyStartX, int nCopyStartY, unsigned int Type, CUstream* pStream ); extern __host__ void CropI420( unsigned char* pSrcY, int nSrcYPitch, unsigned char* pSrcU, int nSrcUPitch, unsigned char* pSrcV, int nSrcVPitch, unsigned char* pDstY, int nDstYPitch, unsigned char* pDstU, int nDstUPitch, unsigned char* pDstV, int nDstVPitch, int nCropWidth, int nCropHeight, int nCropStartX, int nCropStartY ); extern __host__ void GradientBlenderYUV( unsigned char* pRelateY, int YRelateStride, unsigned char* pRelateU, int URelateStride, unsigned char* pRelateV, int VRelateStride, unsigned char* pTargetY, int YTargetStride, unsigned char* pTargetU, int UTargetStride, unsigned char* pTargetV, int VTargetStride, int width, int height, float* pRelateMask, float* pTargetMask, int MaskStride, unsigned char* pDstY, int DstYStride, unsigned char* pDstU, int DstUStride, unsigned char* pDstV, int DstVStride, int DstWidth, int DstHeight ); void __global__ TurnNV12ToI420ClassicsKernal(unsigned char* pNV12, int nWidth, int nHeight, unsigned char* pI420, int nPitch); void __global__ CopyPlaneKernal(unsigned char* pNV12Y, int nWidth, int nHeight, unsigned char* pI420Y, int nPitch); void __global__ _CopyPlaneKernal( unsigned char* pSrc, int nSrcWidth, int nSrcHeight, int nSrcPitch, unsigned char* pDst, int nDstWidth, int nDstHeight, int nDstPitch, int nCopyWidth, int nCopyHeight, int nCopyStartX, int nCopyStartY, int nChannel); void __global__ TurnNV12ToI420DissociativeKernalUV(unsigned char* pNV12UV, int nWidth, int nHeight, unsigned char* pI420UV, int nPitch); void __global__ TurnCUDAFormatToI420Kernal(unsigned char* dataY, unsigned char* dataUV, size_t pitchY, size_t pitchUV, unsigned char* I420, int width, int height); void __global__ GradientBlenderYUVKernal( unsigned char* pRelateY, int YRelateStride, unsigned char* pRelateU, int URelateStride, unsigned char* pRelateV, int VRelateStride, unsigned char* pTargetY, int YTargetStride, unsigned char* pTargetU, int UTargetStride, unsigned char* pTargetV, int VTargetStride, int width, int height, float* pRelateMask, float* pTargetMask, int MaskStride, unsigned char* pDstY, int DstYStride, unsigned char* pDstU, int DstUStride, unsigned char* pDstV, int DstVStride ); void __global__ CropI420Kernel( unsigned char* pRelateY, int YRelateStride, unsigned char* pRelateU, int URelateStride, unsigned char* pRelateV, int VRelateStride, unsigned char* pTargetY, int YTargetStride, unsigned char* pTargetU, int UTargetStride, unsigned char* pTargetV, int VTargetStride, int nCropWidth, int nCropHeight, int nCropX,int nCropY, int DstWidth, int DstHeight ); cudaError_t setColorSpace2(float hue); }