視頻編碼方法及視頻編碼器的制造方法
【技術領域】
[0001]本發明涉及視頻技術領域,尤其涉及一種視頻編碼方法及視頻編碼器。
【背景技術】
[0002]在移動攝像設備中,由于高分辨率和高幀率視頻的廣泛應用,編解碼器對片外存儲器的訪問帶寬需求極大,大量的片外存儲訪問帶來的高功耗減少了系統的可持續工作時間。同時,視頻編碼模塊常常和顯示模塊、通訊模塊、計算模塊等集成在一個系統中并行運行,共享帶寬,其所分配到的帶寬資源常常不能滿足正常編碼的需要,制約了視頻編碼器的實際性能,增大了視頻編碼器的設計難度。
[0003]在各種視頻編碼標準中,采用的幀類型有幀內預測幀(I幀)和幀間預測幀。其中幀間預測幀又分為前向預測幀(P幀)和雙向預測幀(B幀)。在最新的H264和HEVC視頻編碼標準中,P幀可以支持后向預測,B幀的兩個參考幀可以分別位于前向和后向,也可以全部位于前向或后向。
[0004]不同類型幀編碼時視頻編碼器對片外存儲器的訪問可以參考圖1,包含當前幀數據的讀取,運動估計和補償模塊對參考幀(用于參考的幀)數據的讀取,重建幀數據的寫出和編碼碼流的寫出等,其中前三項占據了絕大多數帶寬。運動估計和補償模塊常需要一個滑動窗存儲器用于緩存讀取的參考幀數據,其所需帶寬與所用的參考幀數量和滑動窗的高度成正比。
[0005]為了減少帶寬和提高編碼速度,常用的實時視頻編碼器設計大都不采用多參考幀和B幀,而僅僅采用I幀和P幀進行編碼。仍參考圖1,用于參考的I幀比起用于參考的P幀不需要運動估計,其所需片外訪問帶寬較少。但是I幀壓縮率通常較低,實驗證明,頻繁的插入I幀不僅會使編碼碼率增大,而且會引入視頻閃爍的感覺。所以,大部分實時視頻編碼的幀結構都是采用少量I幀中插入大量連續P幀的結構,如=IPPP……PIPPP……P。
[0006]即使這樣的編碼結構,在高分辨率和高幀率下,其帶寬仍然是可觀的。以分辨率為4kX2k (單位為像素)、巾貞率為60中貞/秒(f/s)、8比特(Bit)像素值的4:2:0視頻為例,HEVC編碼器(編碼單元設為32X32)如果需要支持垂直方向偏移64的運動向量,其有效片外存儲器訪問帶寬超過了 4GB/s。
[0007]為了減小實時編碼器的帶寬需求,現有的編碼器優化設計方案,主要有增加片上緩存和對重建幀進行壓縮傳輸等。在部分優化設計中,通過將滑動窗擴展成相同高度的行緩存(Iinebuffer),來減少運動估計的數據的重復讀取,但是其代價極大;在前述4kX2k視頻編碼的例子中,采用片上IinebufTer可使編碼有效帶寬降低到2.lGB/s,但僅亮度分量所需的片上Iinebuffer容量就要614kB。另一些優化設計中提出了幀緩存壓縮的方法,但局限在于:采用無損壓縮時壓縮率受視頻內容影響不穩定,其節省帶寬的效果也是不確定的;采用有損壓縮時,視頻損失會通過幀間預測積累,造成編碼圖像質量的明顯下降。
【發明內容】
[0008]本發明技術方案解決的是現有的視頻編碼方案對帶寬和功耗需求高的問題。
[0009]為解決上述問題,本發明實施例提供一種視頻編碼方法,包括:
[0010]基于視頻編碼的幀結構確定至少一圖像組,所述視頻編碼的幀結構包括若干參考中貞及相鄰參考巾貞之間的若干非參考巾貞,距離一參考巾貞最近的非參考巾貞和參考該一參考巾貞的參考幀組成一圖像組,所述距離一參考幀最近是指與該一參考幀的距離小于或等于與其他參考幀的距離;
[0011 ] 依次對圖像組進行編碼。
[0012]可選的,對于每一圖像組,先對各幀的第X個編碼單元進行編碼,再對各幀的第(χ+l)個編碼單元進行編碼;其中,I ( χ<Χ, X為每一幀所包含的編碼單元的總數。
[0013]可選的,所述視頻編碼方法還包括:每一編碼單元編碼后,輸出編碼單元編碼后的碼流數據至片外碼流緩存。
[0014]可選的,所述視頻編碼方法還包括:在對一圖像組進行編碼前,從片外存儲器讀取參考幀的數據;在對各幀的第X個編碼單元進行編碼后,將運動估計滑動窗的數據更新為對應于第(χ+l)個編碼單元的運動估計滑動窗的數據。
[0015]可選的,所述非參考幀為nP幀。
[0016]一種用于實現上述視頻編碼方法的視頻編碼器,包括:
[0017]傳輸模塊,適于傳輸圖像組的數據;
[0018]編碼控制模塊,適于儲存編碼所需的圖像組控制參數、幀控制參數和編碼單元控制參數;所述編碼控制模塊包括圖像組控制寄存器、M+1組幀控制寄存器和M+1組編碼單元行緩存,所述圖像組的每一幀分別對應一組幀控制寄存器和一組編碼單元行緩存;所述圖像組中非參考巾貞的數量小于或等于M, M彡I ;
[0019]編碼模塊,適于基于所述編碼控制模塊儲存的控制參數,對圖像組的數據進行編碼。
[0020]可選的,所述傳輸模塊適于按如下順序傳輸編碼單元的數據:先依次傳輸各幀的第X個編碼單元的數據,再依次傳輸各幀的第(Χ+l)個編碼單元的數據,其中,I ( x<X,X為每一幀所包含的編碼單元的總數;在所述編碼模塊對一個編碼單元進行編碼后,再傳輸下一個編碼單元的數據。
[0021]可選的,所述視頻編碼器還包括:幀內預測模塊,所述幀內預測模塊包括Μ+1組像素值行緩存,所述圖像組的每一幀分別對應一組像素值行緩存。
[0022]可選的,所述視頻編碼器還包括:
[0023]運動估計和補償模塊,適于輸入編碼單元的數據和運動估計移動窗的數據,基于圖像組控制參數和幀控制參數進行運動估計和補償處理;
[0024]選擇模塊,適于選擇所述幀內預測模塊的輸出或所述運動估計和補償模塊的輸出作為預測編碼單元的數據;
[0025]殘差處理模塊,適于輸入編碼單元的數據和所述預測編碼單元的數據,輸出殘差數據;
[0026]變換與量化模塊,適于基于編碼單元控制參數對所述殘差數據進行變換與量化處理;
[0027]所述編碼模塊適于基于編碼單元控制參數對變換與量化處理后的殘差數據進行編碼。
[0028]可選的,所述視頻編碼器還包括:
[0029]反量化與反變換模塊,適于對變換與量化處理后的殘差數據進行反量化與反變換處理;
[0030]重建處理模塊,適于輸入反量化與反變換處理后的殘差數據和所述預測編碼單元的數據,輸出重建編碼單元的數據;
[0031]濾波模塊,適于對所述重建編碼單元的數據進行濾波處理。
[0032]與現有技術相比,本發明技術方案至少具有以下有益效果:
[0033]利用非參考幀不需要重建的特點,根據帶寬受限的情況,在視頻編碼的相鄰參考幀之間插入若干非參考幀,以減少重建幀的輸出。相比使用大量行緩存來緩存運動估計參考幀數據的方法,本發明技術方案僅需要增加少量片上存儲器,就可以同等降低視頻編碼所需的帶寬;并且可以根據需要,通過增加非參考幀的數量以取得更顯著的降低帶寬和功耗的效果。
[0034]相比傳統的幀緩存有損再壓縮方法,本發明技術方案的編碼視頻質量損失極少。相比傳統的幀緩存無損再壓縮方法,本發明技術方案可以穩定的減少帶寬需求,且與視頻內容無關。進一步,本發明技術方案可以與幀緩存無損壓縮合并使用,使節省帶寬的效果疊加。
[0035]本發明技術方案可以根據可用帶寬情況,自適應的調整編碼幀結構,因此可以在帶寬動態變化的情況下,保持穩定的編碼幀率。
【附圖說明】
[0036]圖1是視頻編碼中參考幀的片外存儲訪問的示意圖;
[0037]圖2是視頻編碼中非參考幀的片外存儲訪問的示意圖;
[0038]圖3是本發明實施例的視頻編碼方法的流程示意圖;
[0039]圖4是本發明實施例的視頻編碼的幀結構示意圖;
[0040]圖5是本發明實施例的圖像組中編碼單元的編碼處理順序示意圖;
[0041]圖6是本發明實施例的視頻編碼器的結構示意圖。
【具體實施方式】
[0042]考慮到編碼幀是否用于后續預測參考,會影響其對帶寬的需求,如圖2所示,非參考幀(即不用于參考的幀)的重建幀不需要寫到片外存儲器中,其中,不用于參考的I幀、P幀和B幀,在本文中分別稱為nl幀、nP幀和nB幀。因此,本發明技術方案利用非參考幀不需要重建的特點,根據帶寬受限的情況,在視頻編碼的相鄰參考幀之間插入若干非參考幀,以減少重建幀的輸出。進一步,通過對運