zoukankan      html  css  js  c++  java
  • ipp 实现图像空间的转换

    下载:https://software.intel.com/en-us/parallel-studio-xe/choose-download/free-trial-cluster-windows-c-fortran

    使用:

    https://www.cnblogs.com/programmer-wfq/p/7049821.html

    void Rgb2NV12(const unsigned char I[],
                  const int image_width, 
                  const int image_height,
                  unsigned char J[])
    {
        //memcpy(J, I, image_width*image_height*3);
    
        IppStatus ipp_status;
    
        int srcStep = image_width*3;
        int dstYStep = image_width;
        int dstCbCrStep = image_width;
        IppiSize roiSize = {image_width, image_height};
    
        const Ipp8u* pSrc = (Ipp8u*)I;
    
        Ipp8u *pDstY    = (Ipp8u*)J;                            //Y color plane is the first image_width*image_height pixels of J.
        Ipp8u *pDstCbCr    = (Ipp8u*)&J[image_width*image_height];    //In NV12 format, UV plane starts below Y.
    
        ipp_status = ippiRGBToYCbCr420_8u_C3P2R(pSrc, srcStep, pDstY, dstYStep, pDstCbCr, dstCbCrStep, roiSize);
    
        if (ipp_status != ippStsNoErr)
        {
            memset(J, 128, image_width*image_height*3/2);
        }
    }
    IPPAPI(IppStatus, ippiRGBToYCbCr420_8u_C3P2R,( const Ipp8u* pRGB, int rgbStep,  Ipp8u* pY, int YStep,Ipp8u* pCbCr, int CbCrStep, IppiSize roiSize ))//  RGB24-->NV12
    IPPAPI(IppStatus, ippiRGBToYCbCr420_8u_C4P2R,( const Ipp8u* pRGB, int rgbStep,  Ipp8u* pY, int YStep,Ipp8u* pCbCr, int CbCrStep, IppiSize roiSize ))//  ARGB-->NV12
    IPPAPI(IppStatus, ippiBGRToYCbCr420_8u_C3P2R,( const Ipp8u* pRGB, int rgbStep,  Ipp8u* pY, int YStep,Ipp8u* pCbCr, int CbCrStep, IppiSize roiSize ))//  BGR24-->NV12
    IPPAPI(IppStatus, ippiBGRToYCbCr420_8u_AC4P2R,( const Ipp8u* pRGB, int rgbStep,  Ipp8u* pY, int YStep,Ipp8u* pCbCr, int CbCrStep, IppiSize roiSize ))// ABGR-->NV12
    IppiSize roiSize;
    roiSize.width = m_mfxEncParams.mfx.FrameInfo.CropW;
    roiSize.height = m_mfxEncParams.mfx.FrameInfo.CropH;
    mfxU16 pitch = m_pVPPSurfacesVPPOutEnc[nEncSurfIdx].Data.Pitch;
    ippiBGRToYCbCr420_8u_AC4P2R( (Ipp8u*)pInputBuffer, roiSize.width*4,  (Ipp8u*)m_pVPPSurfacesVPPOutEnc[nEncSurfIdx].Data.Y, pitch, (Ipp8u*)m_pVPPSurfacesVPPOutEnc[nEncSurfIdx].Data.UV,pitch, roiSize);

    BGR2I420

                IppiSize roiSize = { w, h };
                ippiBGRToYCbCr420_8u_C3P3R(src.data,3*w,
                yuv.data,yuv.stride, roiSize);
  • 相关阅读:
    Linux下动态库生成和使用
    ELK日志平台
    zabbix 监控端口
    zabbix 分布式zabbix_proxy
    zabbix 邮件报警 监控mysql主从
    Kubernetes 本地仓库
    kubernetes ui 搭建
    Kubernetes K8s
    Dockerfile
    Docker 指定容量
  • 原文地址:https://www.cnblogs.com/luoyinjie/p/11357652.html
Copyright © 2011-2022 走看看