ffmpeg android将yuv420转换为rgba无法获得正确的视频

时间:2016-10-13 13:26:25

标签: android video ffmpeg

我想将视频(yuv420)转换为rgba,但我收到了以下灰色视频 转换过程后:

Image

我的代码:

 if (width < 1 || height < 1 || pYUV == NULL || pBGR24 == NULL)
        return false;

//int srcNumBytes,dstNumBytes;
//uint8_t *pSrc,*pDst;
AVPicture pFrameYUV,pFrameBGR;

//pFrameYUV = avpicture_alloc();
//srcNumBytes = avpicture_get_size(PIX_FMT_YUV420P,width,height);
//pSrc = (uint8_t *)malloc(sizeof(uint8_t) * srcNumBytes);
avpicture_fill(&pFrameYUV,pYUV,AV_PIX_FMT_YUV420P,width,height);

//U,V change
uint8_t * ptmp=pFrameYUV.data[1];
pFrameYUV.data[1]=pFrameYUV.data[2];
pFrameYUV.data [2]=ptmp;

//pFrameBGR = avcodec_alloc_frame();
//dstNumBytes = avpicture_get_size(PIX_FMT_BGR24,width,height);
//pDst = (uint8_t *)malloc(sizeof(uint8_t) * dstNumBytes);
avpicture_fill(&pFrameBGR,pBGR24,AV_PIX_FMT_BGR24,width,height);

struct SwsContext* imgCtx = NULL;
imgCtx = sws_getContext(width,height,AV_PIX_FMT_YUV420P,width,height,AV_PIX_FMT_BGR24,SWS_BILINEAR,0,0,0);

if (imgCtx != NULL){
    sws_scale(imgCtx,pFrameYUV.data,pFrameYUV.linesize,0,height,pFrameBGR.data,pFrameBGR.linesize);
    if(imgCtx){
        sws_freeContext(imgCtx);
        imgCtx = NULL;
    }
    return true;
}
else{
    sws_freeContext(imgCtx);
    imgCtx = NULL;
    return false;
}
你能帮我吗?我尝试了其他一些方法,但没有用。

0 个答案:

没有答案