專利名稱:使用圖形處理單元加速視頻解碼的制作方法
技術領域:
本發明涉及視頻解碼,尤其涉及使用圖形處理單元的加速視頻解碼。
背景技術:
多媒體是數字娛樂的核心,它通常要求非常高的處理能力,尤其是對于實時應用程序。當使用通用計算機執行實時多媒體應用程序時,計算機的中央處理單元(CPU)通常是高負荷的,并且在許多情況下,CPU不能支持實時多媒體應用程序。例如,大多數標準的家用個人計算機中的CPU沒有足夠的能力來實時解碼高清晰度視頻。
隨著硅和計算機圖形技術的進步,在主流的個人計算機以及游戲控制臺中發現了越來越多的便宜且功能強大的圖形處理單元(GPU)。GPU是設計用于執行二維和三維圖形運算的專用處理器。當計算機正在執行面向非圖形的運算時(如解碼已編碼的視頻比特流),CPU可能高負荷,而GPU卻空閑。
因此,需要將GPU的能力均衡用于非圖形應用程序。
發明內容
描述了利用圖形處理單元來加速視頻比特流的解碼。加速視頻解碼系統接收編碼的視頻流,使用中央處理單元執行一部分解碼處理,使用圖形處理單元執行另一部分解碼處理。具體來說,圖形處理單元用于執行運動補償處理、圖像重構以及色彩空間轉換。
貫穿附圖使用相同的參考標號表示相同的特征和組件。
圖1是現有技術說明示例性視頻解碼處理的流程圖。
圖2說明了加速視頻解碼系統的示例性架構。
圖3說明了利用圖形處理單元來加速視頻解碼的示例性方法。
圖4說明了圖形處理單元執行的示例性運動補償處理方法。
圖5說明了圖形處理單元執行的示例性圖像重構方法。
圖6說明了使得圖形存儲器的占用區(footprint)最小化的示例性UV分量布局。
圖7說明了使用具有有限存儲器資源和有限存儲器帶寬的GPU能夠進行視頻解碼加速的示例性數據劃分。
具體實施例方式
下面的討論針對使用圖形處理單元支持非圖形操作。具體來說,描述了示例性實施方式,其中,使用GPU來加速視頻比特流的解碼。GPU是專門用于在每頂點的基礎上(例如基于多邊形的呈現)和/或在每像素的基礎上執行圖形運算的處理單元。在所描述的實施方式中,計算密集型的且一般由中央處理單元(CPU)所執行的視頻解碼操作(即運動補償、圖像重構以及色彩空間轉換)由GPU執行,從而降低CPU的負荷,加速視頻比特流解碼過程。
這里按照運用于根據Windows Media Video格式編碼的視頻比特流來描述加速視頻解碼,但是所描述的過程也能運用于根據包括MPEG和H.26x的其它格式編碼的視頻比特流。
流視頻按照幀序列來編碼,幀序列可包括幀內編碼(intra-coded)幀(I幀)、預測幀(P幀)以及雙向預測幀(B幀)的任何組合。每個編碼的I幀包括生成和再現完整圖像所必需的所有數據。從編碼的P幀中的數據生成圖像需要P幀的數據和前一I幀或P幀(稱為參考幀)的數據。從編碼的B幀中數據生成圖像需要B幀的數據以及先前的參考I幀或P幀以及將來的參考I幀或P幀的數據。P幀和B幀也可被稱為是幀間編碼(inter-coded)幀。
每個編碼的幀(I幀、P幀或B幀)被劃分成宏塊。典型的宏塊是大小為16×16像素的區域。根據圖像的大小,每個幀可包括許多宏塊。由于I幀包括顯示完整圖像所需的所有數據,因此I幀的每個宏塊包括顯示由該宏塊所表示的一部分圖像(即16×16像素的圖像部分)所需的全部數據。如上所述,P幀是從先前的一I幀或P幀預測的。這意味著P幀的至少一個宏塊依賴于先前的一I幀或P幀的相應宏塊中的數據。P幀或B幀的各個宏塊可以是幀內編碼的或幀間編碼的。幀間編碼的宏塊依賴于參考宏塊,而幀內編碼的宏塊不依賴于參考宏塊。幀內編碼的宏塊包含生成與該預測幀相關聯的宏塊大小的圖像部分所必需的全部數據。因此,如上所述,與I幀相關聯的所有宏塊都是幀內編碼的宏塊。幀間編碼的宏塊包含描述與該預測幀相關聯的圖像部分和與參考幀相關聯的對應的圖像部分之間的差異的數據。
與幀間編碼的宏塊相關聯的數據一般包括運動矢量和差異數據。運動矢量描述要運用于參考宏塊的二維變換,以使之與預測宏塊對齊,而差異數據標識在參考宏塊與預測宏塊之間不同的特定像素。
示例性視頻解碼處理圖1是現有技術說明示例性視頻解碼處理200的流程圖。典型的視頻解碼器接收編碼的比特流,通過執行可變長度解碼102、去量化104、反離散余弦變換106、運動補償108、圖像重構110以及色彩空間轉換112來處理接收到的比特流。
可變長度編碼、離散余弦變換以及量化是眾所周知的視頻編碼技術,用于在傳送視頻比特流之前對它進行壓縮。可變長度解碼102、去量化104以及反離散余弦變換106是眾所周知的解碼技術,運用于接收到的編碼的視頻比特流,來對視頻數據解壓。可根據可變長度編碼、離散余弦變換、量化和或任何其它視頻編碼技術的任意組合來編碼(以及隨后解碼)視頻。
在所描述的實施方式中,為了提高系統性能,在視頻流被解碼之后,通過緩沖器114緩沖視頻流。
運動補償108是這樣一種處理,其中將描述二維平移(translation)的運動矢量運用于參考幀的宏塊。運動矢量是編碼的視頻比特流的一部分,描述了參考幀的宏塊中的數據和預測幀的相應宏塊中的數據之間的二維位置差異。在所描述的實施方式中,預測幀的每個宏塊具有相關聯的運動矢量。
在所描述的實施方式中,宏塊是大小為16×16的像素塊。在備選的實施方式中,可以按照4個8×8的塊來描述每個宏塊,使得每個8×8的塊分配有一個運動矢量。在這樣一種實施方式中,宏塊的每個8×8的塊可單獨被處理,但處理方式與這里描述的宏塊處理相同。因此,下面的討論描述了宏塊級執行的處理。然而,要認識到也可在其它大小的數據塊上進行相同的處理。
如圖1所示,在用于存儲要用作隨后接收到的預測幀數據的參考的先前被解碼和重構的幀數據的緩沖器116先前緩沖的參考數據上進行運動補償108。如果參考幀是錯誤解碼的或未被接收,則漂移誤差傳遞給從出錯的(或丟失的)參考幀預測的隨后的P幀和B幀。因此,精確地進行運動補償處理108是重要的。
重構110是這樣一種處理,其中將經運動補償的參考幀數據加到接收到的差異數據(與P幀或B幀相關聯的),以形成與預測幀相關聯的重構的圖像。如圖1所指示出的那樣,重構的數據可(由緩沖器116)緩沖用于隨后用作參考數據。
在顯示118之前,在重構的數據上進行色彩空間轉換112。執行色彩空間轉換處理112,以將視頻數據從創建該視頻數據的色彩空間轉換到與將顯示視頻數據的顯示設備相關聯的色彩空間。例如,典型的色彩空間轉換可以是從YUV格式到RGB格式。
示例性系統架構和方法圖2例示出加速視頻解碼系統202的示例性架構。加速視頻解碼系統202接收編碼的視頻比特流,解碼所接收的數據,并將解碼的數據傳送到顯示設備204。顯示設備204是電視機、計算機監視器或其它此類顯示設備的代表。雖然示為物理上獨立的設備,但是顯示設備204可以作為加速視頻解碼系統的集成組件來實現。
加速視頻解碼系統202是個人計算機、視頻游戲控制臺或配置成接收、解碼和再現視頻數據的其它此類設備的代表。示例性加速視頻解碼系統202包括中央處理器(CPU)206、圖形處理單元(GPU)208、以及存儲器210。示例性GPU 208包括用于以每頂點的方式執行圖形運算的可編程頂點著色器212,以及用于以每像素的方式執行圖形運算的可編程像素著色器214。
存儲器210用于存儲視頻解碼應用程序216,還可存儲其它應用程序218。存儲器210還可包括一個或多個緩沖器,例如可由CPU 206訪問的CPU緩沖器220;可由GPU 208訪問的GPU緩沖器222;以及可由顯示設備204訪問的顯示緩沖器224。其它應用程序218可在CPU 206或GPU 208上執行。執行視頻解碼應用程序216來控制CPU 206執行可變長度解碼102、去量化104、以及反離散余弦變換106。還執行視頻解碼應用程序216來控制GPU 208執行運動補償108、圖像重構110以及色彩空間轉換112。下面參考附圖3詳細描述利用GPU 208加速編碼的視頻比特流的解碼的方法。
用于加速視頻解碼的示例性方法可在由計算機執行的諸如應用程序模塊之類的計算機可執行指令的一般環境中描述加速視頻解碼。一般來說,應用程序模塊包括例行程序、程序、對象、組件、數據結構等,它們執行特定的任務或實現特定的抽象數據類型。視頻解碼應用程序216可使用任何數量的編程技術來實現,并可在本地計算環境或分布式計算環境中實現,在分布式計算環境中,任務是由基于任何數量的通信協議通過各種通信網絡鏈接的遠程處理設備執行的。在這樣一種分布式計算環境中,應用程序模塊可位于包括存儲器存儲設備的本地和遠程計算機存儲介質中。
圖3例示出利用圖形處理單元來加速視頻解碼的示例性方法300。框302-310表示CPU 206執行的處理,而框312-328表示GPU 208執行的處理。
在框302,視頻解碼系統202接收編碼的視頻比特流。如上所述,所描述的實施方式適用于根據Windows Media Video格式編碼的視頻比特流。備選的實施方式可配置成解碼根據諸如MPEG和H.26x之類的其它格式編碼的視頻比特流。
在框304,視頻解碼應用程序216控制CPU 206標識所接收的編碼視頻比特流中的編碼幀。標識的幀可以是I幀、P幀或B幀。
在框306,視頻解碼應用程序216控制CPU 206通過對所標識的幀的每個宏塊上執行可變長度解碼、去量化和/或反離散余弦變換來解碼所標識的幀。對于I幀,解碼的數據由實際圖像數據組成,而對于P幀或B幀,解碼的數據表示一個或多個參考幀圖像和由當前P幀或B幀所表示的圖像之間的差異。與每個宏塊相關聯的解碼的數據通常包括運動矢量和描述在經運動補償的參考圖像和預測圖像之間不同的像素的數據。
在框308,視頻解碼應用程序216控制CPU 206對解碼的數據進行緩沖。在所描述的實施方式中,解碼的幀數據存儲于CPU緩沖器220中。在緩沖解碼的數據之后,CPU 206如上參考框304-308那樣繼續解碼其它幀。通過緩沖解碼的數據,CPU 206可以在GPU處理先前解碼的數據的同時繼續解碼其它數據,從而通過同時利用CPU和GPU來提高系統性能。
在框310,視頻解碼應用程序216將數據從CPU緩沖器220轉移到GPU 208。在一個實施方式中,為了利用可用的帶寬,兩個或更多個具有不同數據的宏塊被打包在一起,用于從CPU 206傳輸到GPU 208。在一個實施方式中,運動矢量數據與差異數據分開地從CPU 206傳送到GPU 208。
在框312,GPU 208確定接收自CPU緩沖器220的數據是否與I幀相關聯。如果數據與I幀相關聯,則無需運動補償或圖像重構處理,處理在320繼續(從框312“是”分支),在那里,解碼的數據存儲在GPU緩沖器222中,將用作后續的預測幀的參考數據。
如果接收到的數據與P幀或B幀相關聯(從框312“否”分支),則在框314,視頻解碼應用程序216控制GPU 208執行運動補償處理。GPU 208將與所接收到的幀數據的宏塊相關聯的運動矢量運用于先前緩沖的參考數據的相應宏塊。在所描述的實施例中,支持不同的運動補償模式,根據所接收的宏塊是幀間編碼的還是幀內編碼的或者基于相關運動矢量的值而改變。同樣支持各種運動補償精度,包括整數像素、1/2像素和1/4像素精度。示例性的運動補償處理方法在下面參考圖4更為詳細地描述。
在框316,視頻解碼應用程序216確定與當前幀相關聯的所有宏塊是否都已傳送到GPU 208。如果還有更多的與當前正被處理的預測幀相關聯的差異數據,(即幀的所有宏塊還未傳送到GPU 208),則處理在如上所述的框310處繼續。另一方面,如果用于當前正被處理的預測幀的所有差異數據都已傳送到GPU 208,則在如下所述的框320執行圖像重構處理。如上所述,根據CPU 206和GPU 208之間的可用帶寬,在發送到GPU 208時,可將多個宏塊一起打包在一起。在CPU 206足夠快地解碼視頻數據以及CPU 206和GPU 208之間的存儲器帶寬足夠大的實施方式中,與幀相關聯的宏塊可以單批傳送,這就消除了對圖3中所指出的按照從框316到框312的循環的反復處理的需要。
在框318,視頻解碼應用程序216控制GPU 208重構與所接收到的預測幀數據相關聯的圖像。通過對于幀的每個宏塊,將經運動補償的參考數據加到所接收到的差異數據來進行圖像重構。示例性的圖像重構方法在下面參考圖5進一步詳述。
在框320,視頻解碼應用程序216控制GPU 208將重構的圖像數據(或者在I幀的情況下為所接收到的圖像數據)復制到GPU緩沖器222。經緩沖的圖像數據于是可用作后續接收到的預測幀數據的參考數據。在所描述的實施方式中,B幀數據不用作后續幀的參考數據,因此不在框320處進行緩沖。
在框322,視頻解碼應用程序216控制GPU 208的像素著色器組件214對重構的圖像執行色彩空間轉換處理。色彩空間轉換處理是逐像素進行的,以將圖像從建立該圖像的色彩空間(例如YUV)轉換到顯示設備204所支持的色彩空間(例如RGB)。因為色彩空間轉換施加于圖像的每個像素,因此使用GPU 208的可編程像素著色器組件214來執行色彩空間處理是合適的。
在框324,將圖像數據復制到顯示緩沖器224。在框324,還可調整幀數據的顯示順序。例如,由于B幀依賴于先前一幀以及將來一幀的數據,就可以以不同于顯示諸幀的順序的順序來接收和處理幀。在框324,調整顯示順序以恢復正確的時序。該框僅運用于I幀和P幀,并且僅當序列中包含B幀時才需要。該步驟是有必要的,因為B幀取決于兩個參考,在時間上一個是它之前,而一個是它之后。解碼的幀數據保持在顯示緩沖器224中,直到到達與該幀相關聯的計劃顯示時間為止。經緩沖的數據量取決于與顯示速度相比的處理速度。對解碼數據的緩沖還減少了顯示器圖像抖動,并允許CPU和GPU在先前處理的幀存儲于顯示224緩沖器的同時繼續處理其他幀。
在框326,視頻解碼應用程序216可任選地配置成控制GPU 208對重構的圖像進行特殊效果處理。例如,可控制GPU 208進行基于頂點的或基于像素的特殊效果處理,例如去交錯、反向電視電影、縮放、淡入淡出以及圖像銳化或模糊化。
在框328,解碼的幀圖像傳送到顯示設備204。
示例性運動補償處理方法圖4例示出GPU 208執行的示例性運動補償處理方法。如參考圖3的框314所述那樣,所例示的方法可由GPU來執行。
如上所述,在示例性實施方式中,16×16的宏塊可具有一個運動矢量(即1MV宏塊),或者宏塊可被劃分成4個8×8的塊,每個塊具有運動矢量(即4MV宏塊)。在所描述的實施方式中,4MV宏塊的每個8×8的塊被分開處理,與處理1MV宏塊的方式相同。方法314是參考1MV宏塊來描述的,但是也可對于4MV宏塊的每個較小的塊進行。
在框402,GPU 208初始化與諸如P幀或B幀的預測幀的宏塊相關聯的運動矢量數據。視頻解碼應用程序216控制GPU 208的可編程頂點著色組件212對所接收到的運動矢量數據進行初始處理,以生成頂點數據。對于每個目標宏塊(即要被重構的宏塊),確定每個頂點(即四角像素的每一個)的目標位置和紋理地址。目標位置規定了要被重構的宏塊的目標紋理中的位置,并用于三角形排列。紋理地址規定了參考幀中相應宏塊的頂點的位置。在一個實施方式中,CPU 206通過將運動矢量運用于目標塊位置來計算紋理地址,并將紋理地址發送給GPU 208。在備選實施方式中,CPU 206將運動矢量發送給GPU 208,頂點著色器212配置成計算紋理地址。
在框404,GPU 208確定要被處理的宏塊是否是幀內編碼的宏塊。如果要被處理的宏塊是幀內編碼的宏塊(從框404“是”分支),則所接收的宏塊數據與0值的紋理進行α混合(alpha blend)。由于幀內編碼的宏塊包含生成完整的16×16像素面積的圖像所需的全部數據,將所接收的數據與0值的紋理進行混合導致包括與所接收的宏塊對應的完整16×16像素面積的圖像的目標紋理。
在備選實施方式中,幀內編碼的宏塊以與帶有0運動矢量的幀間編碼的宏塊被處理的方式相同的方式被處理(下面參考框410描述)。在這樣一種實施方式中,由于將先前生成的參考圖像的部分0值化是計算昂貴的,因此圖像區域之外的先前被清除的區域(即參考像素值設置為0)用作幀內編碼的宏塊的相應參考宏塊。
在另一實施方式中,對于幀內編碼的宏塊的運動補償處理是通過在處理任何其它宏塊之前首先清除目標紋理(即將每個像素值設置為0)來進行的。
如果要被處理的宏塊是幀間編碼的宏塊(從框404“否”分支),則在框408,GPU確定與該宏塊相關聯的運動矢量是否等于0。如果運動矢量具有0值(從框408“是”分支),則在框410,將經緩沖的參考數據中的相應的宏塊復制到目標紋理。
在備選實施方式中,對具有0值運動矢量的宏塊的運動補償處理可以與對帶有非0運動矢量的宏塊進行的運動補償處理相同的方式來進行。然而,在所描述的實施方式中,為了簡化處理,帶有0運動矢量的宏塊不同于帶有非0運動矢量的宏塊而被處理。
如果要被處理的宏塊是帶有非0運動矢量的幀間編碼的宏塊(從框408“否”分支),則在框412,GPU 208確定運動矢量是否指向圖像區域之外。如果運動矢量指向圖像區域之外(從框412“是”分支),則在框414,GPU 208執行隱填充(implicit padding)。
在框414,GPU 208執行填充處理,以處理指向圖像區域之外的運動矢量。例如,如果與目標位置(0,0)處的宏塊相關聯的運動矢量是(-3,-4),則參考宏塊位于在圖像區域之外的位置(-3,-4)。為了確保相應的參考數據存在于圖像區域之內,填充帶寬(一般是16像素寬)被加到參考圖像的每一邊。在所描述的實施方式中,通過配置GPU中紋理的渲染狀態和紋理地址模式來隱含地執行填充(框414),使得DirectX會自動執行填充。
在備選實施方式中,使用渲染通道作為矢量數據初始化(框402)的一部分來顯式地進行填充。也就是說,在進行運動補償處理之前,使用渲染通道來顯式地添加參考幀的四個邊界。頂點著色器212被編程來將相同的紋理地址分配給所添加的邊界像素。由于頂點的紋理地址由像素著色器使用來采樣像素值,因此相同的紋理地址將把相應的參考像素值正確地設置成所希望的邊界像素值。
根據進行運動補償的精度,可在框420使用雙線性濾波器內插參考數據以產生1/2像素精度,或可在框422使用雙立方過濾波器內插以產生1/4像素精度。下面更為詳細地描述實現子像素運動補償。整數像素精度不需要額外的濾波,由圖4中從框414到框420的箭頭表示。
在框420,與要被處理的宏塊相關聯的運動矢量被施加到經緩沖的參考數據中相應宏塊,經運動補償的參考數據被寫入目標紋理。
在示例性實施方式中,由于條件運算在GPU 208中是計算昂貴的,因此根據運動補償模式和運動補償精度,將宏塊一起打包并成批發送到GPU 208。例如,當將幀內編碼的宏塊一起打包在一起時,由GPU 208對那些宏塊進行的運動補償處理可如上參考圖4的框402至406來描述。當將帶有0運動矢量的幀間編碼的宏塊一起打包在一起時,GPU 208對那些宏塊進行的運動補償處理可如上參考圖4的框402至410來描述。當帶有0值運動矢量和整數像素精度的幀間編碼的宏塊被打包在一起時,GPU 208對那些宏塊進行的運動補償處理可如上參考框402、412、414和420來描述。框416表示對1/2精度運動補償進行的額外處理,框418表示對1/4精度運動補償進行的額外處理。
實現子像素運動補償精度如上所述,運動補償處理對于諸如整數像素、1/2像素和1/4像素的各種精度來說是不同的。運動補償精度指的是運動矢量的精度。例如,運動矢量可描述宏塊到最近的像素的移動(即整數像素精度)、到最近的1/2像素的移動(即1/2像素)、或到最近的1/4像素的移動(即1/4精度)。運動補償處理計算的復雜性根據要求最小復雜性的計算的整數像素精度和要求最高復雜性的計算的1/4像素精度而不同。在示例性實施方式中,由于圖像處理單元的像素著色器組件的處理局限(一般受限于每條渲染通路8行代碼),根據運動補償精度對運動補償處理進行分批。
在一個實施方式中,通過求相鄰像素值的和,然后將結果除以適當的數來獲得子像素精度。例如,可以對四個像素值求和,然后除以4(例如使用雙線性內插濾波器),產生1/2像素精度。在所描述的實施方式中,像素著色器214提供四個獨立的8比特通道,對應于紅色、綠色、藍色和α。由于每個通道局限于8比特,因此每個通道可表示0~255的范圍。在所描述的實施方式中,可能四個像素值的和會大于255,導致溢出。為了避免這種情況出現,相鄰像素值首先被分解成商和余數,例如通過將每個值除以4來進行。然后分別對商和余數進行求和和除法。產生的商隨后與經除數(該例中為4)相除的值相乘,并加到產生的余數值。根據運動補償精度和內插濾波器,可以除以16、32、64以保證不溢出。例如,對于使用雙立方內插濾波器的1/4像素運動補償,參考像素值以16分解。
在備選實施方式中,通過將相鄰像素乘以各自的權重,然后將結果值加在一起來獲得子像素精度。例如,四個像素值各自乘以.25,然后將結果值相加,導致1/2像素精度。如上所述,像素著色器的整數精度局限于最大8比特,中間結果被舍入,從而引入舍入誤差。然而,由于誤差將被傳遞給以后的幀,因此這種誤差是不可接受的。為了確保精確的結果,在所描述的實施方式中,舍入誤差被歸并。具體來說,在計算商的過程中引入的舍入誤差被計算并傳遞到余數的計算中。例如,假設參考像素值以16分解。為了計算最終值,計算商和余數的內插并求和。商的舍入誤差乘以16,并加到余數的舍入誤差。將商的舍入誤差歸并到余數的計算中,確保了不會引入中間計算的舍入誤差。
在另一備選實施方式中,生成查找表來存儲預先計算的中間結果。內插系數可以是高度無規則的,例如雙立方濾波器的那些。這種無規則的內插系數導致GPU 208要進行復雜的運算。通過允許對至少某些中間結果的預先計算和存儲,查找表的使用可提高系統效率,尤其是當內插系數是無規則的情況下更是如此。為了確保查找表可由GPU 208訪問,查找表可實現為帶有與2的冪相當大小的混合式(swizzled)紋理。
示例性圖像重構圖5例示出可由GPU 208執行的示例性圖像重構。
在框502,GPU 208接收與諸如P幀或B幀的預測幀相關聯的差異數據。如上所述,在示例性實施方式中,為了利用可用帶寬,差異數據的兩個或更多宏塊可打包在一起從CPU 206傳送到GPU 208。
在框504,GPU 208對所接收到的差異數據的宏塊解包。以保留打包的宏塊的原始順序的方式來解包宏塊。
在框506,解碼的幀數據添加到相應的經運動補償的參考數據,以生成與該幀相關聯的經重構的圖像。
在所描述的實施方式中,圖像的每個像素可以8比特無符號數表示,因此具有0~255的值。差異數據具有-255~255的范圍。因此,需要9比特來表示差異數據。進行圖像重構處理以將所接收到的差異數據添加到相應的參考數據,導致帶有在0~255之間的值的像素的預測圖像。
在所描述的實施方式中,像素著色器214提供四個獨立的8比特通道,對應于紅色、綠色、藍色和α。像素著色器在任一渲染通道中僅能保持多達四個紋理,算術指令數不能超過8。給定上述的像素著色器限制,預測圖像重構并不直接。
在所描述的實施方式中,使用兩個8比特通道存儲9比特有符號差異數據。一個通道(例如α通道)用于保持與差異數據相關聯的符號,另一通道用于保持差異數據值。對于每個像素,該值既被加到參考數據也被從參考數據中減去,然后執行條件運算來通過檢查存儲于α通道中的符號來選擇合適的結果。
示例性GPU優化GPU 208進行的用于加速視頻比特流的解碼的處理可以各種方式被優化。數據歸并、預設的UV數據布局以及數據劃分是可被實現的處理優化的三個例子。
數據歸并可用于降低頂點著色器212上的負荷。由于像素著色器214逐像素地處理數據,對于某一幀,像素著色器214上的負荷是由要被渲染的圖像的尺寸來確定的。相反,頂點著色器212逐頂點地處理數據。因此,對于某一幀,頂點著色器212上的負荷直接與要為該給定幀處理的數據塊的數量成比例。例如,對于具有20個宏塊的幀,頂點著色器212上的負荷是對于帶有10個宏塊的幀的負荷的兩倍。
在一個實施方式中,為了降低頂點著色器處理負荷,具有相等運動矢量的相鄰宏塊歸并在一起,以形成要被處理的更大的數據塊。類似地,相鄰的幀內編碼的宏塊(不具有運動矢量)也可歸并在一起,并作為一個數據塊被處理。
預設的UV布局可實現用于將與圖像相關聯的存儲數據所要求的存儲器最小化。許多個人計算機顯卡要求紋理大小等于2的冪。例如,320×240圖像要求512×512紋理。通過在紋理上排列Y、U和V圖像分量時考慮紋理大小約束,可使用最小紋理需要,從而潛在地降低圖像的存儲器占用區(footprint)。
圖6例示出將所要求的存儲器最小化的目標紋理上的Y、U和V圖像分量的布局。示例性的320×240圖像由320×240的Y分量602、160×120的U分量以及160×120的V分量606組成。如果每個圖像分量被填充(例如如上參考圖4的框414所述),則填充的Y分量608是684×304、填充的U分量610是192×152、填充的V分量612是192×152。
如果U和V分量布置在目標紋理614上Y分量608的側邊上,則要求目標紋理614至少為1024×512。然而,如果U和V分量布置在目標紋理614上Y分量608之下,則僅要求目標紋理為512×512,顯著減少了存儲圖像所要求的存儲器。因此,在較佳的實施方式中,在U和V分量布置在目標紋理之前考慮目標大小約束,以將存儲圖像所要求的存儲器量最小化。
數據劃分是可用于提高GPU 208的性能的另一優化。在包括圖形處理器的許多系統中,直接由GPU可訪問的視頻存儲器一般是有限的。因此,可預見與大圖像相關聯的數據的尺寸可能超過可用的視頻存儲器。與GPU 208相關聯的存儲器帶寬(一般指加速圖形端口(AGP)存儲器帶寬)也可能限制GPU可處理的數據量。當GPU 208試圖讀或寫超過AGP存儲器帶寬的數據時,GPU處理由于被讀或寫的數據太大而停止。在示例性實施方式中,與大圖像相關聯的數據可被劃分成小的數據集,每個都可由GPU 208單獨處理。
圖7例示出劃分成四個更小的重疊數據集702(1)、702(2)、702(3)和702(4)的示例性大圖像702。在所例示的例子中,大圖像702被劃分成四個子圖像,每個大小等于原始圖像的1/4加上保護帶,以確保與每個子圖像相關聯的運動矢量不會指向該圖像區域的外部。例如,子圖像702(1)與子圖像702(2)和702(3)重疊。通過將圖像數據劃分成更小的子集,即使GPU可訪問的視頻存儲器是有限的,GPU 208也能夠加速視頻解碼處理。
結論雖然已經以特定于結構化特征和/或方法邏輯步驟的語言描述了系統和方法,但是,要理解所附權利要求中定義的發明不限于所描述的特定特征或步驟。相反,特定特征和步驟是作為實施所要求的發明的較佳形式而揭示的。
權利要求
1.一種方法,包括接收已編碼的視頻比特流,所述視頻比特流包括幀內編碼的幀數據和幀間編碼的幀數據;使用中央處理單元來解碼所述幀內編碼的幀數據;將所述幀內編碼的幀數據傳送到圖形處理單元;使用所述圖形處理單元進行對要用作所述幀間編碼的幀數據的參考幀數據的幀內編碼的幀數據的副本進行緩沖;以及將所述幀間編碼的幀數據發送到顯示設備以便被顯示;使用所述中央處理單元解碼所述幀間編碼的幀數據;將所述幀間編碼的幀數據傳送到所述圖形處理單元;以及使用所述圖形處理單元進行將與所述幀間編碼的幀數據相關聯的運動矢量應用于所述參考幀數據,以生成經運動補償的參考幀數據;以及通過將所述幀間編碼的幀數據加到所述經運動補償的參考幀數據來重構與所述幀間編碼的幀數據相關聯的圖像數據。
2.如權利要求1所述的方法,其特征在于,解碼所述幀間編碼的幀數據包括執行可變長度解碼處理。
3.如權利要求1所述的方法,其特征在于,解碼所述幀內編碼的幀數據包括執行去量化處理。
4.如權利要求1所述的方法,其特征在于,解碼所述幀內編碼的幀數據包括應用離散反余弦變換。
5.如權利要求1所述的方法,其特征在于,將所述幀間編碼的幀數據傳送到所述圖形處理單元包括識別所述幀間編碼幀數據的兩個或多個宏塊;將所述兩個或更多個宏塊一起打包成數據包;以及將所述數據包傳送到所述圖形處理單元。
6.如權利要求1所述的方法,其特征在于,所述幀間編碼的幀數據包括不依賴于來自相應的參考宏塊的數據的多個幀內編碼的宏塊、以及依賴于來自相應的參考宏塊的數據的多個幀間編碼的宏塊,其中,將所述幀間編碼的幀數據傳送到所述圖形處理單元包括識別所述幀間編碼的幀數據的兩個或多個幀間編碼的宏塊;將所述兩個或多個幀間編碼的宏塊一起打包成僅包含幀間編碼的宏塊的數據包;以及將所述數據包傳送到所述圖形處理單元。
7.如權利要求1所述的方法,其特征在于,所述幀間編碼的幀數據包括不依賴于來自相應的參考宏塊的數據的多個幀間編碼的宏塊、以及依賴于來自相應的參考宏塊的數據的多個幀間編碼的宏塊,其中,將所述幀間編碼的幀數據傳送到所述圖形處理單元包括識別所述幀間編碼的幀數據的兩個或多個幀內編碼的宏塊;將所述兩個或多個幀內編碼的宏塊一起打包成僅包含幀內編碼的宏塊的數據包;以及將所述數據包傳送到所述圖形處理單元。
8.如權利要求1所述的方法,其特征在于,所述幀間編碼的幀數據包括多個宏塊,其中,每個宏塊具有相關聯的運動矢量,并且其中,將所述幀間編碼的幀數據傳送到所述圖形處理單元包括識別兩個或多個宏塊,每個宏塊具有等于零的相關聯的運動矢量;將所述兩個或多個宏塊一起打包成僅包含帶有零運動矢量的宏塊的數據包;以及將所述數據包傳送到所述圖形處理單元。
9.如權利要求1所述的方法,其特征在于,所述幀間編碼的幀數據包括多個宏塊,其中,每個宏塊具有相關聯的運動補償精度,且其中,將所述幀間編碼的幀數據傳送到所述圖形處理單元包括識別兩個或多個宏塊,每個宏塊具有相同的運動補償精度;將所述兩個或多個宏塊一起打包成僅包含具有相同運動補償精度的宏塊的數據包;以及將所述數據包傳送到所述圖形處理單元。
10.如權利要求9所述的方法,其特征在于,所述運動補償精度是對于最近的像素而言的。
11.如權利要求9所述的方法,其特征在于,所述運動補償精度是對于最近的1/2像素而言的。
12.如權利要求9所述的方法,其特征在于,所述運動補償精度是對于最近的1/4像素而言的。
13.如權利要求1所述的方法,其特征在于,還包括使用所述圖形處理單元來對要用作后續的幀間編碼的幀數據的參考數據的經重構的圖像數據的副本進行緩沖。
14.如權利要求1所述的方法,其特征在于,還包括使用所述圖形處理單元來將所述幀內編碼的幀數據從第一色彩空間轉換到第二色彩空間,所述第二色彩空間是所述顯示設備所支持的色彩空間。
15.如權利要求1所述的方法,其特征在于,還包括使用所述圖形處理單元來將經重構的圖像數據從第一色彩空間轉換到第二色彩空間,所述第二色彩空間是所述顯示設備所支持的色彩空間。
16.一種方法,包括接收已編碼的視頻數據;使用第一處理單元來解壓所述已編碼的視頻數據;以及使用第二處理單元來執行與所述視頻數據相關聯的運動補償處理。
17.如權利要求16所述的方法,其特征在于,所述第一處理單元被實現為中央處理單元。
18.如權利要求16所述的方法,其特征在于,所述第二處理單元被實現為圖形處理單元。
19.如權利要求16所述的方法,其特征在于,所述第二處理單元被實現為被配置成執行基于向量的圖形處理運算的圖形處理單元。
20.如權利要求16所述的方法,其特征在于,所述第二處理單元被實現為被配置成執行基于像素的圖形處理運算的圖形處理單元。
21.如權利要求16所述的方法,其特征在于,還包括使用所述第二處理單元來執行與所述視頻數據相關聯的預測圖像重構。
22.如權利要求16所述的方法,其特征在于,還包括使用所述第二處理單元來執行與所述視頻數據相關聯的色彩空間轉換處理。
23.一種系統,包括被配置成執行與解碼視頻比特流相關聯的第一運算的中央處理單元;以及被配置成執行與解碼視頻比特流相關聯的第二運算的圖形處理單元。
24.如權利要求23所述的系統,其特征在于,所述圖形處理單元包括被配置成執行基于像素的圖形處理運算的可編程像素著色器組件;以及被配置成執行基于頂點的圖形處理運算的可編程頂點著色器組件。
25.如權利要求23所述的系統,其特征在于,所述第一運算包括視頻解壓運算。
26.如權利要求23所述的系統,其特征在于,所述第一運算包括離散反余弦變換、去量化以及可變長度解碼中的至少一個。
27.如權利要求23所述的系統,其特征在于,所述第二運算包括色彩空間轉換運算。
28.如權利要求23所述的系統,其特征在于,所述第二運算包括圖像重構運算。
29.如權利要求23所述的系統,其特征在于,所述第二運算包括運動補償運算。
30.如權利要求23所述的系統,其特征在于,還包括用于存儲已解碼的視頻比特流數據的緩沖器。
31.如權利要求23所述的系統,其特征在于,還包括被配置成顯示視頻比特流的顯示設備。
32.一種系統,包括用于解碼已編碼的視頻比特流的中央處理單元;用于執行與所述視頻比特流相關聯的運動補償處理的可編程頂點著色器;以及用于執行與所述視頻比特流相關聯的圖像重構的可編程像素著色器。
33.一種系統,包括中央處理單元;圖形處理單元;以及視頻解碼應用程序,它被配置成指示所述中央處理單元執行與解碼已編碼的視頻比特流相關聯的第一運算;以及指示所述圖形處理單元執行與解碼已編碼的視頻比特流相關聯的第二運算。
34.如權利要求33所述的系統,其特征在于,所述第一運算包括對已編碼的視頻比特流的幀解壓。
35.如權利要求33所述的系統,其特征在于,所述第二運算包括將與已編碼的視頻比特流的幀相關聯的運動矢量應用于參考幀數據。
36.一種系統,包括用于利用中央處理單元執行視頻解碼處理的第一部分的裝置;以及用于利用圖形處理單元執行視頻解碼處理的第二部分的裝置。
37.一個或多個包括計算機可執行指令的計算機可讀介質,當所述計算機可執行指令被執行時,指示計算系統進行使用中央處理單元對接收到的視頻比特流解壓;以及使用圖形處理單元對所述視頻比特流進行運動補償處理。
38.如權利要求37所述的一個或多個計算機可讀介質,其特征在于,還包括計算機可執行指令,當所述計算機可執行指令被執行時,指示計算系統進行在所述視頻比特流的一特定幀大于所述圖形處理單元可處理的最大數據尺寸的情況下,指示所述中央處理單元將與該幀相關聯的數據劃分成重疊的子圖片,每個子圖片比所述最大數據尺寸小。
39.如權利要求37所述的一個或多個計算機可讀介質,其特征在于,還包括計算機可執行指令,當所述計算機可執行指令被執行時,指示計算系統使用所述圖形處理單元應用雙線性濾波器以達到與運動補償處理相關聯的1/2像素精度。
40.如權利要求37所述的一個或多個計算機可讀介質,其特征在于,還包括計算機可執行指令,當所述計算機可執行指令被執行時,指示計算系統使用所述圖形處理單元應用雙立方濾波器以達到與運動補償處理相關聯的1/4像素精度。
41.如權利要求37所述的一個或多個計算機可讀介質,其特征在于,還包括計算機可執行指令,當所述計算機可執行指令被執行時,指示計算系統使用所述圖形處理單元來執行圖像重構。
42.如權利要求41所述的一個或多個計算機可讀介質,其特征在于,還包括計算機可執行指令,當所述計算機可執行指令被執行時,指示計算系統進行重構包括Y、U和V分量的圖像,使得Y、U和V分量排列在由計算機系統所支持、且足夠大以保持圖像的Y、U和V分量的最小目標紋理上。
全文摘要
加速視頻解碼系統使用圖形處理單元來執行運動補償、圖像重構和色彩空間轉換處理,同時利用中央處理單元來執行其它解碼處理。
文檔編號H04N7/12GK1868211SQ200480008472
公開日2006年11月22日 申請日期2004年2月9日 優先權日2003年3月28日
發明者G·沈, L·朱, S·李, Y·-Q·張, R·F·拉施德 申請人:微軟公司