对yuv存储格式中的yuv420p和yuv420sp的理解

一.对yuv的认识

yuv是一种颜色编码系统,它将图像的亮度和色度分离开来。y表示亮度,即黑白信息;uv表示色度,即颜色信息。yuv常用于视频压缩和传输中,因为它可以更有效地表示人眼对亮度和色度的敏感度不同的特性。人眼对亮度更加敏感,而对色度则不那么敏感。这就是为什么在视频压缩中,可以通过减少色度分量的采样率以减少数据量,而不会对观看体验产生明显的影响。

yuv中最常用的采样方式是4:2:0,在这种采样方式下,亮度分量y和色度分量uv的比例位4:1:1,即每4个亮度分量共享1组色度分量。而yuv的存储格式主要分为两种:

  • planar:平面格式,指先存储所有的y分量,然后再存储u分量和v分量,其中uv的顺序可以互换
  • packed:打包格式,指每个像素点的 y、u、v 分量是连续交替存储的

二.yuv420p和yuv420sp的分类以及它们的区别

yuv420p和yuv420sp都是planar平面格式,区别仅在于对uv分量的存取。yuv420p是先存储完所有的u分量,然后再存储v分量,或者反过来。而yuv420sp是uv/vu交替存储。常见的基于yuv4:2:0的采样格式如下表:

|----------|------------|---------------|
| | yuv4:2:0采样 | yuv4:2:0采样 |
| yuv420p | yv12格式 | yu12格式/i420格式 |
| yuv420sp | nv12格式 | nv21格式 |

见下图,是yuv420p的存储示意图:

图中先存储完所有的y分量后再存储u和v分量,其中u在v的前面,这也称为yu12/i420格式,如果先v再u的话,就是yv12格式。

见下图,再来看一下yuv420sp的存储示意图:

图中先存储完所有的y分量,然后交替存储u和v分量,其中u在v的前面,这种方式也称为nv12格式,如果先v再u,则称为nv21格式。