YUV模型是根据一个亮度(Y分量)和两个色度(UV分量)来定义颜色空间。最常见的格式为 YUV420分为两种:YUV420P和YUV420SP。
YUV420P
YUV420P 为 plane平面模式,Y, U, V分量处于不同平面,即在 ffmpeg 中数据存放在 3 个数组中。
其可再细分为 YU12 和 YV12 。
YU12
该格式的数据分布如下图所示,data[0] 中存放的是 Y 数据,data[1] 中存放的是 U 数据,data[2] 中存放的是 V 数据。
其中 Y、U、V 颜色相同的为一组数据,如 Y1、Y2、Y3 和 Y4 共用一组 U1 和 V1。
YV12
该格式的数据分布如下图所示,data[0] 中存放的是 Y 数据,data[1] 中存放的是 V 数据,data[2] 中存放的是 U 数据。
YUV420SP
YUV420SP 为 semi-planar 模式,即Y和UV分为两个plane,但是UV(CbCr)为交错存储,而不是分为三个平面。即在 ffmpeg 中数据存放在 2 个数组中。
其可再细分为 NV12 和 NV21。
NV12
该格式的数据分布如下图所示,data[0] 中存放的是 Y 数据,data[1] 中存放的是 U 和 V 数据,两者交错放置,先是 U 分量,后是 V 分量。
NV21
该格式的数据分布如下图所示,data[0] 中存放的是 Y 数据,data[1] 中存放的是 U 和 V 数据,两者交错放置,先是 V 分量,后是 U 分量。
真实数据存放
真实存放数据时,为了方便运算,往往将数据进行对齐,所以真实的数据存放如下图。
以 YU12 为例子,其他格式类似。
参考文献:
https://blog.csdn.net/byhook/article/details/84037338
https://blog.csdn.net/Evankaka/article/details/38176025
https://www.cnblogs.com/leisure_chn/p/10290575.html