2013-05-06 83 views
2

在相機預覽框架上,我在Android端以yv12格式獲取數據。我需要在jni側將其轉換爲YUV420P。我該怎麼做?正如我從YUV420P格式的許多資料中看到的那樣,y樣本首先出現,然後是u樣本。 u樣本後跟v樣本。 yv12格式與YUV420P相同,除了u和v採樣以相反的順序出現,這意味着y採樣後面是v,然後是u採樣。牢記這一點,我已經使用下面的交換代碼在編碼之前從yv12數據格式生成YUV420P數據。如何將yv12轉換爲yuv420p

avpicture_fill((AVPicture*)outframe, (uint8_t*)camData, codecCtx->pix_fmt, codecCtx->width, codecCtx->height); 

uint8_t * buf_store = outframe->data[1]; 
outframe->data[1]=outframe->data[2]; 
outframe->data[2]=buf_store; 

但它似乎並沒有工作。我應該如何調整我的代碼?

回答

0

不要使用avpicture_fill。我在我的應用程序中實現了這樣的工作,並且其工作正常



picture->linesize[0] = frameWidth; 
picture->linesize[1] = frameWidth/2; 
picture->linesize[2] = frameWidth/2; 

picture->data[0] = camData; 
picture->data[1] = camData + picture->linesize[0]*frameHeight+picture->linesize[1]*frameHeight/2; 
picture->data[2] = camData + picture->linesize[0]*frameHeight;