• 簡體中文
  • 繁體中文
  • English
  • 關於銳目企業資訊產品中心解決方案案例展示技術支援BBS討論區
       
       
     
  • 電話:020-85652419
  • 傳真:020-85652419
  • 地址:廣州市天河區棠德南路
    103~117號
  • 使用 8 位 YUV 格式的視頻呈現

    時間:2008-07-15 編輯:Gary Sullivan 和 Stephen Estrop

    發布日期: 12/9/2004 | 更新日期: 12/9/2004

    Gary Sullivan Stephen Estrop

    Microsoft Digital Media Division

    適用於:

    Microsoft® Windows®, Microsoft DirectShow®

    摘要:本文講述了在 Microsoft Windows 操作系統中呈現視頻時推薦使用的 8 YUV 格式。本文講述了可用於在 YUV 格式和 RGB 格式之間進行轉換的技術,還提供了用於對 YUV 格式進行上采樣的技術。本文適用於在 Windows 中使用 YUV 視頻解碼或呈現的所有人員。

    簡介

    在整個視頻行業中,定義了很多 YUV 格式。本文講述的是在 Microsoft® Windows® 操作系統中呈現視頻時推薦使用的 8 YUV 格式。鼓勵解碼器供應商和顯示供應商支持本文所講述的格式。本文不對 YUV 顏色的其他用途(如靜止攝影)進行描述。

    本文講述的格式全部使用每個像素位置 8 位的方式來編碼 Y 頻道(也稱為燈光頻道),並使用每樣例 8 位的方式來編碼每個 U V 色度樣例。但是,大多數 YUV 格式平均使用的每像素位數都少於 24 位,這是因為它們包含的 U V 樣例比 Y 樣例要少。本文不講述帶有 10 位和 12 Y 頻道的 YUV 格式。

    在本文中,U 一詞相當於 CbV 一詞相當於 Cr

    本文包括以下主題:

    DirectShow 中標識 YUV 格式講述了如何描述 Microsoft DirectShow® YUV 格式類型。

    YUV 采樣講述了一些最常用的 YUV 采樣技術。

    表面定義講述了推薦的 YUV 格式。

    顏色空間和色度采樣率轉換提供了一些在 YUV RGB 格式之間進行轉換的指南,以及在不同 YUV 格式之間進行轉換的指南。

    其他信息提供了其他信息。

    DirectShow 中標識 YUV 格式

    本文講述的每種 YUV 格式都指定了一個 FOURCC 碼。FOURCC 碼是一個 32 位、不帶正負號的整數,它是通過串聯四個 ASCII 字符創建而成的。

    有很多 C/C++ 宏可使得在源代碼中聲明 FOURCC 值變得更加簡單。例如,MAKEFOURCC 宏是在 Mmsystem.h 中聲明的,FCC 宏則是在 Aviriff.h 中聲明的。請按照下列方式使用這些宏:

    DWORD fccYUY2 = MAKEFOURCC('Y','U','Y','2');

    DWORD fccYUY2 = FCC('YUY2');

    只需通過調轉字符的順序,您還可以將 FOURCC 碼直接聲明為字符文本。例如:

    DWORD fccYUY2 = '2YUY'; // Declares the FOURCC 'YUY2'

    因為 Windows 操作系統使用的是 little-endian 體系結構,所以調轉順序是必需的。“Y”= 0x59“U”= 0x55“2”= 0x32,所以“2YUY” 0x32595559

    DirectShow 中,格式是由一個主類型全局唯一標識符 (GUID) 和一個子類型 GUID 標識的。計算機視頻格式的主類型總是 MEDIATYPE_Video。子類型則可以通過將 FOURCC 碼與 GUID 進行映射的方式來構造,如下所示:

    XXXXXXXX-0000-0010-8000-00AA00389B71

    其中 XXXXXXXX FOURCC 碼。因此,YUY2 的子類型 GUID 為:

    32595559-0000-0010-8000-00AA00389B71

    很多這樣的 GUID 都已經在頭文件 Uuids.h 中進行了定義。例如,YUY2 子類型被定義為 MEDIASUBTYPE_YUY2DirectShow 基類庫還提供了一個幫助器類 FOURCCMap,該類可用於將 FOURCC 碼轉換為 GUID 值。FOURCCMap 構造函數采用 FOURCC 碼作為輸入參數。然後,您可以將 FOURCCMap 對象強制轉換為相應的 GUID

    FOURCCMap fccMap(FCC('YUY2'));

    GUID g1 = (GUID)fccMap;

    // Equivalent:

    GUID g2 = (GUID)FOURCCMap(FCC('YUY2'));

    YUV 采樣

    YUV 的優點之一是,色度頻道的采樣率可比 Y 頻道低,同時不會明顯降低視覺質量。有一種表示法可用來描述 U V Y 的采樣頻率比例,這個表示法稱為 A:B:C 表示法:

    4:4:4 表示色度頻道沒有下采樣。

    4:2:2 表示 2:1 的水平下采樣,沒有垂直下采樣。對於每兩個 U 樣例或 V 樣例,每個掃描行都包含四個 Y 樣例。

    4:2:0 表示 2:1 的水平下采樣,2:1 的垂直下采樣。

    4:1:1 表示 4:1 的水平下采樣,沒有垂直下采樣。對於每個 U 樣例或 V 樣例,每個掃描行都包含四個 Y 樣例。與其他格式相比,4:1:1 采樣不太常用,本文不對其進行詳細討論。

    1 顯示了 4:4:4 圖片中使用的采樣網格。燈光樣例用叉來表示,色度樣例則用圈表示。



    1. YUV 4:4:4 樣例位置

    4:2:2 采樣的這種主要形式在 ITU-R Recommendation BT.601 中進行了定義。圖 2 顯示了此標准定義的采樣網格。



    2. YUV 4:2:2 樣例位置

    4:2:0 采樣有兩種常見的變化形式。其中一種形式用於 MPEG-2 視頻,另一種形式用於 MPEG-1 以及 ITU-T recommendations H.261 H.263。圖 3 顯示了 MPEG-1 方案中使用的采樣網格,圖 4 顯示了 MPEG-2 方案中使用的采樣網格。



    3. YUV 4:2:0 樣例位置(MPEG-1 方案)



    4. YUV 4:2:0 樣例位置(MPEG-2 方案)

    MPEG-1 方案相比,在 MPEG-2 方案與為 4:2:2 4:4:4 格式定義的采樣網格之間進行轉換更簡單一些。因此,在 Windows 中首選 MPEG-2 方案,應該考慮將其作為 4:2:0 格式的默認轉換方案。

    表面定義

    本節講述推薦用於視頻呈現的 8 YUV 格式。這些格式可以分為幾個類別:

    4:4:4 格式,每像素 32

    4:2:2 格式,每像素 16

    4:2:0 格式,每像素 16

    4:2:0 格式,每像素 12

    首先,您應該理解下列概念,這樣才能理解接下來的內容:

    表面原點。對於本文講述的 YUV 格式,原點 (0,0) 總是位於表面的左上角。

    跨距。表面的跨距,有時也稱為間距,指的是表面的寬度,以字節數表示。對於一個表面原點位於左上角的表面來說,跨距總是正數。

    對齊。表面的對齊是根據圖形顯示驅動程序的不同而定的。表面始終應該 DWORD 對齊,就是說,表面中的各個行肯定都是從 32 (DWORD) 邊界開始的。對齊可以大於 32 位,但具體取決於硬件的需求。

    打包格式與平面格式YUV 格式可以分為打包 格式和平面 格式。在打包格式中,YU V 組件存儲在一個數組中。像素被組織到了一些巨像素組中,巨像素組的布局取決於格式。在平面格式中,YU V 組件作為三個單獨的平面進行存儲。

    4:4:4 格式,每像素 32

    推薦一個 4:4:4 格式,FOURCC 碼為 AYUV。這是一個打包格式,其中每個像素都被編碼為四個連續字節,其組織順序如下所示。



    5. AYUV 內存布局

    標記了 A 的字節包含 alpha 的值。

    4:2:2 格式,每像素 16

    支持兩個 4:2:2 格式,FOURCC 碼如下:

    YUY2

    UYVY

    兩個都是打包格式,其中每個巨像素都是編碼為四個連續字節的兩個像素。這樣會使得色度水平下采樣乘以系數 2

    YUY2

    YUY2 格式中,數據可被視為一個不帶正負號的 char 值組成的數組,其中第一個字節包含第一個 Y 樣例,第二個字節包含第一個 U (Cb) 樣例,第三個字節包含第二個 Y 樣例,第四個字節包含第一個 V (Cr) 樣例,如圖 6 所示。



    6. YUY2 內存布局

    如果該圖像被看作由兩個 little-endian WORD 值組成的數組,則第一個 WORD 在最低有效位 (LSB) 中包含 Y0,在最高有效位 (MSB) 中包含 U。第二個 WORD LSB 中包含 Y1,在 MSB 中包含 V

    YUY2 是用於 Microsoft DirectX® Video Acceleration (DirectX VA) 的首選 4:2:2 像素格式。預期它會成為支持 4:2:2 視頻的 DirectX VA 加速器的中期要求。

    UYVY

    此格式與 YUY2 相同,只是字節順序是與之相反的就是說,色度字節和燈光字節是翻轉的(圖 7)。如果該圖像被看作由兩個 little-endian WORD 值組成的數組,則第一個 WORD LSB 中包含 U,在 MSB 中包含 Y0,第二個 WORD LSB 中包含 V,在 MSB 中包含 Y1



    7. UYVY 內存布局

    4:2:0 格式,每像素 16

    推薦兩個 4:2:0 每像素 16 位格式,FOURCC 碼如下:

    IMC1

    IMC3

    兩個 FOURCC 碼都是平面格式。色度頻道在水平方向和垂直方向上都要以系數 2 來進行再次采樣。

    IMC1

    所有 Y 樣例都會作為不帶正負號的 char 值組成的數組首先顯示在內存中。後面跟著所有 V (Cr) 樣例,然後是所有 U (Cb) 樣例。V U 平面與 Y 平面具有相同的跨距,從而生成如圖 8 所示的內存的未使用區域。



    8. IMC1 內存布局

    IMC3

    此格式與 IMC1 相同,只是 U V 平面進行了交換:



    9. IMC3 內存布局

    4:2:0 格式,每像素 12

    推薦四個 4:2:0 每像素 12 位格式,FOURCC 碼如下:

    IMC2

    IMC4

    YV12

    NV12

    在所有這些格式中,色度頻道在水平方向和垂直方向上都要以系數 2 來進行再次采樣。

    IMC2

     

     
     
    網站首頁 | 企業資訊 | 產品中心 | 解決方案 | 案例展示 | 技術支援 | 聯繫我們 | BBS論壇

    廣州銳目數碼科技有限公司 版權所有 @ 2006~2008
    粵ICP備08021405號, ');