⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 umc_color_space_converter_yv12.cpp

📁 这是在PCA下的基于IPP库示例代码例子,在网上下了IPP的库之后,设置相关参数就可以编译该代码.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*////              INTEL CORPORATION PROPRIETARY INFORMATION//  This software is supplied under the terms of a license  agreement or//  nondisclosure agreement with Intel Corporation and may not be copied//  or disclosed except in  accordance  with the terms of that agreement.//    Copyright (c) 2003-2005 Intel Corporation. All Rights Reserved.//*/#include <stdlib.h>#include <ippi.h>#include <ippvc.h>#include <ippcc.h>#include "umc_color_space_converter.h"#include "vm_debug.h"namespace UMC{void ColorSpaceConverter::ResizeYV12(ColorConversionParams &ConvertParam){    vm_byte *lpY, *lpU, *lpV;    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 lPitchY, lPitchU, lPitchV;    // we need resize (into temporary buffer) with conversion (from it)    if (ConvertParam.ConversionInit.FormatDest != ConvertParam.ConversionInit.FormatSource)    {        size_t lNeededSize;        // correct dest size(s)        SizeDst.width = (SizeDst.width + 1) & ~(1);        SizeDst.height = (SizeDst.height + 1) & ~(1);        // calc needed internal buffer size        lNeededSize = (SizeDst.width * SizeDst.height * 3) / 2;        if (lNeededSize > m_lBufferSize)        {            if (false == AllocateInternalBuffer(lNeededSize))                return;        };        lpY = reinterpret_cast<vm_byte *> (m_lpvBuffer);        lpU = lpY + SizeDst.width * SizeDst.height;        lpV = lpU + (SizeDst.width * SizeDst.height) / 4;        lPitchY = SizeDst.width;        lPitchU = SizeDst.width / 2;        lPitchV = SizeDst.width / 2;    }    else    {        lpY = ConvertParam.lpDest0;        lpU = ConvertParam.lpDest1;        lpV = ConvertParam.lpDest2;        lPitchY = ConvertParam.PitchDest0;        lPitchU = ConvertParam.PitchDest1;        lPitchV = ConvertParam.PitchDest2;    };    // resize image to internal buffer    // resize Y//#if !defined (ARM) && !defined (_ARM_)    ippiResize_8u_C1R(  ConvertParam.lpSource0,                        SizeSrc,                        ConvertParam.PitchSource0,                        RectSrc,                        lpY,                        (Ipp32s) 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    // resize U & V    SizeSrc.width /= 2;    SizeSrc.height /= 2;    RectSrc.width /= 2;    RectSrc.height /= 2;    SizeDst.width /= 2;    SizeDst.height /= 2;    RectDst.width /= 2;    RectDst.height /= 2;//#if !defined (ARM) && !defined (_ARM_)    ippiResize_8u_C1R(  ConvertParam.lpSource1,                        SizeSrc,                        ConvertParam.PitchSource1,                        RectSrc,                        lpU,                        (Ipp32s) lPitchU,                        SizeDst,                        static_cast<double> (RectDst.width) / static_cast<double> (RectSrc.width),                        static_cast<double> (RectDst.height) / static_cast<double> (RectSrc.height),                        ConvertParam.ConversionInit.lInterpolation);    ippiResize_8u_C1R(  ConvertParam.lpSource2,                        SizeSrc,                        ConvertParam.PitchSource2,                        RectSrc,                        lpV,                        (Ipp32s) lPitchV,                        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    if (ConvertParam.ConversionInit.FormatDest != ConvertParam.ConversionInit.FormatSource)    {        // save new pointer(s)        ConvertParam.ConversionInit.SizeSource = ConvertParam.ConversionInit.SizeDest;        ConvertParam.lpSource0 = lpY;        ConvertParam.lpSource1 = lpU;        ConvertParam.lpSource2 = lpV;        ConvertParam.PitchSource0 = (vm_var32) lPitchY;        ConvertParam.PitchSource1 = (vm_var32) lPitchU;        ConvertParam.PitchSource2 = (vm_var32) lPitchV;    };} // void ColorSpaceConverter::ResizeYV12(ColorConversionParams &ConvertParam)void ColorSpaceConverter::ConvertFrom_YV12_To_YV12(ColorConversionParams &ConvertParam){    // different sizes. Do resize    if ((ConvertParam.ConversionInit.SizeSource.width != ConvertParam.ConversionInit.SizeDest.width) ||        (ConvertParam.ConversionInit.SizeSource.height != ConvertParam.ConversionInit.SizeDest.height))    {        // simple resize        ResizeYV12(ConvertParam);    }    else    // equal size. simple copy    {        IppiSize SizeDst = {ConvertParam.ConversionInit.SizeDest.width, ConvertParam.ConversionInit.SizeDest.height};        // copy Y        ippiCopy_8u_C1R(ConvertParam.lpSource0,                        ConvertParam.PitchSource0,                        ConvertParam.lpDest0,                        ConvertParam.PitchDest0,                        SizeDst);        SizeDst.width /= 2;        SizeDst.height /= 2;#if !defined(MT_WILSON)        // copy U        ippiCopy_8u_C1R(ConvertParam.lpSource1,                        ConvertParam.PitchSource1,                        ConvertParam.lpDest1,                        ConvertParam.PitchDest1,                        SizeDst);        // copy V        ippiCopy_8u_C1R(ConvertParam.lpSource2,                        ConvertParam.PitchSource2,                        ConvertParam.lpDest2,                        ConvertParam.PitchDest2,                        SizeDst);#else //  !defined(MT_WILSON)        // copy U        ippiCopy_8u_C1R(ConvertParam.lpSource1,                        ConvertParam.PitchSource1,                        ConvertParam.lpDest1,                        ConvertParam.PitchDest1 * 2,                        SizeDst);        ippiCopy_8u_C1R(ConvertParam.lpSource1,                        ConvertParam.PitchSource1,                        ConvertParam.lpDest1 + ConvertParam.PitchDest1,                        ConvertParam.PitchDest1 * 2,                        SizeDst);        // copy V        ippiCopy_8u_C1R(ConvertParam.lpSource2,                        ConvertParam.PitchSource2,                        ConvertParam.lpDest2,                        ConvertParam.PitchDest2 * 2,                        SizeDst);        ippiCopy_8u_C1R(ConvertParam.lpSource2,                        ConvertParam.PitchSource2,                        ConvertParam.lpDest2 + ConvertParam.PitchDest2,                        ConvertParam.PitchDest2 * 2,                        SizeDst);#endif //  !defined(MT_WILSON)    };} // void ColorSpaceConverter::ConvertFrom_YV12_To_YV12(ColorConversionParams &ConvertParam)void ColorSpaceConverter::ConvertFrom_YV12_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        ResizeYV12(ConvertParam);    }//#if !defined (ARM) && !defined (_ARM_)    // equal size. simple convert    {        const vm_byte *(pSrc[3]) = {ConvertParam.lpSource0,                                    ConvertParam.lpSource1,                                    ConvertParam.lpSource2};        size_t srcStep[3] = {ConvertParam.PitchSource0,                             ConvertParam.PitchSource1,                             ConvertParam.PitchSource2};        IppiSize roiSize = {ConvertParam.ConversionInit.SizeDest.width,                            ConvertParam.ConversionInit.SizeDest.height};        ippiYCrCb420ToYCbCr420_8u_P3P2R(pSrc,                                        (int *) srcStep,                                        ConvertParam.lpDest0,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -