YV12数据与AVFrame的相互转换

http://bbs.chinavideo.org/forum.php?mod=forumdisplay&fid=10

转自:http://bbs.chinavideo.org/forum.php?mod=viewthread&tid=1971

void YV12ToAVFrame(BYTE * pData,int nLen,int nWidth,int nHeight,AVFrame * pFrame)
{
avcodec_get_frame_defaults(pFrame);
int size=avpicture_get_size(PIX_FMT_YUV420P,nWidth ,nHeight );
ASSERT(size==nLen);
avpicture_fill( (AVPicture*) pFrame,pData,PIX_FMT_YUV420P , nWidth ,nHeight );
BYTE * ptmp=pFrame->data [1];//U,V互换
pFrame->data [1]=pFrame->data [2];
pFrame->data [2]=ptmp;
}

void AVFrameToYV12(AVFrame * pFrame,int nWidth,int nHeight,BYTE * pData,int * npLen)
{
BYTE * ptmp=pFrame->data [1];//U,V互换
pFrame->data [1]=pFrame->data [2];
pFrame->data [2]=ptmp;
AVPicture pic;
int size=avpicture_get_size(PIX_FMT_YUV420P,nWidth ,nHeight );
if(*npLen<size)
  return;//缓冲区太小
avpicture_fill(&pic, pData, PIX_FMT_YUV420P,
    nWidth, nHeight);
*npLen=size;
img_copy(&pic,(AVPicture *)pFrame,PIX_FMT_YUV420P,nWidth,nHeight);
ptmp=pFrame->data [1];//恢复AVFrame
pFrame->data [1]=pFrame->data [2];
pFrame->data [2]=ptmp;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值