yuv 格式基础


YUV 格式通常有两大类:打包(packed)格式和平面(planar)格式。前者将 YUV 分量存放在同一个数组中,
通常是几个相邻的像素组成一个宏像素(macro-pixel);而后者使用三个数组分开存放 YUV 三个分量,就像
是一个三维平面一样。

几种常见的yuv格式

1.YUV422Planar

这里,Y\U\V数据是分开存放的,每两个水平Y采样点,有一个Cb和一个Cr采样点,


ffmpeg 中的定义 PIX_FMT_YUV422P, ///< planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)

android OMX 中的定义 OMX_COLOR_FormatYUV422Planar //* YUV422Planar : Three arrays Y,U,V.

2. YUV420Planar

这个格式跟YUV422 Planar 类似,但对于Cb和Cr的采样在水平和垂直方向都减少为2:1

ffmpeg 中定义 PIX_FMT_YUV420P //< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)

android OMX 中定义 OMX_COLOR_FormatYUV420Planar //* YUV420Planar : Three arrays Y,U,V

3.YUV422 Semi-Planar Semi 是’半‘的意思 我的理解这个半平面模式,这个格式的数据量跟YUV422 Planar的一样,但是U、V是交叉存放的。

ffmpeg 中 未找到定义

android OMX 中 OMX_COLOR_FormatYUV422SemiPlanar ////YUV422SemiPlanar : Two arrays, one is all Y, the other is U and V

4.YUV420 Semi-Planar

这个格式的数据量跟YUV420 Planar的一样,但是U、V是交叉存放的

ffmpeg 中定义

PIX_FMT_NV12, ///< planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (first byte U and the following byte V)

android OMX 中定义 OMX_COLOR_FormatYUV420SemiPlanar //YUV420SemiPlanar : Two arrays, one is all Y, the other is U and V

5.YUV422 Interleaved Interleaved -- 交错

这个格式的数据量跟YUV422 Planar的一样,但是Y、U、V是交叉存放的, 这个是打包(packed)模式的


ffmpeg 中 PIX_FMT_UYVY422 ///< packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1

android OMX 中 OMX_COLOR_FormatCbYCrY //CbYCrY : Organized as 16bit UYVY (i.e. CbYCrY)

YUV420P,Y,U,V三个分量都是平面格式,分为I420YV12I420格式和YV12格式的不同处在U平面和V平面的位置不同。在I420格式中,U平面紧跟在Y平面之后,然后才是V平面(即:YUV);但YV12则是相反(即:YVU)。

YUV420SP, Y分量平面格式,UV打包格式, 即NV12。 NV12与NV21类似,U 和 V 交错排列,不同在于UV顺序。

I420: YYYYYYYY UU VV =>YUV420P

YV12:YYYYYYYYVV UU =>YUV420P

NV12:YYYYYYYYUVUV =>YUV420SP

NV21:YYYYYYYYVUVU =>YUV420SP

你可能感兴趣的:(基础)