帧结构体

typedef struct AVFrame {uint8_t *data[8];int linesize[8];int width, height;int format;...
} AVFrame;

RGBA

数据以 RGBARGBARGBA… 格式存放,起始地址为 frame->data[0]。其实,除了 RGBA,还有 BGRA,AGBR,ARGB,GBRA。


遍历访问 RGBA 像素帧

for (int row = 0; row < frame->height; row++) {uint8_t *data = frame->data[0] + row * frame->linesize[0];for (int col = 0; col < frame->width; col++) {uint8_t R = data[(col << 2) + /*plane=*/0]; //Ruint8_t G = data[(col << 2) + /*plane=*/1]; //Guint8_t B = data[(col << 2) + /*plane=*/2]; //Buint8_t A = data[(col << 2) + /*plane=*/3]; //A}
}

YUVA

Y,U,V,A 四种数据分开存放,起始地址分别为 frame->data[0],frame->data[1],frame->data[2],frame->data[3]。

遍历访问 YUV 像素帧

const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(frame->format);
int hsub = desc->log2_chroma_w;
int vsub = desc->log2_chroma_h;
int have_alpha = desc->flags & AV_PIX_FMT_FLAG_ALPHA;if (have_alpha) {for (int y = 0; y < frame->height; y++) {row[0] = frame->data[0] + y * frame->linesize[0];row[1] = frame->data[1] + (y >> vsub) * frame->linesize[1];row[2] = frame->data[2] + (y >> vsub) * frame->linesize[2]row[3] = frame->data[3] + y * frame->linesize[3];for (int x = 0; x < frame->width; x++) {row[0][x        ]; // Yrow[1][x >> hsub]; // Urow[2][x >> hsub]; // Vrow[3][x        ]; // A}}
} else {for (int y = 0; y < frame->height; y++) {row[0] = frame->data[0] + y * frame->linesize[0];row[1] = frame->data[1] + (y >> vsub) * frame->linesize[1];row[2] = frame->data[2] + (y >> vsub) * frame->linesize[2];for (int x = 0; x < frame->width; x++) {row[0][x        ]; // Yrow[1][x >> hsub]; // Urow[2][x >> hsub]; // V}}
}

[FFmpeg] RGBA 和 YUV 存储方式相关推荐

  1. Android音视频【六】视频数据存储方式YUV

    人间观察 这个社会很浮躁,千万不要考验人性 在视频中的数据保存和传输都是YUV数据格式.主要是为了降低数据大小,如果用argb格式的数据,1px可能需要4个字节,而用YUV可能就需要1.5个字节. Y ...

  2. RGBA、YUV色彩格式及libyuv的使用

    最近一段时间因为工作的需要,要使用到libyuv.因为之前写录制视频的时候,也要用到rgb转yuv,自己结合网上的资料做了个实现,记录了点笔记,现在索性一起整理下. 常用的色彩格式 常见的色彩格式主要 ...

  3. 图像存储方式及使用OpenCV简单处理图像

    一.目的 简述图像存储方式及使用OpenCV简单处理图像. 二.图像存储方式 2.1.YUV 2.1.1.简介 YUV是编译true-color颜色空间(color space)的种类,Y'UV, Y ...

  4. CSR稀疏矩阵存储方式

    矩阵可分为稠密矩阵和稀疏矩阵,对于稀疏矩阵而言,使用同样的内存来存储这个矩阵显然是对内存的浪费,那么我们就可以想办法将矩阵中所有的o元素挥着不相关元素剔除,怎么剔除,第一种方法是通过三个一维矩阵来存储 ...

  5. 存储方式与介质对性能的影响

    摘要 数据的存储方式对应用程序的整体性能有着极大的影响.对数据的存取,是顺利读写还是随机读写?将数据放磁盘上还将数据放flash卡上?多线程读写对性能影响?面对着多种数据存储方式,我们如何选择?本文给 ...

  6. Java中数据存储方式

    2019独角兽企业重金招聘Python工程师标准>>> 1. 寄存器(register).这是最快的存储区,因为它位于不同于其他存储区的地方--处理器内部.但是寄存器的数量极其有限, ...

  7. Spring Cloud应用开发(七:使用Git存储方式实现分布式配置管理 )

    1.使用Git存储实现管理: 1.1.配置Git.在Git上创建microservice-study-config目录,并在目录中添加开发,预发布和测试的配置文件: 1.2.修改服务端配置文件.将mi ...

  8. SQL与NoSQL区别-存储方式

    传统的关系型数据库采用表格的储存方式, 数据以行和列的方式进行存储,要读取和查询都十分方便.而非关系型数据不适合这样的表格存储方式,通常以数据集的方式,大量的数据集中存储在一起,类似于键值对.图结构或 ...

  9. android的数据存储方式有哪几种方式,android存储数据的几种方式比较

    机身内存读取主要用个两个类文件输入流(FileInputStream)和文件输出流(FileOutputStream):FileInputStream fileInput = this.openFil ...

最新文章

  1. 基于NFS实现lamp的负载均衡之二: 部署NFS服务器
  2. 记一次.NET 与R语言交互
  3. SQL将金额转换为汉子
  4. 对应sql建表_图解SQL面试题:如何查找工资前三高的员工
  5. 【windows】Windows电脑怎么卸载服务/删除服务?
  6. Layout state should be one of 100 but it is 10起因和解决
  7. 微信APP支付-签名问题
  8. mysql++裸盘_绑定裸设备(查看裸设备的大小)
  9. 小程序导航图标_商场寻店不迷路 业内首个小程序AR导航上线
  10. 好朋友结婚了,祝福你们!
  11. 一些符号及颜色的英语写法总结
  12. STM32F4 | 最小系统设计 | 开发板资源介绍 | 开发环境搭建 | 程序下载
  13. 证券基础知识——证券标识代码
  14. weblogic启动报错:BEA-149265 Stack trace for mess...
  15. SVN conflict的解决办法
  16. 边分治学习笔记(bzoj2870)
  17. Sers微服务快速入门-01.简介
  18. 企业网盘哪个好?安全和高效是关键
  19. Neutron的安全组原理
  20. 女孩动情的二十一种时刻

热门文章

  1. 如何将枯燥的大数据呈现为可视化的图?
  2. 在Flex组件外观实施中使用Scale9
  3. fgo7.27服务器维护,【公告】更新游戏数据资料(7/27 实施)
  4. react动态改变选中不选中_reactjs – 如何避免使用重新选择来计算派生状态时React重新渲染...
  5. c语言次幂如何表达_如何确保分布式场景下的并发幂等性?
  6. mysql workbench第二栏图标中英文意思
  7. python 对象(一分钟读懂)03
  8. php源码下载 uctoo_uctoo
  9. 输入函数的区别C++
  10. 软件工程导论 07章软件测试