本技術(shù)涉及圖像編碼,特別是涉及一種用于編碼器的運動估計模塊和編碼器。
背景技術(shù):
1、隨著視頻技術(shù)的不斷發(fā)展,視頻的分辨率正向4k、8k甚至16k演進,同時,幀率也在向120fps演進。不斷提高的分辨率和幀率,對硬件編碼器處理速度的要求也隨之不斷提高,編碼速度已經(jīng)成為影響硬件視頻編碼器性能的重要瓶頸之一。
2、傳統(tǒng)技術(shù)中硬件視頻編碼器的很多模塊都是串行執(zhí)行的,尤其運動估計,由于運動估計過程中有很多數(shù)據(jù)依賴,所以整個運動估計過程幾乎都是串行執(zhí)行的,并且由于要做預(yù)測模式選擇,涉及到大量的邏輯運算,這導(dǎo)致運動估計成為視頻編碼器中最復(fù)雜最耗時的部分,編碼一幀圖像,運動估計通常要占據(jù)60%?~?90%的時間。
3、上述問題導(dǎo)致現(xiàn)有的硬件視頻編碼器編碼速度很慢。而要提高編碼速度,只能關(guān)閉一些編碼工具,這樣做雖然能提升編碼速度,但是由于關(guān)閉了某些編碼工具,又使得最終的編碼畫質(zhì)很差,難以同時兼顧編碼質(zhì)量和編碼速度。
技術(shù)實現(xiàn)思路
1、基于此,有必要針對上述技術(shù)問題,提供一種能夠在不改變編碼畫質(zhì)的前提下,提高編碼速度的用于編碼器的運動估計模塊和編碼器。
2、第一方面,本技術(shù)提供一種用于編碼器的運動估計模塊,所述運動估計模塊包括:
3、第一幀內(nèi)預(yù)測單元,用于對ctu進行幀內(nèi)預(yù)測得到粗略幀內(nèi)cu劃分結(jié)果;
4、第二幀內(nèi)預(yù)測單元,用于基于所述粗略幀內(nèi)cu劃分結(jié)果得到精確幀內(nèi)cu劃分結(jié)果;
5、第一幀間預(yù)測單元,用于對所述ctu進行幀間預(yù)測得到粗略幀間cu劃分結(jié)果;
6、整數(shù)像素預(yù)測單元,用于基于所述粗略幀間cu劃分結(jié)果進行整數(shù)像素預(yù)測,得到整數(shù)像素預(yù)測結(jié)果;
7、分數(shù)像素預(yù)測單元,用于基于所述整數(shù)像素預(yù)測結(jié)果進行分數(shù)像素預(yù)測,得到分數(shù)像素預(yù)測結(jié)果;
8、第二幀間預(yù)測單元,用于基于所述分數(shù)像素預(yù)測結(jié)果進行模式預(yù)測,得到精確幀間cu劃分結(jié)果;
9、模式選擇單元,用于基于所述精確幀內(nèi)cu劃分結(jié)果以及所述精確幀間cu劃分結(jié)果,得到目標預(yù)測模式;
10、其中所述第一幀內(nèi)預(yù)測單元、所述第二幀內(nèi)預(yù)測單元、所述第一幀間預(yù)測單元、所述整數(shù)像素預(yù)測單元、所述分數(shù)像素預(yù)測單元以及所述第二幀間預(yù)測單元中的至少兩個是并行執(zhí)行的。
11、在其中一個可選的實施例中,所述第一幀內(nèi)預(yù)測單元與所述第一幀間預(yù)測單元對ctu[i]并行處理,i為大于或等于0的整數(shù)。
12、在其中一個可選的實施例中,所述整數(shù)像素預(yù)測單元對ctu[i]的處理與所述第一幀間預(yù)測單元對ctu[i+1]處理并行,且在所述整數(shù)像素預(yù)測單元將ctu[i]中各cu均處理完成的情況下,所述第一幀間預(yù)測單元開始對ctu[i+2]進行處理,i為大于或等于0的整數(shù)。
13、在其中一個可選的實施例中,所述整數(shù)像素預(yù)測單元、所述分數(shù)像素預(yù)測單元以及所述第二幀間預(yù)測單元為以cu為單位的并行執(zhí)行單元;
14、所述分數(shù)像素預(yù)測單元對cu[j]的處理與所述整數(shù)像素預(yù)測單元對cu[j+1]的處理并行,且在所述分數(shù)像素預(yù)測單元對cu[j]處理完成的情況下,所述整數(shù)像素預(yù)測單元開始對cu[j+2]進行處理;
15、所述第二幀間預(yù)測單元對cu[j]的處理與所述分數(shù)像素預(yù)測單元對cu[j+1]的處理并行,且在所述第二幀間預(yù)測單元對cu[j]處理完成的情況下,所述分數(shù)像素預(yù)測單元開始對cu[j+2]進行處理,j為大于或等于0的整數(shù)。
16、在其中一個可選的實施例中,所述第二幀間預(yù)測單元與所述第二幀內(nèi)預(yù)測單元對cu[j]并行處理,j為大于或等于0的整數(shù)。
17、在其中一個可選的實施例中,所述運動估計模塊還包括以下至少一個存儲單元:
18、第一存儲單元,用于存儲所述第一幀內(nèi)預(yù)測單元得到的所述粗略幀內(nèi)cu劃分結(jié)果,并供所述第二幀內(nèi)預(yù)測單元讀取所述粗略幀內(nèi)cu劃分結(jié)果;
19、第二存儲單元,用于存儲所述第一幀間預(yù)測單元得到的所述粗略幀間cu劃分結(jié)果,并供所述整數(shù)像素預(yù)測單元讀取所述粗略幀間cu劃分結(jié)果。
20、在其中一個可選的實施例中,所述第一幀間預(yù)測單元還用于確定ctu[i+2]的搜索中心點,并以所述搜索中心點,確定所述ctu[i+2]的搜索范圍以及所述ctu[i+2]的搜索范圍內(nèi)的參考像素,其中ctu[0]以及ctu[1]的搜索中心點是預(yù)先設(shè)置的,所述ctu[0]以及ctu[1]的搜索范圍是基于預(yù)先設(shè)置的搜索中心點進行搜索得到的,其中i為大于或等于0的整數(shù);其中所述ctu[i+2]的搜索中心點是基于可用的相鄰運動矢量得到的,或所述ctu[i+2]的搜索中心點是基于相鄰幀的同位塊的運動矢量得到的;或所述ctu[i+2]的搜索中心點基于在對圖像進行預(yù)處理時,為每個ctu確定的全局最優(yōu)運動矢量得到的。
21、在其中一個可選的實施例中,所述第一幀間預(yù)測單元、所述整數(shù)像素預(yù)測單元、所述分數(shù)像素預(yù)測單元以及所述第二幀間預(yù)測單元均用于基于相鄰cu的運動矢量確定當前cu的運動矢量;
22、其中,所述相鄰cu的運動矢量為基于所述相鄰cu的整數(shù)像素預(yù)測結(jié)果確定;或者所述相鄰cu的運動矢量為基于所述相鄰cu的分數(shù)像素預(yù)測結(jié)果確定;或者所述相鄰cu的運動矢量為基于相鄰幀的同位塊的運動矢量確定;或者所述相鄰cu的運動矢量為在對圖像進行預(yù)處理時,為每個cu確定的初始運動矢量。
23、第二方面,本技術(shù)還提供一種編碼器,所述編碼器包括上述任意一個實施例中所述的用于編碼器的運動估計模塊。
24、在其中一個可選的實施例中,所述編碼器還包括:
25、運動補償與變換量化模塊,用于基于參考像素、原始像素以及所述運動估計模塊輸出的目標預(yù)測模式確定重構(gòu)像素以及編碼系數(shù);
26、熵編碼模塊,用于基于所述運動估計模塊輸出的目標預(yù)測模式以及所述編碼系數(shù)生成編碼碼流,所述編碼碼流存儲于內(nèi)存中;
27、環(huán)路濾波模塊,用于基于所述重構(gòu)像素進行環(huán)路濾波得到濾波后的像素,將濾波后的像素作為所述參考像素存儲于所述內(nèi)存中;
28、其中,所述運動估計模塊、所述運動補償與變換量化模塊、所述熵編碼模塊以及所述環(huán)路濾波模塊中的至少兩個是并行執(zhí)行的。
29、在其中一個可選的實施例中,所述運動補償與變換量化模塊對cu[j]的處理以及所述運動估計模塊中的第二幀間預(yù)測單元對cu[j+1]的處理是并行的;或所述運動補償與變換量化模塊對cu[j]的處理以及所述運動估計模塊中的第一幀內(nèi)預(yù)測單元對cu[j?+1]的處理是并行的,j為大于或等于0的整數(shù)。
30、在其中一個可選的實施例中,所述熵編碼模塊對cu[j]的處理以及所述運動補償與變換量化模塊對cu[j?+1]的處理是并行的;或所述環(huán)路濾波模塊對cu[j]的處理以及所述運動補償與變換量化模塊對cu[j?+1]的處理是并行的,j為大于或等于0的整數(shù)。
31、在其中一個可選的實施例中,所述熵編碼模塊對cu[j]的處理以及所述環(huán)路濾波模塊對cu[j]的處理是并行的,j為大于或等于0的整數(shù)。
32、在其中一個可選的實施例中,所述編碼器還包括以下至少一個存儲模塊:
33、第一存儲模塊,用于存儲從內(nèi)存預(yù)讀取ctu的原始像素,并供所述運動估計模塊以及所述運動補償與變換量化模塊使用;
34、第二存儲模塊,用于從所述內(nèi)存中預(yù)讀取若干參考像素,并供所述運動估計模塊以及所述運動補償與變換量化模塊使用;
35、第三存儲模塊,用于所述運動估計模塊以及所述運動補償與變換量化模塊之間的數(shù)據(jù)緩存,用于存儲所述運動估計模塊輸出的目標預(yù)測模式;
36、第四存儲模塊,用于所述運動估計模塊、所述運動補償與變換量化模塊以及熵編碼模塊之間的數(shù)據(jù)緩存,用于存儲所述運動估計模塊輸出的目標預(yù)測模式以及所述運動補償與變換量化模塊輸出的編碼系數(shù);
37、第五存儲模塊,用于所述運動補償與變換量化模塊以及所述環(huán)路濾波模塊之間的數(shù)據(jù)緩存,用于存儲所述運動補償與變換量化模塊輸出的重構(gòu)像素。
38、上述用于編碼器的運動估計模塊和編碼器,其中運動估計模塊包括第一幀內(nèi)預(yù)測單元,用于對ctu進行幀內(nèi)預(yù)測得到粗略幀內(nèi)cu劃分結(jié)果;第二幀內(nèi)預(yù)測單元,用于基于所述粗略幀內(nèi)cu劃分結(jié)果得到精確幀內(nèi)cu劃分結(jié)果;第一幀間預(yù)測單元,用于對所述ctu進行幀間預(yù)測得到粗略幀間cu劃分結(jié)果;整數(shù)像素預(yù)測單元,用于基于所述粗略幀間cu劃分結(jié)果進行整數(shù)像素預(yù)測,得到整數(shù)像素預(yù)測結(jié)果;分數(shù)像素預(yù)測單元,用于基于所述整數(shù)像素預(yù)測結(jié)果進行分數(shù)像素預(yù)測,得到分數(shù)像素預(yù)測結(jié)果;第二幀間預(yù)測單元,用于基于所述分數(shù)像素預(yù)測結(jié)果進行模式預(yù)測,得到精確幀間cu劃分結(jié)果;模式選擇單元,用于基于所述精確幀內(nèi)cu劃分結(jié)果以及所述精確幀間cu劃分結(jié)果,得到目標預(yù)測模式;其中所述第一幀內(nèi)預(yù)測單元、所述第二幀內(nèi)預(yù)測單元、所述第一幀間預(yù)測單元、所述整數(shù)像素預(yù)測單元、所述分數(shù)像素預(yù)測單元、所述第二幀間預(yù)測單元以及所述模式選擇單元中的至少兩個是并行執(zhí)行的,這樣并行運行的單元可以大大提高硬件的編碼速度。