音視頻編解碼: YUV存儲格式中的YUV420P,YUV420SP,NV12, NV21理解(轉)


概述 

之前介紹了YUV碼流的采樣格式,下面分析下YUV碼流的存儲格式,YUV碼流的存儲格式與采樣格式息息相關。總的來講,YUV存儲格式主要分為兩種:

  • planar 平面格式
    • 指先連續存儲所有像素點的 Y 分量,然后存儲 U 分量,最后是 V 分量。
  • packed 打包模式
    • 指每個像素點的 Y、U、V 分量是連續交替存儲的。

根據采樣方式和存儲格式的不同,就有了多種 YUV 格式。這些格式主要是基於 YUV 4:2:2 和 YUV 4:2:0 采樣。

常見的基於 YUV 4:2:2 采樣的格式如下表:

常見的基於 YUV 4:2:0 采樣的格式如下表:

更多的 YUV 格式信息參考這里:YUV pixel formats

基於YUV4:2:2采樣的格式

YUV 4:2:2 采樣規定了 Y 和 UV 分量按照 2: 1 的比例采樣,兩個 Y 分量公用一組 UV 分量。

【YUYV格式】 

YUYV 格式是采用打包格式進行存儲的,指每個像素點都采用 Y 分量,但是每隔一個像素采樣它的 UV 分量,排列順序如下:

Y0 UO Y1 V0 Y2 U2 Y3 V2

Y0 和 Y1 公用 U0 V0 分量,Y2 和 Y3 公用 U2 V2 分量….

【UYVY格式】

 UYVY 格式也是采用打包格式進行存儲,它的順序和 YUYV 相反,先采用 U 分量再采樣 Y 分量,排列順序如下:

U0 Y0 V0 Y1 U2 Y2 V2 Y3

Y0 和 Y1 公用 U0 V0 分量,Y2 和 Y3 公用 U2 V2 分量….
根據 UV 和 Y 的順序還有其他格式,比如,YVYU 格式,VYUY 格式等等,原理大致一樣了。

 

【YUV422P格式】

 YUV 422P 格式,又叫做 I422,采用的是平面格式進行存儲,先存儲所有的 Y 分量,再存儲所有的 U 分量,再存儲所有的 V 分量。

基於YUV 4:2:0采樣的格式

基於 YUV 4:2:0 采樣的格式主要有 YUV 420P 和 YUV 420SP 兩種類型,每個類型又對應其他具體格式。

  • YUV 420P 類型
    • YU12 格式
    • YV12 格式
  • YUV 420SP 類型
    • NV12 格式
    • NV21 格式

YUV 420P 和 YUV 420SP 都是基於 Planar 平面格式 進行存儲的,先存儲所有的 Y 分量后, YUV420P 類型就會先存儲所有的 U 分量或者 V 分量,而 YUV420SP 則是按照 UV 或者 VU 的交替順序進行存儲了,具體查看看下圖:

YUV420P 的格式:

其在碼流中的表現形式為:

YUV420SP的格式:

其在碼流中的表現形式為:

【YU12和YV12格式】

YU12 和 YV12 格式都屬於 YUV 420P 類型,即先存儲 Y 分量,再存儲 U、V 分量,區別在於:YU12 是先 Y 再 U 后 V,而 YV12 是先 Y 再 V 后 U 。YV 12 的存儲格式如下圖所示:

 

YU 12 又稱作 I420 格式,它的存儲格式就是把 V 和 U 反過來了。

【NV12和NV21格式】

NV12 和 NV21 格式都屬於 YUV420SP 類型。它也是先存儲了 Y 分量,但接下來並不是再存儲所有的 U 或者 V 分量,而是把 UV 分量交替連續存儲。 

需要注意的是,

NV12是iOS中有的模式,它的存儲順序是先存Y分量,再YV進行交替存儲。

NV21是Android中有的模式,它的存儲順序是先存Y分量,再VU交替存儲。

參考鏈接:

1. 一文讀懂 YUV 的采樣與格式

2.YUV數據格式詳解

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM