FFmpeg中AVFrame中width与linesize的关系

比如704*576分辨率的视频,它的width=704,height=576,摄像机芯片一般会要求64或者128对齐,当128位对齐时,704不能被128整除,需要在每一行结尾补64字节0x00占位,它的linesize也就是每一行的长度768。所以在解码的时候,宽和yuv的buffer都要以linesize[0]为准,否则就会出现下面这种情况。

以linesize[0]为宽度保存后,正常的应该是下图这样,右边绿条是补位的0。
可以用下面的代码将yuv转成nv12,可以去掉右边的绿条

//以linesize为准,有时width后面有填充0
int bufLen = m_pAVFrame->linesize[0] * m_pAVFrame->height;
memcpy(m_pYuvBuffer[0], m_pAVFrame->data[0], bufLen);
memcpy(m_pYuvBuffer[1], m_pAVFrame->data[1], bufLen / 4);
memcpy(m_pYuvBuffer[2], m_pAVFrame->data[2], bufLen / 4);m_uNV12Size = m_pAVFrame->width * m_pAVFrame->height * 3 / 2;
m_pNV12Buffer = new uint8_t[m_uYuvSize];//< YUV转NV12
for (int j = 0, cont = 0; j < 3 && cont < m_uNV12Size; j++)
{int nSize = m_pAVFrame->linesize[j];if (nSize <= 0)break;int nRadio = m_pAVFrame->linesize[0] / nSize;for (int i = 0; i < m_pAVFrame->height / nRadio; i++){  if (0 == j)//Y{if (i * nSize + (m_pAVFrame->width / nRadio) < bufLen){memcpy(m_pNV12Buffer + cont, m_pYuvBuffer[j] + i * nSize,m_pAVFrame->width / nRadio);}}else //UV{if (i * nSize + (m_pAVFrame->width / nRadio) < bufLen/4){memcpy(m_pNV12Buffer + cont, m_pYuvBuffer[j] + i * nSize,m_pAVFrame->width / nRadio);}}cont += m_pAVFrame->width / nRadio;}
}

FFmpeg中AVFrame中width与linesize的关系相关推荐

  1. 【FFMPEG】AVFrame中buffer分配的两种方式

    AVFrame在使用ffmpeg进行编解码过程中,是最基本的数据结构. 在某些场景下,需要对AVFrame的数据区域进行提前分配,有两种方法,需要根据自己的需求来使用. (1) * This func ...

  2. AVFrame中data与linesize关系

    AVFrame中data与linesize关系 2016年06月30日 11:10:40 阅读数:662 AVFrame里面有data[4]和linesize[4]其中data是一个指向指针的指针(二 ...

  3. ffmpeg中AVPacket与AVFrame中数据的传递与释放

    总结了一下AVPacket与AVFrame中拷贝和释放相关操作.这里我理解在AVFrame与AVPacket传递流转的过程中并不会去每次创建和拷贝音视频数据,音视频数据被存储在AVBuffer中,而A ...

  4. 图像处理、显示中的行宽(linesize)、步长(stride)、间距(pitch)

    图像处理.显示中的行宽(linesize).步长(stride).间距(pitch) 在图像数据传输和显示的过程中有一个不常用的参数:间距. 间距的名称: 它有很多的别名,在使用d3d显示的时候,它叫 ...

  5. windows环境下ffmpeg在cmd中实现wav,mp3分割拆分和与拼接(concat)以及在cmd一次运行多个命令,附ffmpeg安装

    1. ffmpeg在cmd中的实现分割拆分的代码 首先打开cmd: 按win+R,后输入cmd,出现如下窗口 在cmd中定位到待拆分的音频文件的路径 cd+filepath:cd C:\Users\l ...

  6. ffmpeg architecture(中)

    ffmpeg architecture(中) 艰苦学习FFmpeg libav 您是否不奇怪有时会发出声音和视觉? 由于FFmpeg作为命令行工具非常有用,可以对媒体文件执行基本任务,因此如何在程序中 ...

  7. 采用FFmpeg从视频中提取音频(声音)保存为mp3文件

    采用FFmpeg从视频中提取音频(声音)保存为mp3文件 作者:雨水,日期:2016年1月9日 CSDN博客:http://blog.csdn.net/gobitan 摘要:看到好的视频文件,如果想把 ...

  8. FFmpeg从视频中提取音频保存为mp3文件

    如何把视频文件中的音频数据提取出来,网络上有不少音频提取工具,但作为技术人员提到音视频处理,肯定会想到FFmpeg.本文介绍了如何基于FFmpeg从视频中提取音频,然后将音频保存为mp3格式的音频文件 ...

  9. 使用ffmpeg从视频中截取图像帧(最简单实用的视频抽帧,一句命令)

    Table of Contents 1.最佳方式 2.普通的命令:(画质差) 3. 视频旋转: 4. 批量视频抽帧: 参考:ffmpeg视频抽帧 1.最佳方式 第二种方法抽帧图片画质很差,这里提供更好 ...

最新文章

  1. this.options[selectedIndex]的使用
  2. python技术开发证书_python+证书
  3. 全国大学生智能汽车竞赛讯飞 -智慧餐厅技术报告 ——信号与系统课程论文
  4. 熬了几个大夜,学完一套985博士总结的计算机视觉学习笔记(20G高清/PPT/代码)...
  5. UFLDL教程笔记及练习答案三(Softmax回归与自我学习***)
  6. matlab 运行 AlexNet
  7. 文件系统 文件时间记录在哪里_计算机系统基础:文件管理相关知识笔记
  8. boost::array与std::vector使用与性能
  9. windows2008 IIS下配置FTP服务
  10. 在linux环境下编译运行OpenCV程序的两种方法 - woshijpfgg
  11. CS领域论文数据分析
  12. matlab gui 简介,Matlab中Powergui的介绍.pdf
  13. 汤晓鸥教授的一篇很有意思的文章
  14. OpenCV isContinuous()函数简析
  15. rem移动端设计方案
  16. 热血江湖数据库MYSQL修改_手游服务端框架之配置与玩家数据库设计
  17. “满五唯一”和“满二唯一”是什么?有什么不同?
  18. 用matlab求二重积分例题_数学建模matlab例题参考及练习
  19. Spring Admin 入门
  20. 玩游戏使用云服务器,云服务器可以玩大型游戏吗?

热门文章

  1. 使用SVN管理unityproject
  2. 用SDWebImage渐变加载图片
  3. PHP经验——PHPDoc PHP注释的标准文档(翻译自Wiki)
  4. CSS Grid中的陷阱和绊脚石
  5. Numeral.js 是一个用于格式化和数字四则运算的js 库
  6. 从xml数据集到FairMOT数据集转换
  7. 现代化多媒体教室的计算机系统,多媒体教室系统建设方案
  8. 用c语言的输入,用C语言输入的“%p”是什么意思?
  9. qq空间代码查询_Mysql千万级大数据查询优化经验,一点课堂(多岸学院)
  10. redis 集群_Redis集群部署