YUVxxx格式的由来
在某一格式下的存储的数据大小和解析出来的数据大小是不一样的!
如在YUV420存储时:
Y0U0 Y1 Y2U2 Y3
Y4V4 Y5 Y6V6 Y7
在YUV420还原显示时:
Y0U0V4 Y1U0V4 Y2U2V6 Y3U2V6
Y4U0V4 Y5U0V4 Y6U2V6 Y7U2V6
所谓YUVxxx就是在存储时:
第一行YUV的比例“Y0U0 Y1 Y2U2 Y3”,其中4个Y,2个U,0个V,所以叫YUV420。
或者说每种“Ya:Ub:Vc”格式下,每四个像素,存a个Y,b个U,c个V,最后称之为“YUVabc”
packed和planer
packed 是指打包(或者简单理解为以一定规则YUV交叉存到数组中)
planer是指平面(简单理解为先把某一个元素如Y全部存在一起,就像一个平面展开一样,其他的U和V也是类似,但有些特殊格式是UV元素存在先交叉再平面存储的情况,不过Y始终是平面存储的)
为什么会有这么多格式
第一次接触这些格式的人一般都了解不全所有的格式,也没有专业的组织维护这些格式,更没有相关强制标准。这些格式大多是因为编程习惯、大公司内部规则、某些中立非强制标准平台(如https://fourcc.org)长期维护所形成的公约,大家都互相默契认可。谁都可以创造这些格式,所以五花八门的。
主要格式有哪些:
为什么没有YUV420 packed?
因为交织排列的情况下,每个通道最少也是一个,不可能是0个(否则该通道就没了,颜色错误了),所以在packed情况下,最低也是YUV411(与Y41P定义相同)。
参考linux下V4L2的packed接口:
https://docs.kernel.org/userspace-api/media/v4l/pixfmt-packed-yuv.html
参考NVIDIA的Cuda接口
https://docs.nvidia.com/cuda/archive/10.1/npp/group__image__color__model__conversion.html