📄 umc_color_space_converter_cbycr.cpp
字号:
nCurWeight -= nWeight; lpDst = Pixel; ++lpDst; }; }; };} // void resize_hor_CbYCr(void *lpvSrc, IppSize SizeSrc, size_t lPitchSrc, void *lpvDst, IppSize SizeDst, size_t lPitchDst)void ColorSpaceConverter::ResizeCbYCr(ColorConversionParams &ConvertParam){ vm_byte *lpYUV; IppiSize SizeSrc = {ConvertParam.ConversionInit.SizeSource.width, ConvertParam.ConversionInit.SizeSource.height}; IppiSize SizeDst = {ConvertParam.ConversionInit.SizeDest.width, ConvertParam.ConversionInit.SizeDest.height}; IppiRect RectSrc = {0, 0, SizeSrc.width, SizeSrc.height}; IppiRect RectDst = {0, 0, SizeDst.width, SizeDst.height}; size_t lPitchYUV; if (ConvertParam.ConversionInit.FormatDest != ConvertParam.ConversionInit.FormatSource) { size_t lNeededSize; // correct dest size(s) SizeDst.width = (SizeDst.width + 1) & ~(1); // calc needed internal buffer size lNeededSize = SizeDst.width * SizeDst.height * 2; if (lNeededSize > m_lBufferSize) { if (false == AllocateInternalBuffer(lNeededSize)) return; }; lpYUV = reinterpret_cast<vm_byte *> (m_lpvBuffer); lPitchYUV = SizeDst.width * 2; } else { lpYUV = ConvertParam.lpDest0; lPitchYUV = ConvertParam.PitchDest0; }; // check additional free space { size_t lNeedSpace; lNeedSpace = SizeDst.height * SizeSrc.width * 2; if ((m_lAdditionalSize < lNeedSpace) && (false == AllocateInternalBuffer(lNeedSpace, m_lAdditionalSize, m_lpvAdditional))) return; } // resize YUV // step 1: change vertical size in additional buffer size RectSrc.width *= 2; SizeSrc.width *= 2; SizeDst.width = SizeSrc.width;//#if !defined (ARM) & !defined (_ARM_) ippiResize_8u_C1R( ConvertParam.lpSource0, SizeSrc, ConvertParam.PitchSource0, RectSrc, reinterpret_cast<vm_byte *> (m_lpvAdditional), SizeDst.width, SizeDst, 1.0, static_cast<double> (RectDst.height) / static_cast<double> (RectSrc.height), ConvertParam.ConversionInit.lInterpolation);//#endif // step 2: change horizontal size in internal buffer SizeSrc.width /= 2; SizeSrc.height = SizeDst.height; SizeDst.width = (ConvertParam.ConversionInit.SizeDest.width + 1) & ~(1); resize_hor_CbYCr( m_lpvAdditional, SizeSrc, SizeSrc.width * 2, lpYUV, SizeDst, lPitchYUV); if (ConvertParam.ConversionInit.FormatDest != ConvertParam.ConversionInit.FormatSource) { // save new pointer(s) ConvertParam.ConversionInit.SizeSource = ConvertParam.ConversionInit.SizeDest; ConvertParam.lpSource0 = lpYUV; ConvertParam.PitchSource0 = ConvertParam.ConversionInit.SizeSource.width * 2; };} // void ColorSpaceConverter::ResizeCbYCr(ColorConversionParams &ConvertParam)void ColorSpaceConverter::ConvertFrom_CbYCr_To_YV12(ColorConversionParams &ConvertParam){ // different size. Do resize if ((ConvertParam.ConversionInit.SizeSource.width != ConvertParam.ConversionInit.SizeDest.width) || (ConvertParam.ConversionInit.SizeSource.height != ConvertParam.ConversionInit.SizeDest.height)) { // resize image to internal buffer ResizeCbYCr(ConvertParam); }//#if !defined (ARM) && !defined (_ARM_) // equal size. simple convert { vm_byte *(pDst[3]) = {ConvertParam.lpDest0, ConvertParam.lpDest1, ConvertParam.lpDest2}; int dstStep[3] = { ConvertParam.PitchDest0, ConvertParam.PitchDest1, ConvertParam.PitchDest2}; IppiSize roiSize = {ConvertParam.ConversionInit.SizeDest.width, ConvertParam.ConversionInit.SizeDest.height}; ippiCbYCr422ToYCrCb420_8u_C2P3R(ConvertParam.lpSource0, ConvertParam.PitchSource0, pDst, dstStep, roiSize); }//#endif} // void ColorSpaceConverter::ConvertFrom_CbYCr_To_YV12(ColorConversionParams &ConvertParam)void ColorSpaceConverter::ConvertFrom_CbYCr_To_NV12(ColorConversionParams &ConvertParam){ // different size. Do resize if ((ConvertParam.ConversionInit.SizeSource.width != ConvertParam.ConversionInit.SizeDest.width) || (ConvertParam.ConversionInit.SizeSource.height != ConvertParam.ConversionInit.SizeDest.height)) { // resize image to internal buffer ResizeCbYCr(ConvertParam); }//#if !defined (ARM) && !defined (_ARM_) // equal size. simple convert { IppiSize roiSize = {ConvertParam.ConversionInit.SizeDest.width, ConvertParam.ConversionInit.SizeDest.height}; ippiCbYCr422ToYCbCr420_8u_C2P2R(ConvertParam.lpSource0, ConvertParam.PitchSource0, ConvertParam.lpDest0, ConvertParam.PitchDest0, ConvertParam.lpDest1, ConvertParam.PitchDest1, roiSize); };//#endif} // void ColorSpaceConverter::ConvertFrom_CbYCr_To_NV12(ColorConversionParams &ConvertParam)void ColorSpaceConverter::ConvertFrom_CbYCr_To_CbYCr(ColorConversionParams &ConvertParam){ // different size. Do resize if ((ConvertParam.ConversionInit.SizeSource.width != ConvertParam.ConversionInit.SizeDest.width) || (ConvertParam.ConversionInit.SizeSource.height != ConvertParam.ConversionInit.SizeDest.height)) { // resize image to internal buffer ResizeCbYCr(ConvertParam); } else { IppiSize Size = {ConvertParam.ConversionInit.SizeDest.width, ConvertParam.ConversionInit.SizeDest.height}; Size.width *= 2; // equal size. simple copy ippiCopy_8u_C1R( ConvertParam.lpSource0, ConvertParam.PitchSource0, ConvertParam.lpDest0, ConvertParam.PitchDest0, Size); };} // void ColorSpaceConverter::ConvertFrom_CbYCr_To_CbYCr(ColorConversionParams &ConvertParam)void ColorSpaceConverter::ConvertFrom_CbYCr_To_YCbCr(ColorConversionParams &ConvertParam){ // different size. Do resize if ((ConvertParam.ConversionInit.SizeSource.width != ConvertParam.ConversionInit.SizeDest.width) || (ConvertParam.ConversionInit.SizeSource.height != ConvertParam.ConversionInit.SizeDest.height)) { // resize image to internal buffer ResizeCbYCr(ConvertParam); }//#if !defined (ARM) && !defined (_ARM_) // equal size. simple convert { IppiSize roiSize = {ConvertParam.ConversionInit.SizeDest.width, ConvertParam.ConversionInit.SizeDest.height}; ippiCbYCr422ToYCbCr422_8u_C2R(ConvertParam.lpSource0, ConvertParam.PitchSource0, ConvertParam.lpDest0, ConvertParam.PitchDest0, roiSize); };//#endif} // void ColorSpaceConverter::ConvertFrom_CbYCr_To_YCbCr(ColorConversionParams &ConvertParam)void ColorSpaceConverter::ConvertFrom_CbYCr_To_YUV411(ColorConversionParams &/*ConvertParam*/){ vm_debug_msg(0, __VM_STRING("This function isn't realized."));} // void ColorSpaceConverter::ConvertFrom_CbYCr_To_YUV411(ColorConversionParams &ConvertParam)void ColorSpaceConverter::ConvertFrom_CbYCr_To_YUV420(ColorConversionParams &/*ConvertParam*/){ vm_debug_msg(0, __VM_STRING("This function isn't realized."));} // void ColorSpaceConverter::ConvertFrom_CbYCr_To_YUV420(ColorConversionParams &ConvertParam)void ColorSpaceConverter::ConvertFrom_CbYCr_To_YUV420M(ColorConversionParams &/*ConvertParam*/){ vm_debug_msg(0, __VM_STRING("This function isn't realized."));} // void ColorSpaceConverter::ConvertFrom_CbYCr_To_YUV420M(ColorConversionParams &ConvertParam)void ColorSpaceConverter::ConvertFrom_CbYCr_To_RGB32(ColorConversionParams &ConvertParam){ // different size. Do resize if ((ConvertParam.ConversionInit.SizeSource.width != ConvertParam.ConversionInit.SizeDest.width) || (ConvertParam.ConversionInit.SizeSource.height != ConvertParam.ConversionInit.SizeDest.height)) { // resize image to internal buffer ResizeCbYCr(ConvertParam); } // equal size. simple convert//#if !defined (ARM) && !defined (_ARM_) IppiSize SizeDest = {ConvertParam.ConversionInit.SizeDest.width, ConvertParam.ConversionInit.SizeDest.height}; ippiCbYCr422ToBGR_8u_C2C4R( ConvertParam.lpSource0, ConvertParam.PitchSource0, ConvertParam.lpDest0, ConvertParam.PitchDest0, SizeDest, 0);//#endif} // void ColorSpaceConverter::ConvertFrom_CbYCr_To_RGB32(ColorConversionParams &ConvertParam)void ColorSpaceConverter::ConvertFrom_CbYCr_To_RGB24(ColorConversionParams &/*ConvertParam*/){ vm_debug_msg(0, __VM_STRING("This function isn't realized."));} // void ColorSpaceConverter::ConvertFrom_CbYCr_To_RGB24(ColorConversionParams &ConvertParam)void ColorSpaceConverter::ConvertFrom_CbYCr_To_RGB565(ColorConversionParams &/*ConvertParam*/){ vm_debug_msg(0, __VM_STRING("This function isn't realized."));} // void ColorSpaceConverter::ConvertFrom_CbYCr_To_RGB565(ColorConversionParams &ConvertParam)void ColorSpaceConverter::ConvertFrom_CbYCr_To_RGB555(ColorConversionParams &/*ConvertParam*/){ vm_debug_msg(0, __VM_STRING("This function isn't realized."));} // void ColorSpaceConverter::ConvertFrom_CbYCr_To_RGB555(ColorConversionParams &ConvertParam)void ColorSpaceConverter::ConvertFrom_CbYCr_To_RGB444(ColorConversionParams &/*ConvertParam*/){ vm_debug_msg(0, __VM_STRING("This function isn't realized."));} // void ColorSpaceConverter::ConvertFrom_CbYCr_To_RGB444(ColorConversionParams &ConvertParam)} // end namespace UMC
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -