我發現IPP函數存在:
ippiRGBToYCbCr420_8u_C3P2R
這是很難找到,因爲函數名稱或說明中沒有提到NV12。
該功能使用BT.601標準。
我找不到BT.709的IPP實施。
下面是使用它的RGB轉換爲NV12一個代碼示例:
void Rgb2NV12(const unsigned char I[], int image_width, int image_height, unsigned char J[])
{
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), Handle errors...
}
@Rotem:請說明您是否正在尋找答案,MATLAB,如果沒有,請再拍編輯修改的最後一個我添加的句子。 (並刪除'[matlab]'標籤) –
我應該將問題分爲3個不同的問題:1.使用IPP,2. Pain C Code,3. SSE優化代碼? – Rotem
如果你寫了一個高度專業的工具箱,GitHub可能是最好的地方。只有當你的問題是在話題上時,自我Q/A才適用於堆棧溢出。正如封面所顯示的那樣,你的觀點太廣泛了。可以嘗試使用正確解釋的答案(與純代碼轉儲相反)將其作爲狹義形式的問題編寫,或者使用工具箱創建GitHub頁面。 – Adriaan