📄 umc_color_space_converter_nv12.cpp
字号:
// resize image to internal buffer // resize Y//#if !defined (ARM) && !defined (_ARM_) ippiResize_8u_C1R( ConvertParam.lpSource0, SizeSrc, ConvertParam.PitchSource0, RectSrc, lpY, (vm_var32) lPitchY, SizeDst, static_cast<double> (RectDst.width) / static_cast<double> (RectSrc.width), static_cast<double> (RectDst.height) / static_cast<double> (RectSrc.height), ConvertParam.ConversionInit.lInterpolation);//#endif // !defined (ARM) && !defined (_ARM_) // check additional free space { size_t lNeedSpace; lNeedSpace = (SizeDst.height / 2) * (SizeSrc.width / 2) * 2; if ((m_lAdditionalSize < lNeedSpace) && (false == AllocateInternalBuffer(lNeedSpace, m_lAdditionalSize, m_lpvAdditional))) return; } // resize U & V // step 1: change vertical size in additional buffer size SizeSrc.height /= 2; SizeDst.width = SizeSrc.width; SizeDst.height /= 2; RectSrc.height /= 2; RectDst.width = RectSrc.width; RectDst.height /= 2;//#if !defined (ARM) && !defined (_ARM_) ippiResize_8u_C1R( ConvertParam.lpSource1, SizeSrc, ConvertParam.PitchSource1, 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 // !defined (ARM) && !defined (_ARM_) // step 2: change horizontal size in internal buffer SizeSrc.width /= 2; SizeSrc.height = SizeDst.height; SizeDst.width = ConvertParam.ConversionInit.SizeDest.width / 2; resize_hor_UV_merged( m_lpvAdditional, SizeSrc, SizeSrc.width * 2, lpUV, SizeDst, lPitchUV); if (ConvertParam.ConversionInit.FormatDest != ConvertParam.ConversionInit.FormatSource) { // save new pointer(s) ConvertParam.ConversionInit.SizeSource = ConvertParam.ConversionInit.SizeDest; ConvertParam.lpSource0 = lpY; ConvertParam.lpSource1 = lpUV; ConvertParam.PitchSource0 = (vm_var32) lPitchY; ConvertParam.PitchSource1 = (vm_var32) lPitchUV; };} // void ColorSpaceConverter::ResizeNV12(ColorConversionParams &ConvertParam)void ColorSpaceConverter::ConvertFrom_NV12_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 ResizeNV12(ConvertParam); } // equal size. simple convert { vm_byte *(lpDst[3]) = {ConvertParam.lpDest0, ConvertParam.lpDest1, ConvertParam.lpDest2}; int (iPitchDst[3]) = {ConvertParam.PitchDest0, ConvertParam.PitchDest1, ConvertParam.PitchDest2};//#if !defined (ARM) && !defined (_ARM_)#ifdef _OPENMP int count = ConvertParam.ConversionInit.SizeDest.height/16; IppiSize SizeDest = {ConvertParam.ConversionInit.SizeDest.width, 16};#pragma omp for for(int i = 0; i < count; i++) { ippiYCbCr420_8u_P2P3R(ConvertParam.lpSource0, ConvertParam.PitchSource0, ConvertParam.lpSource1, ConvertParam.PitchSource1, lpDst, iPitchDst, SizeDest); ConvertParam.lpSource0 += SizeDest.height*ConvertParam.PitchSource0; ConvertParam.lpSource1 += SizeDest.height/2*ConvertParam.PitchSource1; lpDst[0]+= SizeDest.height*iPitchDst[0]; lpDst[1]+= SizeDest.height/2*iPitchDst[1]; lpDst[2]+= SizeDest.height/2*iPitchDst[2]; }#else // !_OPENMP IppiSize SizeDest = {ConvertParam.ConversionInit.SizeDest.width, ConvertParam.ConversionInit.SizeDest.height}; ippiYCbCr420_8u_P2P3R(ConvertParam.lpSource0, ConvertParam.PitchSource0, ConvertParam.lpSource1, ConvertParam.PitchSource1, lpDst, iPitchDst, SizeDest);#endif // _OPENMP//#endif // !defined (ARM) && !defined (_ARM_) }} // void ColorSpaceConverter::ConvertFrom_NV12_To_YV12(ColorConversionParams &ConvertParam)void ColorSpaceConverter::ConvertFrom_NV12_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 ResizeNV12(ConvertParam); } else // equal size. simple copy { // convert Y IppiSize SizeDest = {ConvertParam.ConversionInit.SizeDest.width, ConvertParam.ConversionInit.SizeDest.height}; ippiCopy_8u_C1R(ConvertParam.lpSource0, ConvertParam.PitchSource0, ConvertParam.lpDest0, ConvertParam.PitchDest0, SizeDest); // convert U & V (ConvertParam.ConversionInit.SizeDest).height /= 2; SizeDest.width = ConvertParam.ConversionInit.SizeDest.width; SizeDest.height = ConvertParam.ConversionInit.SizeDest.height; ippiCopy_8u_C1R(ConvertParam.lpSource1, ConvertParam.PitchSource1, ConvertParam.lpDest1, ConvertParam.PitchDest1, SizeDest); }} // void ColorSpaceConverter::ConvertFrom_NV12_To_NV12(ColorConversionParams &ConvertParam)void ColorSpaceConverter::ConvertFrom_NV12_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 ResizeNV12(ConvertParam); }//#if !defined (ARM) && !defined (_ARM_) // equal size. simple convert { IppiSize roiSize = {ConvertParam.ConversionInit.SizeDest.width, ConvertParam.ConversionInit.SizeDest.height}; ippiYCbCr420ToCbYCr422_8u_P2C2R(ConvertParam.lpSource0, ConvertParam.PitchSource0, ConvertParam.lpSource1, ConvertParam.PitchSource1, ConvertParam.lpDest0, ConvertParam.PitchDest0, roiSize); }//#endif // !defined (ARM) && !defined (_ARM_)} // void ColorSpaceConverter::ConvertFrom_NV12_To_CbYCr(ColorConversionParams &ConvertParam)void ColorSpaceConverter::ConvertFrom_NV12_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 ResizeNV12(ConvertParam); }//#if !defined (ARM) && !defined (_ARM_) // equal size. simple convert { IppiSize SizeDest = {ConvertParam.ConversionInit.SizeDest.width, ConvertParam.ConversionInit.SizeDest.height}; ippiYCbCr420ToYCbCr422_8u_P2C2R(ConvertParam.lpSource0, ConvertParam.PitchSource0, ConvertParam.lpSource1, ConvertParam.PitchSource1, ConvertParam.lpDest0, ConvertParam.PitchDest0, SizeDest); }//#endif} // void ColorSpaceConverter::ConvertFrom_NV12_To_YCbCr(ColorConversionParams &ConvertParam)void ColorSpaceConverter::ConvertFrom_NV12_To_YUV411(ColorConversionParams &/*ConvertParam*/){ vm_debug_msg(0, __VM_STRING("This function isn't realized."));} // void ColorSpaceConverter::ConvertFrom_NV12_To_YUV411(ColorConversionParams &ConvertParam)void ColorSpaceConverter::ConvertFrom_NV12_To_YUV420(ColorConversionParams &/*ConvertParam*/){ vm_debug_msg(0, __VM_STRING("This function isn't realized."));} // void ColorSpaceConverter::ConvertFrom_NV12_To_YUV420(ColorConversionParams &ConvertParam)void ColorSpaceConverter::ConvertFrom_NV12_To_YUV420M(ColorConversionParams &/*ConvertParam*/){ vm_debug_msg(0, __VM_STRING("This function isn't realized."));} // void ColorSpaceConverter::ConvertFrom_NV12_To_YUV420M(ColorConversionParams &ConvertParam)void ColorSpaceConverter::ConvertFrom_NV12_To_RGB32(ColorConversionParams &/*ConvertParam*/){ vm_debug_msg(0, __VM_STRING("This function isn't realized."));} // void ColorSpaceConverter::ConvertFrom_NV12_To_RGB32(ColorConversionParams &ConvertParam)void ColorSpaceConverter::ConvertFrom_NV12_To_RGB24(ColorConversionParams &/*ConvertParam*/){ vm_debug_msg(0, __VM_STRING("This function isn't realized."));} // void ColorSpaceConverter::ConvertFrom_NV12_To_RGB24(ColorConversionParams &ConvertParam)void ColorSpaceConverter::ConvertFrom_NV12_To_RGB565(ColorConversionParams &/*ConvertParam*/){ vm_debug_msg(0, __VM_STRING("This function isn't realized."));} // void ColorSpaceConverter::ConvertFrom_NV12_To_RGB565(ColorConversionParams &ConvertParam)void ColorSpaceConverter::ConvertFrom_NV12_To_RGB555(ColorConversionParams &/*ConvertParam*/){ vm_debug_msg(0, __VM_STRING("This function isn't realized."));} // void ColorSpaceConverter::ConvertFrom_NV12_To_RGB555(ColorConversionParams &ConvertParam)void ColorSpaceConverter::ConvertFrom_NV12_To_RGB444(ColorConversionParams &/*ConvertParam*/){ vm_debug_msg(0, __VM_STRING("This function isn't realized."));} // void ColorSpaceConverter::ConvertFrom_NV12_To_RGB444(ColorConversionParams &ConvertParam)} // end namespace UMC
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -