本發(fā)明涉及解碼視頻,并且更具體地,但不限于用于解碼視頻的電路、方法和視頻解碼器。
背景技術(shù):
為了獲得高清晰度視頻解碼器的吞吐量,例如,4K@P60(每秒60幀逐行掃描,寬度4096)或8K@P60(每秒60幀逐行掃描,寬度8192),通常需要以多個硬件加速器或多個通用處理器進行并行處理。對于多硬件加速器方案,幀級并行化被廣泛使用。對于多通用處理器方案(CPU、GPU、DSP等),多種方法被使用,其中包括分片(tile)并行化、條帶(slice)并行化、幀并行化、基本波前(wavefront)并行化等。
技術(shù)實現(xiàn)要素:
本發(fā)明的實施例公開了一種用于解碼視頻的電路,包括:至少一個熵轉(zhuǎn)碼器被配置為對所接收的比特流執(zhí)行至少一個熵轉(zhuǎn)碼,以生成轉(zhuǎn)碼流,其中該至少一個熵轉(zhuǎn)碼中的每一個包括對該比特流的語法轉(zhuǎn)碼;至少一個主解碼單元被配置為對該轉(zhuǎn)碼流的一幀執(zhí)行至少一個轉(zhuǎn)碼流解壓縮和像素解碼。
可替代地,該至少一種熵轉(zhuǎn)碼器包括多個熵轉(zhuǎn)碼器,并且該至少一個主解碼單元包括多個主解碼單元,其中:多個熵轉(zhuǎn)碼器被配置為在幀級并行 化地對所接收的比特流執(zhí)行多個熵轉(zhuǎn)碼,以生成轉(zhuǎn)碼流,其中多個熵轉(zhuǎn)碼的每一個包括對比特流的語法轉(zhuǎn)碼;多個主解碼單元被配置為以多層的波前級并行化地對轉(zhuǎn)碼流的一幀執(zhí)行多個轉(zhuǎn)碼流解壓縮和像素解碼。
一種視頻解碼器,包括以上所討論的電路。
在本發(fā)明另一實施例中,解碼視頻的方法包括對所接收的比特流執(zhí)行至少一個熵轉(zhuǎn)碼,以生成轉(zhuǎn)碼流,其中該至少一個熵轉(zhuǎn)碼中的每一個包括對比特流的語法轉(zhuǎn)碼;對轉(zhuǎn)碼流的幀執(zhí)行至少一個轉(zhuǎn)碼流解壓縮和像素解碼。
可替代地,執(zhí)行至少一個熵轉(zhuǎn)碼還包括幀級并行化地對所接收的比特流執(zhí)行多個熵轉(zhuǎn)碼,以生成轉(zhuǎn)碼流,其中多個熵轉(zhuǎn)碼的每一個包括對比特流的語法轉(zhuǎn)碼:以及執(zhí)行至少一個轉(zhuǎn)碼流解壓縮和像素解碼還包括以多層的波前級并行化地對轉(zhuǎn)碼流的幀執(zhí)行多個轉(zhuǎn)碼流解壓縮和像素解碼。
附圖說明
本發(fā)明通過附圖以示例性方式示出。附圖應(yīng)被理解為示例性的而不是限制性的,本發(fā)明的范圍由權(quán)利要求所限定。在附圖中,相同的附圖標記代表相同的元件。
圖1是示出電路100的實施例的圖。
圖2A和2B是分別示出實施例中具有不同圖像結(jié)構(gòu)的圖像如何被轉(zhuǎn)換成波前形式的圖。
圖3是示出熵轉(zhuǎn)碼器的結(jié)構(gòu)的圖。
圖4是示出實施例中用于解碼多個CTU-行(CTU-Rows)的主解碼單元的處理順序的圖。
圖5是示出當(dāng)根據(jù)本發(fā)明的實施例以對角線順序處理CTU時,參考數(shù)據(jù)是如何被跨多個CTU共享的圖。
圖6A是示出運動補償L2緩存和行緩沖被跨多個主解碼單元共享的圖。
圖6B是示出單個主解碼單元的結(jié)構(gòu)的圖。
圖7是示出視頻解碼器的結(jié)構(gòu)的圖。
圖8是示出本發(fā)明的實施例的方法的流程圖。
圖9是示出熵轉(zhuǎn)碼的詳細運行的流程圖。
圖10是示出根據(jù)本發(fā)明的實施例的視頻解碼器的工作流程的流程圖。
具體實施例
本發(fā)明的各個方面和示例將被描述。以下描述提供了具體細節(jié)以透徹理解和實現(xiàn)對這些實施例的描述。然而,本領(lǐng)域技術(shù)人員將理解的是本發(fā)明可以在沒有許多這些細節(jié)的情況下被實踐。此外,一些眾所周知的結(jié)構(gòu)或功能可以不被詳細示出或描述,以避免不必要地模糊相關(guān)描述。
在以下描述中,數(shù)據(jù)的范圍如下所示:
熵轉(zhuǎn)碼器:0~P-1;
主解碼單元:0~L-1;
DDR中每幀的轉(zhuǎn)碼流:0~K-1;
以CTU為單位的圖像高度:0~N-1;以及
以CTU為單位的圖像寬度:0~M-1。
圖1是示出電路100的實施例的圖。
電路100包括多個編號為0、1、...P-1的熵轉(zhuǎn)碼器和多個主解碼單元0、1、...L-1。多個熵轉(zhuǎn)碼器0、1、...P-1在幀級并行化地對所接收的比特流執(zhí)行多個熵轉(zhuǎn)碼,以生成轉(zhuǎn)碼(或重新壓縮)流,其中多個熵轉(zhuǎn)碼的每一個包括對比特流的語法轉(zhuǎn)碼。在一個實施例中,多個熵轉(zhuǎn)碼器是幀級并行化地執(zhí)行多個熵轉(zhuǎn)碼的幀級熵轉(zhuǎn)碼器,這意味著熵轉(zhuǎn)碼并行在多幀上同時執(zhí)行。根 據(jù)一個實施例,存在多個熵轉(zhuǎn)碼器,例如,P個熵轉(zhuǎn)碼器,以及每一個熵轉(zhuǎn)碼器處理與來自其它熵轉(zhuǎn)碼器的幀不同的幀的比特流,或換言之,P個熵轉(zhuǎn)碼器并行處理來自不同的幀的比特流。
多個主解碼單元0、1、...L-1以多層的波前級并行化地對轉(zhuǎn)碼流的一幀執(zhí)行多個轉(zhuǎn)碼流解壓縮和像素解碼。注意多個熵轉(zhuǎn)碼器和多個主解碼單元能夠并行執(zhí)行它們各自的操作,或換言之,同時進行。在一些實施例中,熵轉(zhuǎn)碼器和主解碼單元之間的并行操作可以通過DDR來實現(xiàn)。例如,當(dāng)該系統(tǒng)最初啟動時,主解碼單元可以在空閑狀態(tài)。當(dāng)轉(zhuǎn)碼流的第一幀準備好之后,主解碼單元可以開始工作。同時,熵轉(zhuǎn)碼器可以開始處理轉(zhuǎn)碼流的第二幀。
波前并行處理(WPP)或波前并行化是當(dāng)條帶被分成CTU的多行時,其中第一行被正常解碼,但每一附加行的解碼需要前一行的相關(guān)信息。WPP具有來自先前CTU的行的熵編碼器使用信息,并允許并行處理的方法,其可以允許比分片(tile)更好的壓縮。波前并行化的細節(jié)將在下文參考圖2A和2B進行詳細討論。
在一個實施例中,所接收的比特流可以以不同格式被編碼。多個熵轉(zhuǎn)碼器的每一個將所接收的以不同格式被編碼的比特流變換為統(tǒng)一的波前子流格式的轉(zhuǎn)碼流。
盡管圖1示出了包括多個熵轉(zhuǎn)碼器和多個主解碼單元的實施例,但是可替代地,本發(fā)明的實施例還包括電路,它包括一個熵轉(zhuǎn)碼器和一個主解碼單元。熵轉(zhuǎn)碼器被配置為對所接收的比特流執(zhí)行至少一個熵轉(zhuǎn)碼,以生成轉(zhuǎn)碼流,其中該熵轉(zhuǎn)碼包括對該比特流的語法轉(zhuǎn)碼。主解碼單元被配置為對該轉(zhuǎn)碼流的一幀執(zhí)行至少一個轉(zhuǎn)碼流解壓縮和像素解碼。
可選地,本發(fā)明的實施例也適用于包括一個熵轉(zhuǎn)碼器和多個主解碼單元的電路,或者包括多個熵轉(zhuǎn)碼器和一個主解碼單元的電路。
圖2A和2B是分別示出實施例中具有不同圖像結(jié)構(gòu)的圖像如何被轉(zhuǎn)換成波前形式的圖。
熵轉(zhuǎn)碼器并行運行,并且處理不同的幀的壓縮流。熵轉(zhuǎn)碼器的輸入能夠符合各種編解碼器標準,如HEVC/H.265,Google VP9和中國AVS2,符合各種圖像結(jié)構(gòu),如分片、條帶或波前。在熵轉(zhuǎn)碼之后,熵轉(zhuǎn)碼器將輸出統(tǒng)一的波前子流格式的轉(zhuǎn)碼流,使得后一階段能夠正確并迅速地處理轉(zhuǎn)碼流。如圖2A和2B所示,具有多個分片或多個條帶的M×N的CTU的一幅圖像將被轉(zhuǎn)換到波前形式的N子流。
具體而言,在圖2A中,在左側(cè)部分中示出的所接收的比特流被排列為分片結(jié)構(gòu)。分片允許圖像被劃分成能夠被獨立地解碼/編碼的矩形區(qū)域的網(wǎng)格。分片的主要目的是允許并行處理。分片排列的所接收的比特流被轉(zhuǎn)換成在圖2A的右側(cè)部分示出波前形式。在圖2A的右側(cè)部分示出的幀被以波前形式排列,也即,該幀被分成CTU的行,其中第一行被正常解碼,但每一附加行的解碼需要前一行的相關(guān)信息。
在圖2B中,在左側(cè)部分中示出的所接收的比特流被排列為條帶結(jié)構(gòu)。條帶是以光柵掃描的順序進行解碼的CTU。術(shù)語光柵掃描或進行光柵掃描,指電視中圖像采集和重建的矩形圖案。類似地,該術(shù)語也用于光柵圖形,在大多數(shù)計算機位圖圖像系統(tǒng)中使用的圖像存儲和傳輸?shù)哪J健E帕性跅l帶中的所接收的比特流被轉(zhuǎn)換成在圖2B的右側(cè)部分中所示的波前形式。在圖2B的右側(cè)部分中所示的幀被以波前形式排列,也即,該幀被分成CTU的行,其中第一行被正常解碼,但每一附加的行需要前一行的相關(guān)信息。
圖3是如圖1中所示的熵轉(zhuǎn)碼器(0到P-1)的每一個的結(jié)構(gòu)的詳細框圖。
圖3中示出的熵轉(zhuǎn)碼器300包括三個部分:熵解碼器310、熵編碼器 320和流打包器330。在熵轉(zhuǎn)碼器300之前的流預(yù)解析器350掃描初始比特流,并將一幀的編碼的流數(shù)據(jù)傳遞到每個熵轉(zhuǎn)碼器300。熵解碼器310對所接收的以不同的格式編碼的比特流進行熵解碼。熵編碼器320對解碼的比特流熵編碼,并且解碼的比特流也能夠被稱為轉(zhuǎn)碼流,因為它首先被解碼,然后被編碼。轉(zhuǎn)碼流將被由流打包器330打包成統(tǒng)一格式的波前子流(或也稱為統(tǒng)一的波前子流格式的比特流),并連同子流入口點一起存儲在雙倍數(shù)據(jù)速率(DDR)存儲器中。DDR代表在電子系統(tǒng)中一種廣泛使用的存儲器,該系統(tǒng)可以是片外存儲器。入口點指特定子流相對于DDR中相同幀的第一子流的偏移。后期解碼所需的命令將存儲在DDR的命令隊列中。多個熵轉(zhuǎn)碼器單元將以幀并行化地運行。
圖4是示出實施例中用于解碼多個CTU-行的主解碼單元的處理順序的圖。如圖4中所示,轉(zhuǎn)碼的波前子流和有關(guān)信息將按照每幀被存儲在DDR。注意如圖4中所示的幀X的轉(zhuǎn)碼子流示例圖與圖2A或圖2B的右側(cè)部分相同。在圖4中,不同子流和有關(guān)信息在長度上是變化的。注意一些子流,例如CTU行3的子流3的長度不同于CTU行N-2的子流N-2的長度,因為它們的信息量不同。此外,轉(zhuǎn)碼子流示例圖只是表明不同子流的長度是可變的,并不代表子流在存儲器中的實際存儲位置。
假設(shè)總的L個(序號分別為0,1,2......L-1)主解碼單元正在運行。數(shù)字L可以根據(jù)系統(tǒng)的性能和功耗而變化。數(shù)字J可以被定義為J=ceil(N/2L)-1,其中N表示一個圖像可以包括的CTU的行數(shù)。ceil(或有時被稱為ceiling)函數(shù)將一個實數(shù)映射為該實數(shù)后面的最小的整數(shù)(向上取整)。因此,子流的序號可以被表示為2L*J+0,2L*J+1,2L*J+2,2L*J+3,2L*J+4,2L*J+5...2L*J+2L-2,2L*J+2L-1。當(dāng)J=0時,以上表達式可以取0,1,2,3,4,5...2L-2,2L-1的值。當(dāng)J=1時,以上表達式可以取2L+0, 2L+1,2L+2,2L+32L+4,2L+5,4L-2,4L-1的值。
假設(shè)每一個主解碼單元能夠解碼兩個子流。然后子流2L*J+0和子流2L*J+1由主解碼單元0處理,被表示為垂直線上的塊。子流2L*J+2和子流2L*J+3由主解碼單元1處理,被表示為水平線上的塊。子流2L*J+4和子流2L*J+5由主解碼單元2處理,被表示為斜線上的塊。......子流2L*J+2L-2和子流2L*J+2L-1由主解碼單元L-1處理,被表示為交叉線上的塊。
在圖4的下部,每一塊代表編碼樹單元(CTU)。在子塊中的數(shù)字表示每個解碼單元的CTU的處理順序。圖4給出了M×N的CTU圖像解碼的示例。每個主解碼單元每個命令處理兩個子流,以及以對角線順序解碼兩個CTU-行。例如,主解碼單元0處理子流0和1,并對CTU-行0和1解碼(CTU-行0和1被標記為垂直線,這意味著它們由主解碼單元0解碼);主解碼單元1處理子流2和3,并且解碼CTU-行2和3(CTU-行2和3被標記為水平線,這意味著它們由主解碼單元1解碼);主解碼單元2處理子流4和5,并解碼CTU-行4和5(CTU-行4和5被標記為斜線,這意味著它們由主解碼單元2解碼)等??瞻鬃訅K,即,不具有數(shù)字的子塊表示尚未被解碼的子塊。
每個主解碼單元(0,1,...L-1)將從DDR讀取轉(zhuǎn)碼子流,并且并行處理相同幀的不同子流。每個主解碼單元(0,1,...L-1)能夠同時處理多個子流,并如圖5中所示以對角線順序處理多個CTU-行,以使相鄰CTU的參考像素可能被重新使用,并且運動補償本地緩存的命中率能夠得到提高。
注意以上實施例中,CTU被用于作為示出基本處理單元的示例。然而,本發(fā)明的實施例并不限于CTU。本發(fā)明的實施例也適用于其它基本處理單元,如Google VP9的超級塊,或宏塊單位等。另外,雖然圖4示出了每一個主解 碼單元同時處理兩個CTU-行,主解碼單元可以同時處理多于兩個CTU-行。
圖5是示出當(dāng)根據(jù)本發(fā)明的實施例以對角線順序處理CTU時,參考數(shù)據(jù)是如何被跨多個CTU共享的圖。圖5中的對角線順序能夠以水平和垂直方向重用幀間(inter)參考數(shù)據(jù)。例如,當(dāng)主解碼單元0根據(jù)本發(fā)明的實施例解碼CTU 2時,主解碼單元0可以參考幀間參考數(shù)據(jù)2(參考2)。主解碼單元0可以參考幀間參考數(shù)據(jù)0(參考0)用于解碼CTU 0。主解碼單元0可以參考幀間參考數(shù)據(jù)1(參考1)用于解碼CTU 1。注意CTU 0、CTU 1和CTU 2分別以虛線塊的形式被顯示,同時參考0、參考1和參考2分別以實線塊的形式被分別顯示。注意參考的參考0是來自與當(dāng)前解碼的CTU 0的幀不同的幀,相同的規(guī)則適用于參考1和參考2。參考2與相鄰CTU(CTU 0)的參考0的重疊是在當(dāng)前解碼的CTU(CTU 2)的垂直方向上的,而參考1與相鄰CTU(CTU 0)的參考0的重疊是在當(dāng)前解碼的CTU(CTU 1)的水平方向上。因此,當(dāng)CTU被處理時,水平和垂直的相鄰CTU的幀間參考數(shù)據(jù)可以被共享和重用。
結(jié)合圖5并參照圖4,在本發(fā)明的實施例中,當(dāng)主解碼單元0解碼較低的行(例如,CTU-1行)中的CTU(CTU 2),它會參考在CTU 2的上方行中的CTU 2的右上方的CTU(CTU 0和CTU 1)的信息。因此,下方行的解碼進度比上方行慢。當(dāng)CTU 2被以幀內(nèi)預(yù)測模式編碼時,右上方CTU的像素也將被參考。以及當(dāng)CTU被以幀間預(yù)測模式編碼時,右上方CTU的參考數(shù)據(jù)由于它們的空間相關(guān)性可能被部分地重復(fù)使用。換言之,圖4中所解碼的CTU圖案逐行縮進。而且,當(dāng)解碼CTU 1時,當(dāng)CTU 1被以幀間預(yù)測模式編碼時,主解碼單元0參考CTU 0,并且重用CTU 0的幀間參考數(shù)據(jù)。本實施例以這種方式重用在垂直和水平方向上的幀間參考數(shù)據(jù),從而改善數(shù)據(jù)的相關(guān)性,并節(jié)省帶寬。
此外,多層的波前包括波前的第一層和波前的第二層。波前的第一層指主解碼單元用于同時解碼多個子流。按照對角線順序的多個CTU行由主解碼單元處理,使得運動補償本地緩存的命中率可以得到提高。波前的第二層指將多個主解碼單元能夠同時工作,并且多個主解碼單元以波前形式并行工作。例如,每一個主解碼單元能夠同時解碼2個子流,而三個主解碼單元能夠并行工作。因此,總共有6子流能夠被并行解碼。
圖6A是示出運動補償L2緩存和行緩沖被跨多個主解碼單元共享的圖。
如圖6A所示,多個主解碼單元0,1,......L-1共享同一個運動補償共享L2(2級)緩存,以及一個共享行緩沖。通過將不同主解碼單元保持在適當(dāng)?shù)乃俣龋蚕鞮2緩存的命中率能夠被改善以節(jié)省帶寬。共享L2緩存可以存儲與幀間參考數(shù)據(jù)有關(guān)的信息。在統(tǒng)計上,不同主解碼單元的幀間參考數(shù)據(jù)可以重疊。通過將幀間參考數(shù)據(jù)存儲在L2緩存中,用于存取來自DDR的幀間參考數(shù)據(jù)的次數(shù)被降低,因此改善了電路的效率。
多級緩存被部署以進一步減少帶寬需求。在一個實施例中,每一個主解碼單元有它自己的本地緩存,這是1級緩存,而所有主解碼單元將共用共享L2緩存。
行緩沖能夠跨多個具有波前架構(gòu)的主解碼單元被共享,如幀內(nèi)預(yù)測行緩沖、去塊濾波器行緩沖、自適應(yīng)樣點補償濾波行緩沖等。不管有多少主解碼單元將被實例化,所需要的行緩沖的大小與一個主解碼單元所需的行緩沖大小相同。這是因為,在同一時間,不同主解碼單元將處理不同列的CTU,因此行緩沖的大小僅取決于圖像寬度。相比其它幀級并行化的方法,在本發(fā)明的實施例中,行緩沖存儲器的大小能夠大大減少,使得硬件實現(xiàn)成本能夠被節(jié)省。
多級運動補償緩存,以及波前架構(gòu)使參考像素能夠跨多個主解碼單元 中被重復(fù)使用。因為本發(fā)明的實施例的并行化處理同一幀中的相鄰CTU,本發(fā)明的實施例具有更好的相關(guān)性和空間局部性,相比通過現(xiàn)有技術(shù)的常規(guī)緩存,如像素解碼幀級并行,本發(fā)明的實施例能夠節(jié)省更多帶寬。另外,多級運動補償緩存包括主解碼單元的本地(L1)的運動補償緩存和由多個主解碼單元共享的2級緩存。
相比于常規(guī)HEVC標準中的分層波前,根據(jù)本發(fā)明的實施例的多層波前和多級緩存被用于最小化對4K/8K視頻系統(tǒng)重要的帶寬要求。波前的第一層被用于通過主解碼單元以對角線順序解碼多個CTU行(CTU是編碼樹單元的縮寫,也例如,Google VP9的超級塊),以使運動補償本地緩存的命中率能夠改善;而波前的第二層被用于使主解碼單元以波前形式并行工作,并且二級緩存的命中率也能夠得到改善。
圖6B是示出單個主解碼單元的結(jié)構(gòu)的圖。單個主解碼單元600包括:轉(zhuǎn)碼流解壓縮器610、像素解碼器620、運動補償緩存650、幀緩沖壓縮器630和幀緩沖解壓縮器640。
轉(zhuǎn)碼流解壓縮器610解壓縮轉(zhuǎn)碼流,從而生成解壓縮流。注意轉(zhuǎn)碼流來自DDR。像素解碼器620對解壓縮流執(zhí)行反量化、反變換、幀內(nèi)預(yù)測、運動補償和環(huán)路濾波器功能。像素解碼器620與轉(zhuǎn)碼流解壓縮器610、行緩沖、幀緩沖解壓縮器640和幀緩沖壓縮器630進行交互。
幀緩沖壓縮器630壓縮重建解壓縮流的YUV數(shù)據(jù)。由幀緩沖壓縮器630生成的壓縮重建的YUV數(shù)據(jù)被提供給到DDR。
運動補償緩存650緩存解壓縮流的運動補償參考數(shù)據(jù),該運動補償參考數(shù)據(jù)為壓縮的YUV格式的數(shù)據(jù),其由幀緩沖壓縮器630生成并在DDR中緩沖。由于運動補償緩存650可以使用多個幀間參考數(shù)據(jù),所以運動補償緩存650可以讀取多個先前由幀緩沖壓縮器630生成并在DDR中緩沖的運動 補償參考數(shù)據(jù)。存儲在運動補償緩存650中的運動補償參考數(shù)據(jù)被壓縮,而且是來自于圖6A中所示的運動補償共享L2緩存。YUV模型以一個亮度(Y)和兩個色度(UV)的分量定義了一個顏色空間。
由于與未壓縮的數(shù)據(jù)相比,壓縮的數(shù)據(jù)的大小被減少,所以幀緩沖壓縮器630和幀緩沖解壓縮器640可以減輕與DDR的通信總線的通信壓力,從而消耗更少的通信總線資源并節(jié)省功耗。注意幀緩沖壓縮器630和幀緩沖解壓縮器640可以在一個實施例中被省略。
幀緩沖解壓縮器640解壓縮從運動補償緩存650獲得的壓縮的YUV格式的數(shù)據(jù)。注意當(dāng)主解碼單元600的運動補償緩存650讀取由幀緩沖壓縮器630生成的壓縮的參考幀時,幀緩沖解壓縮器640被需要。由于根據(jù)實施例,壓縮的數(shù)據(jù)比解壓縮的數(shù)據(jù)小得多,并且在可能是靜態(tài)隨機存取存儲器(SRAM)、嵌入式同步動態(tài)隨機存取存儲器(eSDRAM)等的片上存儲器上需要更少空間,或在同一個片上空間可以存儲更多的信息,所以通過將幀緩沖解壓縮器640定位在運動補償緩存650之后,相對于將幀緩沖解壓縮器定位在緩存前的其它常規(guī)方案,運動補償緩存650的利用率能夠得到改善或更小的運動補償緩存650能夠被使用。
通過將不同主解碼單元保持在適當(dāng)?shù)乃俣龋蚕鞮2緩存的命中率能夠被改善以節(jié)省帶寬。
以上討論的電路可以在任意產(chǎn)品中使用,包括視頻解碼器,如機頂盒(STB)、數(shù)字電視(DTV)、平板電腦、智能手機、筆記本電腦和個人計算機,個人數(shù)字助理(PDA)等。
圖7是示出視頻解碼器的結(jié)構(gòu)的圖。視頻解碼器700包括可編程控制器710、多個幀級熵轉(zhuǎn)碼器0,1,P-1、DDR數(shù)據(jù)總線、多個主解碼單元0,1,L-1和運動補償共享L2緩存。幀級熵轉(zhuǎn)碼器0,1,...P-1類似于圖1中 的熵轉(zhuǎn)碼器0,1,...P-1。主解碼單元0,1,...L-1類似于圖1或圖6A和圖6B中所示的主解碼單元0,1,...L-1。
如圖7所示,可編程控制器(它可以是CPU、DSP、MCU等)發(fā)送指令到多個熵轉(zhuǎn)碼器器0,1,...P-1。多個熵轉(zhuǎn)碼器的每一個生成壓縮子流,并經(jīng)由DDR數(shù)據(jù)總線將它們相應(yīng)的壓縮子流存儲在DDR存儲器中。基于由可編程控制器輸出的子流解碼的命令隊列,轉(zhuǎn)碼流將被打包成統(tǒng)一格式的波前子流,并連同子流的入口點被存儲在DDR中。在一個實施例中,一幀的子流和同一幀的入口點被一起存儲。可替換地,一幀的子流和同一幀的入口點可以被分別存儲,即,在不同片外或片上存儲器中。
主解碼單元0,1,L-1的每一個經(jīng)由DDR數(shù)據(jù)總線從DDR存儲器讀取壓縮的子流,并將解碼數(shù)據(jù)輸出到DDR,根據(jù)與命令調(diào)度器、同步控制、共享行緩沖和運動補償?shù)墓蚕鞮2緩存的交互。注意由于與主解碼單元有關(guān)的部分類似于關(guān)于圖6A和6B討論的主解碼單元0......L-1,它們的描述在一個實施例中被省去。
圖8是示出本發(fā)明的實施例的方法的流程圖。解碼視頻的方法800包括在框810中,幀級并行化地對所接收的比特流執(zhí)行多個熵轉(zhuǎn)碼,以生成轉(zhuǎn)碼流,其中多個熵轉(zhuǎn)碼的每一個包括對比特流的語法轉(zhuǎn)碼;在框820中,以多層的波前級并行化地對轉(zhuǎn)碼流的一幀執(zhí)行多個轉(zhuǎn)碼流解壓縮和像素解碼。
可替代地,所接收的比特流以不同的格式被編碼,其中執(zhí)行多個熵轉(zhuǎn)碼的每一個還包括:將所接收的以不同格式被編碼的比特流轉(zhuǎn)換為統(tǒng)一的波前子流格式的轉(zhuǎn)碼流。
可替代地,不同格式包括分片(tile)并行化、波前(wavefront)并行化、條帶(slice)并行化或無并行化的條帶(slice)。
圖9是示出圖8中的框810中的熵轉(zhuǎn)碼的詳細運行的流程圖??商娲?, 所接收的比特流以不同的格式被編碼。在框810中,執(zhí)行多個熵轉(zhuǎn)碼的每一個還包括在框812中,對所接收的以不同格式被編碼的比特流進行熵解碼;在框814中,對解碼的比特流熵編碼;以及在框816中,將編碼的比特流打包為統(tǒng)一格式的波前子流。
圖10是示出根據(jù)本發(fā)明的實施例的視頻解碼器的工作流程的流程圖。可替代地,在框1000中,多個熵轉(zhuǎn)碼的每一個還包括在框1010中,獲得比特流的可用的幀;在框1020中,獲得用于轉(zhuǎn)碼流的存儲緩沖;在框1030中,確定用于轉(zhuǎn)碼流的存儲緩沖是否可用。如果用于轉(zhuǎn)碼流的存儲器緩沖可用,則方法1000前進到框1040,確定熵轉(zhuǎn)碼器是否可用,如果熵碼器可用,則在框1050中,該方法執(zhí)行熵轉(zhuǎn)碼。如果熵碼器可用,該方法同時獲得比特流的下一個可用幀。用于熵轉(zhuǎn)碼的詳細操作已相對于圖9討論,因此,其詳細情況在實施例中被省去。
可替代地,多個像素解碼的每一個還包括解壓縮轉(zhuǎn)碼流,從而生成解壓縮流;對解壓縮的流執(zhí)行反量化、反變換、幀內(nèi)預(yù)測、運動補償和環(huán)路濾波;壓縮解壓縮的流的重建YUV數(shù)據(jù);緩存解壓縮的流的運動補償?shù)膮⒖紨?shù)據(jù),該運動補償?shù)膮⒖紨?shù)據(jù)為壓縮的YUV格式的數(shù)據(jù);以及解壓縮壓縮的YUV格式的數(shù)據(jù)。
可替代地,執(zhí)行多個像素解碼的一個還包括通過多個主解碼單元的一個,并行處理一幀的不同子流,以生成多個基本處理單元行;并且以對角線順序解碼多個處理單元行以便重用在水平和垂直方向的幀間參考數(shù)據(jù),可以參考圖5。
可替代地,參照圖10的右側(cè)部分,在并行處理幀的不同子流之前,在框1100中執(zhí)行多個像素解碼還包括在框1110中,檢查轉(zhuǎn)碼流的一幀是否可用;在框1120中,如果轉(zhuǎn)碼流的幀可用,則通過命令調(diào)度器,根據(jù)存儲在 命令隊列中的命令,調(diào)度多個候選主解碼單元。在一個實施例中,命令調(diào)度器可以調(diào)用來自命令隊列的指令,從而調(diào)度至少一個相應(yīng)的主解碼單元進行操作。
執(zhí)行像素解碼的方法還包括,在框1130中獲取主解碼單元,在框1140中確定主解碼單元是否可用,如果主解碼單元可用,則在框1150中,該方法根據(jù)命令解壓縮多個子流,并且在框1160中,按照CTU以對角線順序處理并輸出多個CTU行。注意如果框1140的結(jié)果可用,該方法同時獲得該幀的下一個命令,從而確保多個主解碼單元可以并行工作。還應(yīng)注意的多個主解碼單元可以同時地并行操作框1150和1160。該方法前進到框1170,確定該幀的結(jié)束是否被檢測到。如果該幀的結(jié)束被檢測到,則該方法返回到框1110。如果該幀的結(jié)束未被檢測到,則該方法返回到框1120。
兩個階段,熵轉(zhuǎn)碼(S1或1000)和主解碼(S2或1100),概括出整體的解碼流程。該工作流程具有多個熵轉(zhuǎn)碼器以幀并行化地運行,并且多個主解碼單元以波前并行運行。
如圖10所示,通過如圖10所示的引入命令隊列和命令調(diào)度器,主解碼單元和可編程控制器(例如,CPU)之間的通信可被最小化,從而確保主解碼單元以盡可能流暢的方式運行。
可替代地,多個熵轉(zhuǎn)碼并行進行;或者多個像素解碼并行執(zhí)行。
可替代地,執(zhí)行多個熵轉(zhuǎn)碼與執(zhí)行多個像素解碼并行。
可替代地,基本處理單元包括編碼樹單元、超級塊,或宏塊單元。
本發(fā)明的實施例為熵轉(zhuǎn)碼部分使用幀級并行化,以及為同一幀內(nèi)的轉(zhuǎn)碼的子流解碼和像素解碼使用多層的波前并行化。
熵轉(zhuǎn)碼器將各種圖像結(jié)構(gòu),如分片、條帶、波前轉(zhuǎn)換為統(tǒng)一格式的波前子流,從而后期可以適當(dāng)?shù)睾透咝У靥幚硭鼈儭?/p>
本發(fā)明的實施例可以去除幀級并行地執(zhí)行像素解碼部分的現(xiàn)有技術(shù)需要的幀間解碼的依賴性,因為現(xiàn)有技術(shù)的像素解碼可能并行地處理來自不同幀的CTU,而在本本發(fā)明的實施例中,所有被并行處理的CTU是來自于同一幀中,以使解碼器性能可以不受圖像結(jié)構(gòu)以及不同幀解碼之間的依賴性的影響,而在其他情形下(例如現(xiàn)有技術(shù)中),圖像結(jié)構(gòu)以及不同幀解碼之間的依賴性將會導(dǎo)致一些性能損失。熵轉(zhuǎn)碼器經(jīng)由硬件加速器與主解碼部并行執(zhí)行,以實現(xiàn)較高的性能。
相比于幀級并行化,在本發(fā)明的實施例中,該波前并行化的可擴展性可以得到改善,并且本發(fā)明的實施例的每個主解碼單元解碼也可以具有更好的解碼均衡性。
相比傳統(tǒng)HEVC標準中的單層波前,多層波前和多級緩存可以被用于最小化帶寬要求,這對4K/8K視頻系統(tǒng)非常關(guān)鍵。波前的第一層被用于通過像素解碼單元以對角線順序解碼多個CTU行,使得運動補償本地緩存的命中率可以得到改善;而波前的第二層被用于使像素解碼單元以波前形式并行工作,并且第二級緩存的命中率也可以得到改進。
本發(fā)明的實施例可以以具有非常好的可擴展性和解碼負載均衡性的混合并行化為特征,更具體的,熵轉(zhuǎn)碼具有幀級并行化;轉(zhuǎn)碼子流的解碼和像素解碼具有多層波前并行化。
本發(fā)明的實施例可以通過對可以由分片、波前或無任何并行化工具僅條帶編碼的原始流進行轉(zhuǎn)碼,以得到統(tǒng)一的波前子流為特征。
與HEVC標準中的單層波前相對,本發(fā)明的實施例可以進一步以多層波前相比為特征,使得運動補償本地緩存的命中率能夠被改善,而DDR帶寬能夠被減小。
本發(fā)明的實施例可以進一步以具有波前的架構(gòu)的多級運動補償緩存為 特征,使得幀間參考像素能夠跨多個主解碼單元被重復(fù)使用。相比通過現(xiàn)有技術(shù),如像素解碼幀級并行性的常規(guī)緩存,本發(fā)明的實施例因為較好的相關(guān)性和空間局部性能夠節(jié)省更多的帶寬。
本發(fā)明的實施例可以適用于多標準架構(gòu),HEVC/H.265,Google VP9,中國AVS2等。
本發(fā)明的實施例可以進一步以跨具有波前架構(gòu)的多個主解碼單元的共享行緩沖為特征,以減少硬件實現(xiàn)的成本。
盡管本發(fā)明已經(jīng)參照具體的示例性實施例被描述,但本發(fā)明并不限于本文描述的實施例,它能夠在不脫離所附權(quán)利要求書的精神和范圍的情況下,以修改或替換的形式來實現(xiàn)。相應(yīng)地,說明書和附圖應(yīng)被視為說明性的而非限制性的。
從前述內(nèi)容,將要理解的是技術(shù)具體實施例出于說明的目的已在本文被描述,然而各種修改在不脫離本發(fā)明的精神和范圍的情況下能夠被做出。因此,本發(fā)明除了所附權(quán)利要求書的精神,并不被限制。
對所公開的實施例的其它變型能夠被本領(lǐng)域技術(shù)人員在實踐所要求保護的發(fā)明時通過對附圖、公開內(nèi)容和所附權(quán)利要求書的研究來理解和實現(xiàn)。權(quán)利要求書中的詞語“包括”并不排除其它元件或步驟,而不定冠詞“一”或“一個”不排除多個。即使在不同的從屬權(quán)利要求中記載了特定的特征,但本發(fā)明還涉及包括所有這些特征的實施例。權(quán)利要求中的任何附圖標記不應(yīng)當(dāng)被解釋為限制保護范圍。
各種實施例的各特征和各方面可以被集成到其它實施例中,并且本文件中示出的實施例可以在未全部包含所有這些被示出或描述的特征或方面被實現(xiàn)。本領(lǐng)域技術(shù)人員將理解的是盡管出于說明的目的,系統(tǒng)和方法的具體示例和實施例已經(jīng)被描述,但在不脫離本發(fā)明的精神和范圍的情況下,各種 修改能夠被做出。此外,一個實施例的特征可以被并入其它實施例中,即使那些特征未在本文件內(nèi)的單個實施例中被一起描述。因此,本發(fā)明由所附權(quán)利要求書描述。