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;
}

posted @   遥望星空  阅读(1840)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示