YUV格式浅析
来源:互联网 发布:linux 添加用户组 编辑:程序博客网 时间:2024/05/16 05:23
YUV格式,从输入源端理解,对应码流的采样格式,主要的采样格式有YCbCr 4:2:0、YCbCr 4:2:2、YCbCr 4:1:1和 YCbCr 4:4:4等;
从输出端理解,可以理解为解码后视频数据在解码器内存中的组织布局。
YUV码流的存储格式其实与其采样的方式密切相关.
YUV格式有三大类:planar,semi-planar 和packed。
1 planar(平面)格式
对于full planar的YUV格式,Y/U/V是分开存放的,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。
我所接触过的平面格式有V208和V408两种。
1.1 440的V208格式
在内存布局中,排在最前的是Y Plane数据。Y PLANE的宽度为pitch(按照硬件对齐后的宽度),高度为对齐后的高度。Y PLANE之后,紧接着是U plane, 宽度跟Y PLANE一样,高度是Y PLANE的一般。U plane之后,紧接着V Plane,高宽跟U plane一样。以实际分辨率为61*61的码流举例,其解码输出在内存中的布局如下图所示:
1.2 444的V408格式:
该格式的布局与V208比较像,最大的区别在于V408的U/V平面的宽高与Y平面一样。这里依然以实际分辨率为61*61的码流举例,其解码输出在内存中的布局如下图所示:
2 semi-planar(半平面)格式
对于semi-planar的格式, Y和UV是分开存放的,但UV共享一个planar,即先存储所有像素点的Y数据,然后存储UV数据。U/V数据是交替存储在同一块内存区域。
我所接触过的semi-planar格式有NV12和P208两种。
2.1 420的NV12格式
UV共用一个平面,交替存放,且UV的高度是Y的一半。其内存布局如下图所示:
2.2 422的P208格式
UV共用一个平面,交替存放,且UV的高度和Y平面的高度一样。其内存布局如下图所示:
3. 打包格式
对于packed的YUV格式,每个像素点的Y,U,V是连续交叉存储的。
我接触过的打包格式主要是YUY2格式。
3.1 422的YUY2格式。
Y,U,V共用一个平面,每两个Y数据共用一组UV数据,排列顺序为:Y0 U0 Y1 V0
即: 第一个字节包含第一个 Y 样例,第二个字节包含第一个 U (Cb) 样例,第三个字节包含第二个 Y 样例,第四个字节包含第一个 V (Cr) 样例.
其内存布局如下所示:
本文为原创作品,谢绝转载。
- YUV格式浅析
- YUV格式
- YUV格式
- YUV格式
- YUV格式
- YUV格式
- YUV格式
- YUV格式
- YUV格式
- YUV 格式
- YUV格式
- YUV格式
- YUV格式
- YUV格式
- yuv格式
- YUV格式
- YUV 格式
- YUV格式
- [leetcode] 166. Fraction to Recurring Decimal 解题报告
- 网络编程知识(6)--用Java编写HTTP服务器
- php 父类Model实现
- _id和ObjectId详解!
- C++ 中ofstream与ifstream用法
- YUV格式浅析
- Vijos 1307-黑皮的正方形【正方形计算】
- Mac自带Apache搭建PHP开发环境(一)phpinfo
- 一致性哈希算法原理设计
- 随机数的生成
- java读取excel
- 如何用Beyond Compare进行文件夹比较
- ireport初相试
- 使用IntelliJ IDEA 14和Maven创建java web项目