本公開涉及互聯(lián)網(wǎng)領域,特別涉及一種高效視頻編碼方法及裝置。
背景技術:
高效視頻編碼(HEVC)是一種壓縮效率比目前最流行的H.264/AVC高一倍的編碼方式,比較適合直播流的快速編碼、轉碼。HEVC包括預測編碼和熵編碼。雖然HEVC屬于基于塊的混合編碼框架,在各個編碼階段都有了增強和改進。但是由于這些改進導致HEVC的編碼模式搜索空間非常大,為了保證編碼質量,編碼器都要進行大量的計算來尋找率失真代價較小的編碼模式,即模式選擇(mode decision,MD)。
近年來,基于CPU/GPU的混合異構計算系統(tǒng)逐漸成為高性能計算領域的研究熱點。在基于CPU/GPU的混合異構計算系統(tǒng)上利用CPU/GPU協(xié)同計算來并行HEVC編碼成為直播視頻流實時編碼的有效手段。
目前對HEVC并行相關的研究工作主要集中在幀間模式選擇尤其是運動估量模塊,對幀內(nèi)MD并行的研究較少。隨著幀間MD的并行化,幀內(nèi)MD逐漸成為了速度瓶頸。HEVC標準支持的Tiles和WPP(wavefront parallel processing)算法在并行度和編碼質量沒有達到比較理想的平衡。
在HEVC編碼標準中,一幀視頻圖像是被均勻的劃分成很多個編碼樹單元(Coding Tree Unit,CTU),CTU塊的大小可以為64×64、32×32或16×16,典型且不失一般性。
每一個CTU四叉樹遞歸地劃分為4個相同大小的子單元,該四叉樹的每一個葉子節(jié)點叫作一個編碼單元(coding nuit,CU);編碼單元(CU)編碼單元是一個正方形區(qū)域,代表著一個編碼樹單元四叉樹劃分的葉節(jié)點,是進行幀內(nèi)或幀間編碼的基本單元塊。預測單元(PU)是在編碼單元(CU)的基礎上進行劃分的,用來傳輸與預測過程相關信息的基本單元。一般來說,每一個CU可以包含一個或多個PU。變換單元(TU)也是在CU基礎上進行劃分的,用于變換和量化過程的基本單元。一般來說,每一個CU可以包含一個或多個TU。
通過分析HEVC編碼標準,可以知道幀內(nèi)MD存在多種數(shù)據(jù)依賴。
1)幀內(nèi)預測時重構像素依賴
如圖1所示,此依賴關系出現(xiàn)在幀內(nèi)預測時,在一個預測塊(PB)或變換塊(TB)計算時,需要進行幀內(nèi)預測,即需要參考相鄰塊已經(jīng)重構出來的像素(已重構像素)對自身進行預測。對于一個M×M的TB來說,需要參考周圍的4M+1個重構像素,分別來自于其左、上、左下、右上和左上方向已經(jīng)編碼重構完成的相鄰圖像區(qū)域。如果一個PB或TB要參考的重構像素跟它位于同一個CTU,那么重構像素是不可用的,因為相鄰塊也同時在進行模式選擇,并未重構完成.如圖1所示,blockL,blockA和當前塊位于同一個CTU進行并行處理,那么當前TB(Current TB)所依賴的blockL和blockA的重構像素(如圖1中灰色部分的像素)不可用。
2)編碼預測模式時可能預測模式(MPM)計算依賴
為了提高編碼壓縮效率,在對當前PB(Current PB)進行幀內(nèi)預測模式時需要參考相鄰的左邊PB(Left PB,LPB)和上邊PB(Above PB,APB)的預測模式,構造一個長度固定為3的MPM列表,如圖2所示,如果當前PB與參考的LPB或APB位于同一個CTU里面,那么LPB和APB的預測模式是不可用的,因為它們也同時在進行模式選擇,預測模式還未得到。
3)概率模型(CM)繼承依賴
HEVC中使用上下文自適應的二進制算術編碼(context adaptive binary arithmetic coding,CABAC)進行語法元素的熵編碼。CABAC的主要過程包括語法元素的二進制化、概率建模、算術編碼和CM更新。為了提高編碼效率,在編碼的過程中CM會自適應動態(tài)更新,以更好地反映圖像的局部區(qū)域特性,獲得更高的壓縮比。在HM模式選擇過程中,熵編碼器會使用CM去估計編碼產(chǎn)生的位數(shù)以計算編碼代價,CM是模擬實際編碼過程動態(tài)更新的熵編碼器會使用CM去估計編碼產(chǎn)生的位數(shù)以計算編碼代價。而Z掃描順序小的塊的MD完成之后會將CM傳遞給Z掃描大的塊使用。如圖3中所示,TU0使用的是上一個CTU計算之后的結果,TU1使用的CM是TU0計算之后的結果,以此類推,TU3使用的CM是TU2計算之后的結果。這樣就形成了相鄰塊之間的CM繼承依賴。
上述依賴均屬于HEVC編碼過程中的。由于存在這些依賴,在一個CTU中無法并行地對CU進行編碼。
技術實現(xiàn)要素:
為了解決相關技術中存在的無法并行地對CU進行編碼的技術問題,本公開提供了一種高效視頻編碼方法及裝置。
一種高效視頻編碼方法,包括如下步驟:
將視頻圖像劃分成多個相同大小的像素塊;
對像素塊對角直線上的每個像素塊進行如下并行編碼:參考相鄰像素塊對角直線上的已編碼像素塊對每個像素塊進行并行編碼;
沿著與所述像素塊對角直線相交的視頻圖像對角線,依次對所述像素塊對角直線以外的多條像素塊對角直線上的像素塊進行所述并行編碼。
在一個實施例中,
所述視頻圖像至少包括第一視頻圖像以及第二視頻圖像;
在對第一視頻圖像中的像素塊進行并行編碼時,同時對第二視頻圖像中的像素塊進行并行編碼,且第二視頻圖像中并行編碼的像素塊數(shù)量與第一視頻圖像中并行編碼的像素塊數(shù)量之和等于常量。
在一個實施例中,
所述對像素塊對角直線上的每個像素塊進行如下并行編碼:參考相鄰像素塊對角直線上的已編碼像素塊對每個像素塊進行編碼的步驟是:
對像素塊對角直線上的每個像素塊進行如下并行編碼:參考相鄰像素塊對角直線上與所述像素塊相鄰的已編碼像素塊內(nèi)設定像素,對每個像素塊進行編碼。
在一個實施例中,
所述對像素塊對角直線上的每個像素塊進行如下并行編碼:參考相鄰像素塊對角直線上的已編碼像素塊對每個像素塊進行編碼的步驟是:
對像素塊對角直線上的每個像素塊進行如下并行編碼:參考相鄰像素塊對角直線上已編碼像素塊內(nèi)與所述像素塊相鄰的像素,對每個像素塊進行編碼。
在一個實施例中,
第二視頻圖像中并行編碼的像素塊數(shù)量與第一視頻圖像中并行編碼的像素塊數(shù)量之和等于視頻圖像對角線上的像素塊數(shù)量。
本發(fā)明還提供了一種高效視頻編碼裝置,包括:
劃分單元,被配置為執(zhí)行:將視頻圖像劃分成多個相同大小的像素塊;
第一編碼單元,被配置為執(zhí)行:對像素塊對角直線上的每個像素塊進行如下并行編碼:參考相鄰像素塊對角直線上的已編碼像素塊對每個像素塊進行并行編碼;
第二編碼單元,被配置為執(zhí)行:沿著與所述像素塊對角直線相交的視頻圖像對角線,依次對所述像素塊對角直線以外的多條像素塊對角直線上的像素塊進行所述并行編碼。
在一個實施例中,
所述視頻圖像至少包括第一視頻圖像以及第二視頻圖像;
在對第一視頻圖像中的像素塊進行并行編碼時,同時對第二視頻圖像中的像素塊進行并行編碼,且第二視頻圖像中并行編碼的像素塊數(shù)量與第一視頻圖像中并行編碼的像素塊數(shù)量之和等于常量。
在一個實施例中,
所述第一編碼單元,被配置為執(zhí)行:對像素塊對角直線上的每個像素塊進行如下并行編碼:參考相鄰像素塊對角直線上與所述像素塊相鄰的已編碼像素塊內(nèi)設定像素,對每個像素塊進行編碼。
在一個實施例中,
所述第一編碼單元,被配置為執(zhí)行:對像素塊對角直線上的每個像素塊進行如下并行編碼:參考相鄰像素塊對角直線上已編碼像素塊內(nèi)與所述像素塊相鄰的像素,對每個像素塊進行編碼。
在一個實施例中,
第二視頻圖像中并行編碼的像素塊數(shù)量與第一視頻圖像中并行編碼的像素塊數(shù)量之和等于視頻圖像對角線上的像素塊數(shù)量。
本公開的實施例提供的技術方案可以包括以下有益效果:
沿著與像素塊對角直線相交的視頻圖像對角線,依次對多條像素塊對角直線上的像素塊進行并行編碼,在對視頻圖像對角線上的像素塊進行并行編碼時,前一條視頻圖像對角線上的像素塊已經(jīng)完成編碼,因此,該視頻圖像對角線上的像素塊可以參考前一條視頻圖像對角線上的已編碼像素塊,因此,在高效視頻編碼方法解除了HEVC編碼過程中的像素塊依賴,可以實現(xiàn)對像素塊進行并行編碼,從而可以提高編碼的速度,并且能夠保證編碼質量。
應當理解的是,以上的一般描述和后文的細節(jié)描述僅是示例性的,并不能限制本公開。
附圖說明
此處的附圖被并入說明書中并構成本說明書的一部分,示出了符合本發(fā)明的實施例,并于說明書一起用于解釋本發(fā)明的原理。
圖1是現(xiàn)有技術的HEVC編碼過程中幀內(nèi)預測時重構像素依賴的示意圖;
圖2是現(xiàn)有技術的HEVC編碼過程中編碼預測模式時可能預測模式(MPM)計算依賴的示意圖;
圖3是現(xiàn)有技術的HEVC編碼過程中概率模型(CM)繼承依賴示意圖;
圖4是本發(fā)明一種實施例的高效視頻編碼方法流程示意圖;
圖5是本發(fā)明一種實施例的高效視頻編碼方法示意圖;
圖6是本發(fā)明另一種實施例的高效視頻編碼方法示意圖;
圖7是本發(fā)明另一種實施例的高效視頻編碼方法示意圖;
圖8是現(xiàn)有技術一種CPU的架構示意圖;
圖9是現(xiàn)有技術一種CUDA的架構示意圖;
圖10是現(xiàn)有技術一種CUDA并行計算的線程結構;
圖11是本發(fā)明一種實施例的高效視頻編碼方法流程示意圖;
圖12是本發(fā)明一種實施例的高效視頻編碼方法執(zhí)行硬件示意圖;
圖13是本發(fā)明另一種實施例的高效視頻編碼方法執(zhí)行硬件示意圖;
圖14是本發(fā)明一種實施例的高效視頻編碼裝置示意圖。
具體實施方式
這里將詳細地對示例性實施例執(zhí)行說明,其示例表示在附圖中。下面的描述涉及附圖時,除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實施例中所描述的實施方式并不代表與本發(fā)明相一致的所有實施方式。相反,它們僅是與如所附權利要求書中所詳述的、本發(fā)明的一些方面相一致的裝置和方法的例子。
如圖4所示,是本發(fā)明一種實施例的高效視頻編碼方法,包括如下步驟。
S100、將視頻圖像劃分成多個相同的像素塊。
如圖5所示,視頻圖像被劃分出多個像素塊,像素塊可以是編碼單元(CU)、預測單元(PU)或變換單元(TU)。
S110、對像素塊對角直線上的每個像素塊進行如下并行編碼:參考相鄰像素塊對角直線上的已編碼像素塊對每個像素塊進行并行編碼。
像素塊對角直線是指,像素塊對角線所在直線,如圖5所示,在一個視頻圖像中,沿一方向相互平行的多條虛線L1至L7,是像素塊對角直線。又如圖6所示,同樣在改視頻圖像中,沿另一方向相互平行的多條虛線L8和L14,亦是像素塊對角直線。由此可見,在一個視頻圖像中,存在不同方向的兩組像素塊對角直線。
如圖5所示,每條像素塊對角直線上至少有一個像素塊,如像素塊對角直線L1只有一個像素塊11,像素塊對角直線L7上只有一個像素塊71。而像素塊對角直線L2上則有兩個像素塊21和像素塊22。
以對像素塊對角直線L5為例,在對像素塊對角直線L5上的像素塊51至53進行并行編碼的過程中,需要參考相鄰像素塊對角直線L4(即與像素塊對角直線L5相鄰)上的已編碼像素塊41至44。
在一個實施例中,在對像素塊對角直線L3上的像素塊進行編碼的過程中,可以參考與相鄰像素塊對角直線L2上的相鄰已編碼像素塊(與該像素塊相鄰)。
具體而言,以像素塊32為例,在對像素塊32進行編碼時,需要參考已編碼像素塊22和已編碼像素塊21。再以像素塊33為例,在對像素塊33進行編碼時,需要參考已編碼像素塊22。由此可見,相鄰的已編碼像素塊可以是相鄰的一個或兩個已編碼像素塊。通常來說,參考兩個相鄰的已編碼像素塊會得到更好的編碼效果。
S120、沿著與所述像素塊對角直線相交的視頻圖像對角線,依次對多條像素塊對角直線上的像素塊進行所述并行編碼。
如圖5所示,L11是一條視頻圖像對角線(亦是圖6中所示的一條像素塊對角直線),L4是另一條視頻圖像對角線(亦是一條像素塊對角直線)。視頻圖像對角線L11與像素塊對角直線L1至L7分別相交。
圖5中的箭頭方向(即沿著視頻圖像對角線L11)表示對像素塊的編碼順序,即首先對視頻圖像對角線L2上的像素塊進行并行編碼,然后對視頻圖像對角線L3上的像素塊進行并行編碼,直至對視頻圖像對角線L6上的像素塊進行并行編碼。
在對視頻圖像對角線L3上的像素塊進行并行編碼時,視頻圖像對角線L2上的像素塊已經(jīng)完成編碼,因此,視頻圖像對角線L3上的像素塊可以參考視頻圖像對角線L2上的已編碼像素塊;同樣,在對視頻圖像對角線L6上的像素塊進行并行編碼時,視頻圖像對角線L5上的像素塊已經(jīng)完成編碼,因此,視頻圖像對角線L6上的像素塊可以參考視頻圖像對角線L5上的已編碼像素塊。
因此,在本實施例的方法中,解除了HEVC編碼過程中的像素塊依賴,可以實現(xiàn)對像素塊進行并行編碼,從而可以提高編碼的速度。
具體而言,當該像素塊是預測塊或變換塊時,本實施例的方法可以解除幀內(nèi)預測時重構像素依賴,因為當對像素塊對角直線上的編碼單元中的像素進行重構時,相鄰編碼單元中的像素已完成重構,即是已重構像素。
當該像素塊是預測塊時,本實施例的方法可以解除可能預測模式(MPM)計算依賴。在對預測塊進行幀內(nèi)預測模式時,需要參考的相鄰左邊預測塊和上邊預測塊已經(jīng)完成編碼,已經(jīng)得到其預測模式。
當對像素塊進行概率模型計算時,由于像素塊的相鄰已編碼像素塊已經(jīng)完成編碼,已經(jīng)得到其概率模型。
本高效視頻編碼方法可以應用在直播流的實時轉碼。由于直播的觀看端各有不同,分PC端、Web端、手機端,手機端又分高配、中配、低配。觀看端的性能各有不同,而且觀看端的網(wǎng)絡帶寬也有所不同,因此對不同端推送不同分辨率、碼率的視頻很有必要。而直播的特性要求我們推送的不同的流能保持同步性。因此本高效視頻編碼方法很適用于直播流的實時轉碼。
在一個實施例中,如圖5所示,亦可以沿著箭頭相反方向表示對像素塊的編碼順序,即首先對視頻圖像對角線L6上的像素塊進行并行編碼,然后對視頻圖像對角線L5上的像素塊進行并行編碼,直至對視頻圖像對角線L2上的像素塊進行并行編碼。
在本實施例中,在對像素塊對角直線上的像素塊進行并行編碼時,已編碼像素塊位于像素塊的下方和/右方。
在一個實施例中,如圖6所示,對于同樣的視頻圖像,還可以按照圖6的箭頭方向(即沿著視頻圖像對角線L4),對多條像素塊對角直線上的像素塊進行并行編碼。在本實施例中,在對像素塊對角直線上的像素塊進行并行編碼時,已編碼像素塊位于像素塊的下方和/左方。
在上述兩個實施例的方法中,亦可以解除HEVC編碼過程中的像素塊依賴,實現(xiàn)對像素塊進行并行編碼。
在一個實施例中,為了更準確高效地對像素塊對角直線上的像素塊進行并行編碼,需要參考像素塊的相鄰已編碼像素塊中的設定像素,例如與像素塊相鄰的設定像素。
以圖5中的像素塊53為例,在對像素塊53進行編碼時,需要參考相鄰已編碼像素塊43和44中與像素塊53相鄰的像素(圖5中陰影部分)。
需要指出的是,如圖5所示,在一個視頻圖像中,當對像素塊對角直線L1上的像素塊11進行編碼時,由于該像素塊對角直線L1上僅有一個像素塊11,亦可視為對像素塊11進行并行編碼。此時,對于像素塊11的編碼,可以參考前一個視頻圖像(前一幀)相同位置的像素塊。
在每個視頻圖像中對不同的像素塊對角線上的像素塊進行并行編碼時,由于不同的像素塊對角線上的像素塊數(shù)量不同,因此會導致處理的負載不均衡。為了解決負載不均衡的問題,本發(fā)明提供了以下實施例的高效視頻編碼方法。
在一個實施例中,在對第一視頻圖像中的像素塊進行并行編碼時,同時對第二視頻圖像中的像素塊進行并行編碼,且第二視頻圖像中并行編碼的像素塊數(shù)量與第一視頻圖像中并行編碼的像素塊數(shù)量之和等于常量。
如圖7所示,相同標號的像素塊表示在同一次編碼時被并行編碼的像素塊。例如,第一幀視頻圖像上的像素塊對角直線L16上的像素塊2-1與第二視頻幀圖像上的像素塊對角直線L20上的像素塊2-1同時編碼或并行編碼,第一幀視頻圖像上的像素塊對角直線L17上的像素塊2-2與第二視頻幀圖像上的像素塊對角直線L21上的像素塊2-2同時編碼或并行編碼。
在圖7中,可以看出,每次第二視頻圖像中并行編碼的像素塊數(shù)量與第一視頻圖像中并行編碼的像素塊數(shù)量之和等于常量5。例如,像素塊對角直線L16上的像素塊2-1與像素塊對角直線L20上的像素塊2-1的數(shù)量為5。
通過本實施例的技術方案,每次進行并行編碼的像素塊的數(shù)量是相同的,從而能達到每次編碼的負載平衡。
在一個實施例中,第二視頻圖像中并行編碼的像素塊數(shù)量與第一視頻圖像中并行編碼的像素塊數(shù)量之和等于視頻圖像對角線上的像素塊數(shù)量。如圖7所示,像素塊對角直線L16上的像素塊2-1與像素塊對角直線L20上的像素塊2-1的數(shù)量為5,恰好等于視頻圖像對角線上的像素塊數(shù)量5。
在一些實施例中,第二視頻圖像中并行編碼的像素塊數(shù)量與第一視頻圖像中并行編碼的像素塊數(shù)量之和亦可以是視頻圖像對角線上的像素塊數(shù)量以外的其他常數(shù)。
例如,在圖7中,對像素塊對角直線L15上的像素塊1-5和像素塊對角直線L20上的像素塊2-1進行并行編碼,對像素塊對角直線L16上的像素塊2-1和像素塊對角直線L21上的像素塊2-2進行并行編碼,依次類推。在此實施例中,每次第二視頻圖像中并行編碼的像素塊數(shù)量與第一視頻圖像中并行編碼的像素塊數(shù)量之和等于常量6。
通過本實施例的技術方案,每次進行并行編碼的像素塊的數(shù)量是相同的,亦能達到每次編碼的負載平衡。
第二幀視頻圖像中對像素塊的并行編碼順序,可以與第一幀視頻圖像中對像素塊的并行編碼順序不同。
例如,在圖7中,第二幀視頻圖像亦可以按照圖6中的箭頭方向,依次對像素塊對角直線上的像素塊進行并行編碼。
在一些實施例中,需要利用中央處理器(CPU)對視頻圖像的像素塊進行并行編碼,為了充分利用CPU中的緩存,本發(fā)明還提供了以下實施例。
通常來說,CPU內(nèi)部有多級緩存,如圖9所示,以Intel Xeon E3-1230 V3為例,CPU內(nèi)共有三級緩存。
其中第三級緩存容量最大,為8M,可以存儲視頻的多幀圖片,但是速度最慢。
第二級緩存共有四塊,每塊大小為256KB,也可以存儲一幀或半幀數(shù)據(jù)。
第一級緩存包括第一級數(shù)據(jù)緩存和第一級代碼緩存,容量最小,但速度最快。其中,第一級數(shù)據(jù)緩存共有四塊,每塊大小為32KB。
為了充分利用第一級數(shù)據(jù)緩存,在步驟S100中,在對視頻圖像進行劃分時,應保證一塊第一級數(shù)據(jù)緩存可以存儲整數(shù)倍的像素塊編碼時所用到的數(shù)據(jù),防止第一級數(shù)據(jù)緩存存在多余的存儲空間。其中,像素塊編碼時所用到的數(shù)據(jù)包括但不限于像素塊原始像素值、參考的像素塊或者像素的重構像素值、相鄰已編碼像素塊的預測模式、相鄰已編碼像素塊的概率模型等。
可以理解,如果第一級數(shù)據(jù)緩存足夠大,可以容納多幀視頻圖像,則不需要根據(jù)第一級數(shù)據(jù)緩存的大小對視頻圖像進行劃分像素塊。
另外,當利用圖形處理器(GPU)對視頻圖像的像素塊進行并行編碼,亦需要充分利用GPU的緩存,亦需要保證相關緩存可以存儲整數(shù)倍的像素塊編碼時所用到的數(shù)據(jù)。
在一些實施例中,需要利用圖形處理器(GPU)對視頻圖像的像素塊進行并行編碼,為了充分利用GPU中的線程,本發(fā)明還提供了以下實施例。
通常來說,支持統(tǒng)一計算架構(Compute Unified Device Architecture,CUDA)的GPU主要由一個流多處理器(簡稱SM)陣列組成,不同的GPU所包含的SM數(shù)量也不同,每個SM又包含一定數(shù)量的標量流處理器(簡稱SP),且每個SM擁有各自的資源,相互獨立并行執(zhí)行各自的線程,SM中實際執(zhí)行線程的是每個SP。
如圖10所示,在一種計算能力2.0的GPU中,一個SM又包含32個標量流處理器(簡稱SP)、一個指令單元、一個32位的寄存器集合、共享存儲器、常量緩存、紋理緩存等硬件資源。
CUDA并行程序是共有三個層級并行調度:
對每個核心函數(shù)(Kernel)并行調用;例如,對核心函數(shù)Kernel1和Kernel2是并行調用的;
每個核心函數(shù)并行調用多個線程塊(Block);每個核心函數(shù)都對應一個線程網(wǎng)格(Grid)的線程組,而一個Grid由若干個線程塊組成,而每個線程塊則又由若干個線程組成,如圖9所示。
在每個線程塊中的每個線程并行執(zhí)行。
在執(zhí)行CUDA程序的時候,每個SP對應執(zhí)行一個線程,每個SM對應一個Block,但一個SM中同時可以有多個活動線程塊(Active Block),這些活動線程塊會并發(fā)的執(zhí)行。
因此在將視頻圖像劃分為多個像素塊時,保證每次并行編碼的像素塊數(shù)量為SP個數(shù)的整數(shù)倍,這樣才能保證每個SP不空閑。
例如,一個SM中SP的數(shù)量為n,而每次并行編碼的像素塊數(shù)量為4n個,那么,需要4個SM對像素塊進行并行編碼,也即是,在網(wǎng)格中有4個活動Block。
在一個實施例中,為了提高編碼效率,可以利用CPU和GPU共同對視頻圖像的像素塊進行并行編碼。
為CPU分配與CPU計算能力正相關的第一像素塊數(shù)量;為GPU分配與GPU計算能力正相關的第二像素塊數(shù)量;其中,第一像素塊數(shù)量與第二像素塊數(shù)量的總和等于每次對視頻圖像并行編碼的像素塊數(shù)量。
具體而言,可以根據(jù)如下公式為CPU和GPU分配對應的像素塊數(shù)量:
其中,TaskC和TaskG分別為分配給CPU和GPU的像素塊數(shù)量,SC和SG分別為CPU和GPU的計算能力。
如圖11所示,是本發(fā)明另一種實施例中,利用CPU和GPU共同進行高效視頻編碼方法,包括如下步驟。
S200、將視頻圖像劃分成多個相同的像素塊。
在一個實施例中,在對視頻圖像進行劃分時,應保證一塊第一級數(shù)據(jù)緩存可以存儲整數(shù)倍的像素塊編碼時所用到的數(shù)據(jù),防止第一級數(shù)據(jù)緩存存在多余的存儲空間。
具體的執(zhí)行步驟可以參考上述實施例,在此不再贅述。
S210、為CPU分配與GPU計算能力正相關的第一像素塊數(shù)量;為GPU分配與GPU計算能力正相關的第二像素塊數(shù)量;其中,第一像素塊數(shù)量與第二像素塊數(shù)量的總和等于每次對視頻圖像并行編碼的像素塊數(shù)量。
具體的執(zhí)行步驟可以參考上述實施例,在此不再贅述。
S220、在一輪并行編碼中,CPU對第一像素塊數(shù)量的像素塊進行并行計算,同時GPU對第二像素塊數(shù)量的像素塊進行并行計算。
S230、對編碼數(shù)據(jù)進行同步。等該輪并行編碼中,將所有的像素塊編碼完成后,再重新執(zhí)行步驟S220,進行下一輪并行編碼。
具體的執(zhí)行步驟可以參考上述實施例,在此不再贅述。
如圖12所示,本發(fā)明實施例提供的一種計算機的結構,該計算機用于執(zhí)行高效視頻編碼方法。
該計算機10可因配置或性能不同而產(chǎn)生比較大的差異,可以包括一個或一個以上中央處理器(central processing units,CPU)122(例如,一個或一個以上處理器)和存儲器132,一個或一個以上存儲應用程序142或數(shù)據(jù)144的存儲媒體130(例如一個或一個以上海量存儲設備)。其中,存儲器132和存儲媒體130可以是短暫存儲或持久存儲。執(zhí)行高效視頻編碼方法的程序存儲在存儲媒體130。更進一步地,中央處理器122可以設置為與存儲媒體130通信,在計算機10上執(zhí)行存儲媒體130中的程序。計算機10還可以包括一個或一個以上電源126,一個或一個以上有線或無線網(wǎng)絡接口150,一個或一個以上輸入輸出接口158,和/或,一個或一個以上操作系統(tǒng)141,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,F(xiàn)reeBSDTM等等。
更具體的,在步驟S100中,中央處理器122從存儲器132中讀取存儲的視頻圖像,并將該視頻圖像劃分成多個相同的像素塊。
在步驟S110中,中央處理器122對像素塊對角直線上的每個像素塊進行如下并行編碼:參考相鄰像素塊對角直線上的已編碼像素塊對每個像素塊進行編碼。
在步驟S120中,沿著與所述像素塊對角直線相交的視頻圖像對角線,依次對多條像素塊對角直線上的像素塊進行所述并行編碼。
如圖13所示,是另一個實施例中高效視頻編碼方法的硬件執(zhí)行環(huán)境,包括主服務器、集群服務器1至集群服務器n。
主服務器用于根據(jù)每個集群服務器的計算能力,分配相應數(shù)量的視頻圖像給每個集群服務器,計算能力越強的集群服務器分配越多的視頻圖像。
每個集群服務器根據(jù)步驟S100至S120執(zhí)行高效視頻編碼方法。
每個集群服務器執(zhí)行高效視頻編碼方法得到的結果數(shù)據(jù),可以傳送給下一個需要依賴該結果數(shù)據(jù)進行編碼的集群服務器。
如圖14所示,是本發(fā)明一種實施例的高效視頻編碼裝置,包括:
劃分單元100,被配置為執(zhí)行:將視頻圖像劃分成多個相同大小的像素塊;
第一編碼單元110,被配置為執(zhí)行:對像素塊對角直線上的每個像素塊進行如下并行編碼:參考相鄰像素塊對角直線上的已編碼像素塊對每個像素塊進行并行編碼;
第二編碼單元120,被配置為執(zhí)行:沿著與所述像素塊對角直線相交的視頻圖像對角線,依次對所述像素塊對角直線以外的多條像素塊對角直線上的像素塊進行所述并行編碼。
本實施例的高效視頻編碼裝置的實現(xiàn)過程具體詳見上述高效視頻編碼方法中對應步驟的實現(xiàn)過程,在此不再贅述。
該實施例中的裝置的處理器執(zhí)行操作的具體方式已經(jīng)在有關該xx方法的實施例中執(zhí)行了詳細描述,此處將不做詳細闡述說明。
應當理解的是,本發(fā)明并不局限于上面已經(jīng)描述并在附圖中示出的精確結構,并且可以在不脫離其范圍執(zhí)行各種修改和改變。本發(fā)明的范圍僅由所附的權利要求來限制。