一種H.265/HEVC中8x8子宏塊的并行幀內預測方法
【技術領域】
[0001 ] 本發明屬于視頻編碼領域和顯卡通用計算領域,更具體地,涉及一種H.265/HEVC中8x8子宏塊的并行幀內預測方法。
【背景技術】
[0002]H.265/HEVC標準是提出不久的新一代視頻壓縮標準,在許多領域都開始推廣應用。與之前的已經成熟的H.264/AVC標準相似,H.265/HEVC同樣采用是的基于像素域的幀內預測方法,該方法針對可用的預測模式以及各種分塊大小進行遍歷計算,通過率失真公式得到一個在視頻質量和視頻壓縮率兩方面效果都比較好的一種預測模式,這種全模式預測使得整個過程計算復雜度相當高。H.265/HEVC相比于H.264/AVC標準采用更多幀內預測模式,由H.264/AVC標準的9種幀內預測模式增加到35種;同時采用了更多更大的預測塊進行預測,這樣能更好的處理高分辨率的視頻。
[0003]為了降低全模式預測的編碼時間,研究者提出了許多行之有效的解決方案,其中基于GPU硬件加速的方法在減少編碼時間上效果最好。基于GHJ的幀內預測主要采用的是CUDA架構,它是由NVIDIA提出的通用計算平臺,將復雜的GPU指令包裝成淺顯易懂的運行時指令,極大地降低了編寫顯卡設備代碼的難度。CUDA采用的是一種類似于SMD的執行模型,比較適合于易并行計算,對于數據相關性強、邏輯復雜的情況,CUDA并行并不是很好的選擇。
[0004]利用GPU的眾核優勢并行處理多幀圖像,可以極大地提升編碼效率。這一類算法需要修改視頻幀中的像素塊之間的編碼順序來提升并行度,其中一部分算法甚至犧牲視頻質量,主動減少可使用的模式來降低數據依賴,進一步提升并行度。但是現有算法只是停留在粗粒度的并行方法上,對于細粒度的像素級并行仍然沒有涉及,對GHJ的性能還不能充分地利用。現有技術方案總是采用單線程來遍歷計算8x8子宏塊中的35種預測模式或者采用簡單的塊級并行策略,不能采用多線程來并行處理所有像素,這是由于編碼塊中每個像素所參考的重建像素值會隨自己所在位置而變化,進這種情況會導致大量的分支語句,因此不適合采用CUDA來并行處理。
【發明內容】
[0005]針對現有技術的缺陷或改進需求,本發明提供了一種H.265/HEVC中8x8子宏塊的并行幀內預測方法,其目的在于,根據CUDA執行模型以及8x8子宏塊幀內預測中的特性,建立統一參考數組、系數表和參考位置表,消除了執行過程中的大量分支語句,從而實現了像素級的并行,使之可以更有效地利用GHJ的眾核優勢。
[0006]為實現上述目的,本發明提出了一種H.265/HEVC中8X8子宏塊的并行幀內預測方法,其特征在于,所述方法包括以下步驟:
[0007]⑴從已編碼的視頻幀中獲取^個參考像素義上其中!^、!^、!^、!^、!^、!^、R7, O和R8, O為從左到右排列的上方參考像素,R9,Q、RlQ,()、Rll,()、Rl2,()、Rl3,()、Rl4,()、Rl5,(^PRl6,(^從左到右排列的右上方參考像素,辦,1、辦,2、1?(),3、1?(),4、1?(),5、1?(),6、1?(),7和1?(),8為從上到下排列的左側參考像素,1?0,9、1?(),1()、1?(),11、1?(),12、1?(),13、1?(),14、1?(),15和1?(),16為從上到下排列的左下方參考像素,Rm為左上方參考像素;其中待預測8 X 8子宏塊中的像素為Pi, j,i e [ I,8],j e [ I,8],所有待預測像素Pu構成8 X 8子宏塊,所述待預測像素在對應的子宏塊內的坐標位置表示為(x,y);
[0008](2)根據獲取的參考像素生成一個長度為36的空的參考值數組Ref,該參考值數組用于存儲的像素、兩個隨機生成的保留值和一個根據H.265/HEVC標準對17個參考像素進行計算生成的預測值DC;
[0009](3)根據H.265/HEVC中針對8 X 8子宏塊的幀內預測計算公式和參考值數組Ref構造系數表!^和參考位置表T2;
[0010](4)根據步驟(3)構造的系數表T1和參考位置表X 8子宏塊執行基于CUDA的并行幀內預測,其共有2240個線程用于并行處理所有35種預測模式。
[0011]作為進一步優選的,步驟(3)包括以下子步驟:
[0012](3.1)將H.265/HEVC中針對8X8子宏塊的幀內預測計算公式歸納成如下:
[0013]針對預測模式18-34,幀內預測公式如下:
[0014]pred(x,y,m) = ((32-wy).Ri,o+wy.Ri+i,o+16)?5 (I)
[0015]Cy= (y.d)?5 (2)
[0016]Wy= (y.d)&31 (3)
[0017]i = x+cy (4)
[0018]其中Ri,o和Ri+1,o是8 X 8子宏塊中的上方、右上方以及左上方參考像素,wy為權重因子,d為預測模式18-34中任一種預測模式相對于預測模式26的偏移量,X和y為待預測像素在對應的子宏塊內的坐標位置,cy為與待預測像素縱坐標y有關的中間值,pred(X,y,m)是指坐標為(x,y)且預測模式為m的待預測像素的預測值,m表示8X8子宏塊中幀內預測的18-34預測模式,(x,y,m)表示待預測像素對應的線程序號;
[0019]針對預測模式2-18,幀內預測公式如下:
[0020]pred(x,y,m) = ((32-wx).Ro,j+wx.Roj+i+16)?5 (5)
[0021]Cx= (x.d)>>5 (6)
[0022]Wx= (x.d)&31 (7)
[0023]j =y+cx (8)
[0024]其中Ro,j和辦,」+1是8\8子宏塊中的左側、左下方以及左上方參考像素,wy為權重因子,d為預測模式2-18中任一種預測模式相對于預測模式10的偏移量,X和y為待預測像素在對應的子宏塊內的坐標位置,Cx為與待預測像素橫坐標X有關的中間值,pred(X,y,m)是指坐標為(x,y)且預測模式為m的像素的預測值,m表示8X8子宏塊中幀內預測的2-18預測模式,(x,y,m)表示待預測像素對應的線程序號;
[0025]針對預測模式0,Plannar預測模式,幀內預測公式如下:
[0026]predv(x,y,0) = (8-y).Rx,o+y.Ro,9 (9)
[0027]predH(x,y,0) = (8-x).Ro,y+y.R9,o (10)
[0028]pred(x,y ,0) = (predv(x ,y ,m)+predH(x,y ,m)+8)>>4 (11)
[0029]其中Rx,Q是和待預測像素橫坐標X位置所對應的上方參考像素,Ro,y是和待預測像素縱坐標y位置所對應的左側參考像素,X和y為待預測像素在對應的子宏塊內的坐標位置,pred(x,y,0)是指坐標為(x,y)且預測模式為O的像素的預測值,O表示8X8子宏塊中幀內預測的預測模式0,(x,y,0)表示待預測像素對應的線程序號;
[0030]針對預測模式I,DC預測模式,幀內預測公式如下:
[0031]pred(x,y, I) =DC (12)
[0032]其中DC表示的是DC模式下的預測值,pred(x,y,l)是指坐標為(x,y)且預測模式為I的像素的預測值,I表示8X8子宏塊中幀內預測的預測模式I,(x,y,I)表示待預測像素對應的線程序號;
[0033](3.2)進一步將公式(I)?公式(12)歸納成統一預測公式(13):
[0034]pred(x,y,m) = (a.Ri+b.1?2+入.Ro,9+y.R9,o+16)>>5 (13)
[0035]其中a,b,A,y是和(x,y,m)有關的系數值,且當預測模式m在0時,λ,μ均為O;Ri和R2均為8x8子宏塊中參考像素Ri, j或預測值DC ; Ro, 9和R9, ο為對應位置的參考像素
[0036](3.3)將得到的系數值a,b,λ和μ存儲在系數表T1中,同時將得到的仏和他在參考值數組Ref中的偏移量存儲至參考位置表T2中,其在參考位置表T2中的位置偏移分別為m*168+8*y+x和m*168+8*y+x+36。
[0037]作為進一步優選的,步驟(4)包括以下子步驟:
[0038](4.1)根據8X8子宏塊中參考像素Ri,j對參考值數組Ref進行初始化;
[0039](4.2)對8X8子宏塊幀內預測執行預測,以生成35種模式的預測矩陣;
[0040](4.3)根據生成的35種模式的預測矩陣并采用率失真優化策略決策出一種最優模式。
[0041]作為進一步優選的,步驟(4.1)包括以下子步驟:
[0042](4.1.1)判斷當前像素對應的線程序號(1,7,!11)是否等于(0,0,0),若等于則轉入步驟(4.1.2),否則轉入步驟(4.1.5);
[0043](4.1.2)將左上方參考像素Rq,q拷貝至Ref [O];
[0044](4.1.3)將左側參考像素Rq,1、Rq,2、R(),3、R(),4、R(),5、R(),6、R(),7、R(),8和左下方參考像素!^(^、!^,!?、!^,!!、!^,^、!^,”、!^^、!^,^、!^,^分別拷貝至!^;!^]^]、Ref[2]、Ref[3]、Ref[4]、Ref[5]、Ref[6]、Ref[7]、Ref[8]、Ref[9]、Ref[10]、Ref[ll]、Ref[12]、Ref[13]、Ref[14]、Ref[15]、Ref[16];
[0045](4.1.4)將上方參考像素1?1,()、1?2,()、1?3,()、1?4,()、1?5,()、1?6,()、1?7,()、1?8,()和右上方參考像素尺9,0、1?1。,。、1?11,。、1?12,。、1?13,。、1?14,。、1?15,。、1?16,。分別拷貝至1?6;1!'[20]、Ref[21 ]、Ref [22]、Ref[23]、Ref[24]、Ref[25]、Ref[26]、Ref[27]、Ref[28]、Ref[29]、Ref[30]、Ref[31]、Ref[32]、Ref[33]、Ref[34]、Ref[35];
[0046](4.1.5)根據H.265/HEVC標準計算m = 0時8X8子宏塊的預測值DC,并將該預測值DC拷貝至 Ref [17];
[0047](4.1.6)所有的2240個線程執行同步操作。
[0048]作為進一步優選的,步驟(4.2)包括以下子步驟:
[0049](4.2.1)線程序號為(x,y,m)的線程根據預測模式從參考位置表T2中依次讀取仏和R2,其中Ri = T2[m*168+8*y+x],R2 = T2[m* 168+8*y+x+36];
[0050](4.2.2)根據預測模式,從參考值數組Ref中讀取R1,R2以及Ro,9和R9,ο分別對應的參考像素 Ref [Ri]和 Ref [R2]以及 Ref [Ro