天天看點

圖像處理算法大全(基于libyuv或IPP)----YV12轉NV12

《周星星教你學ffmpeg》技巧

ipp源碼:

static void YV12ToNV12(BYTE* pYV12, BYTE* pNV12_Y,BYTE* pNV12_UV, int width,int height)//yuv420 //3/2:1+1/4+1/4----YU12

{

DWORD dwTime=::GetTickCount();

IppiSize imgSize;

imgSize.width=width;

imgSize.height=height;

const Ipp8u* pSource[3]={pYV12,pYV12+height*width*5/4,pYV12+height*width};

Ipp8u* pDesY=pNV12_Y;

Ipp8u* pDesUV=pNV12_UV;

int SourceStep[3]={width,width*1/2,width*1/2};//YUV420->1,1/4,1/4

int dstYStep=width;

int dstCbCrStep=width;

IppStatus is =ippiYCrCb420ToYCbCr420_8u_P3P2R(pSource,SourceStep,pDesY,dstYStep,pDesUV,dstCbCrStep,imgSize);

if(is != ippStsNoErr)

{

return;

//convert error

}

//TRACE("YV12ToNV12所需時間:%dms\n",::GetTickCount()-dwTime);

}

調用源碼:YV12ToNV12(pYV12, pNV12_Y,pNV12_UV, 1280,720);//将YV12轉成NV12,适用于硬體編碼

有問題聯系作者QQ:35744025