亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

并行解碼方法和并行解碼裝置的制造方法

文檔序號(hào):9828490閱讀:405來(lái)源:國(guó)知局
并行解碼方法和并行解碼裝置的制造方法
【技術(shù)領(lǐng)域】
[0001 ]本發(fā)明總體地涉及。
【背景技術(shù)】
[0002]傳統(tǒng)的視頻編碼標(biāo)準(zhǔn),從H.261開始,歷經(jīng)MPEG-1,MPEG_2,H.263,MPEG_4,H.264等等,都是編碼器復(fù)雜,解碼器相對(duì)簡(jiǎn)單;編碼器可以自由定義算法,解碼器算法固定。這樣做的主要原因是解碼器是大眾消費(fèi)產(chǎn)品,解碼器往往是硬件芯片實(shí)現(xiàn),為了便于解碼器能夠接收不同編碼器編出的碼流,因此碼流格式必須標(biāo)準(zhǔn)化、一致化,因此解碼器的解碼流程也就標(biāo)準(zhǔn)化了,幾乎沒(méi)有改動(dòng)或改進(jìn)的余地,這樣也事實(shí)上提高了解碼器的量產(chǎn)數(shù)量,降低了解碼器的設(shè)計(jì)制造成本。
[0003]但是隨著編解碼標(biāo)準(zhǔn)越來(lái)越復(fù)雜,解碼器也變得越來(lái)越復(fù)雜,4K分辨率的視頻在2.7GHz的i7處理器上單線程也只能剛好達(dá)到30fps的軟件解碼速度。另一方面,由于硬件解碼研發(fā)周期長(zhǎng),操作系統(tǒng)適配兼容性差,因此在不少實(shí)際產(chǎn)品中研發(fā)企業(yè)更偏向于更為靈活的軟件解碼方案,而越來(lái)越高的解碼復(fù)雜度對(duì)軟件解碼提出了挑戰(zhàn)。
[0004]軟件解碼主要分為三個(gè)階段:
[0005]I)熵解碼
[0006]2)反量化+gDCT
[0007]3)預(yù)測(cè)或運(yùn)動(dòng)補(bǔ)償
[0008]4)SA0、環(huán)路濾波等后處理
[0009]由于解碼器已經(jīng)被視頻標(biāo)準(zhǔn)約束得比較嚴(yán)格,能做的變化和改進(jìn)相對(duì)比較少,具體到并行解碼技術(shù)上,傳統(tǒng)的并行方案有如下這幾種:
[0010]I )G0P即幀組級(jí)別的并行,比如每16幀一個(gè)組,且第I幀為Intra幀,這樣每16幀的解碼做為一個(gè)并行單位,用多核或者集群等技術(shù)進(jìn)行并行。這種方案的缺點(diǎn)是I)當(dāng)前最鄰近的幀解碼速度并沒(méi)有得到提升,第一個(gè)GOP還是很慢;2)如果用戶在點(diǎn)播的時(shí)候要拖動(dòng)、快進(jìn)、快退,新起始點(diǎn)的第一個(gè)GOP還是慢,且之前很多GOP的解碼被白白浪費(fèi)掉了;3)緩存需求很大,在線實(shí)時(shí)解碼時(shí)需要提前下載后面GOP的數(shù)據(jù),網(wǎng)絡(luò)緩存加大,同時(shí)還需要更多的緩存保存后面GOP解碼完成的圖像數(shù)據(jù)。
[0011]2)Slice/Tile級(jí)別的并行,即把一幀圖像分成若干個(gè)小圖像,分別按小圖像編碼和解碼,小圖像之間可以并行。這種方案的缺點(diǎn)是:I)需要編碼器端配合,編碼器首先要將圖像分割成小圖像,否則解碼端無(wú)法并行;2)由于分成了小圖像,小圖像之間不能互相參考,嚴(yán)重影響編碼效率,即壓縮率將變低。
[0012]3)WPP級(jí)別的并行,即根據(jù)幀內(nèi)編碼瀑布式下推的特性,通過(guò)多個(gè)熵編碼起始點(diǎn),使得多行編碼塊的解碼過(guò)程之間可以并行。這種方案的缺點(diǎn)是:I)需要編碼端的配合,如果編碼端不按并行的方式編碼,解碼端就無(wú)法并行;2)由于有多個(gè)熵編碼起始點(diǎn),編碼效率下降雖然不多,但仍然會(huì)有一點(diǎn)下降。
[0013]4)幀解碼內(nèi)部的并行,即在每個(gè)編碼塊的內(nèi)部進(jìn)行并行,比如DCT計(jì)算過(guò)程并行,預(yù)測(cè)過(guò)程并行等。這種方案的確定是:由于每個(gè)塊的執(zhí)行時(shí)間粒度已經(jīng)很小(毫秒級(jí)別),而操作系統(tǒng)調(diào)度的時(shí)間片大小一般在20毫秒左右,所以這種并行設(shè)計(jì)起來(lái)非常困難,硬件兼容性差。

【發(fā)明內(nèi)容】

[0014]針對(duì)上述各種并行解碼方案存在的問(wèn)題,本專利提出一種可以克服上述問(wèn)題較為通用的解碼器并行方案,可以在宏塊級(jí)別并行,無(wú)需編碼端針對(duì)并行做任何專門的處理,編碼效率沒(méi)有損失,并行化的軟件實(shí)現(xiàn)不是很困難,對(duì)緩存要求不高的軟件并行解碼方案。
[0015]根據(jù)本發(fā)明的一個(gè)方面,提供了一種計(jì)算機(jī)執(zhí)行的、針對(duì)采用了CABAC熵編碼技術(shù)編碼的碼流進(jìn)行的、宏塊級(jí)別的并行解碼方法,對(duì)于一個(gè)宏塊的解碼操作包括熵解碼操作和除了熵解碼操作外的在后解碼操作,其中包括:接收來(lái)自編碼器側(cè)的碼流,該碼流是采用了 CABAC熵編碼技術(shù)熵編碼的;利用單獨(dú)的CABAC熵解碼線程對(duì)所接收的碼流中的宏塊進(jìn)行CABAC熵解碼;至少部分基于CABAC熵解碼的結(jié)果、幀內(nèi)宏塊和幀間宏塊之間的依賴關(guān)系、當(dāng)前能夠利用的存儲(chǔ)資源和計(jì)算資源,界定能夠彼此并行進(jìn)行在后解碼操作的宏塊;以及利用并行的塊解碼線程,彼此并行地對(duì)所界定的宏塊進(jìn)行在后解碼操作。
[0016]根據(jù)本發(fā)明實(shí)施例的并行解碼方法,還可以包括:利用環(huán)狀緩沖區(qū)來(lái)存儲(chǔ)宏塊進(jìn)行在后解碼操作所需要的上下文內(nèi)容數(shù)據(jù)集,緩沖區(qū)的存儲(chǔ)單位為每個(gè)宏塊進(jìn)行在后解碼操作所需要的上下文內(nèi)容數(shù)據(jù)集,緩沖區(qū)的長(zhǎng)度大于圖像水平方向所包含的編碼塊的數(shù)目,緩沖區(qū)中的每個(gè)數(shù)據(jù)集具有可填充標(biāo)記和可解碼標(biāo)記,可填充標(biāo)記標(biāo)識(shí)該數(shù)據(jù)集是否可以被覆蓋,可解碼標(biāo)記標(biāo)識(shí)該元素是否有足夠的數(shù)據(jù)進(jìn)行對(duì)應(yīng)區(qū)域的解碼工作,具體圖像塊可解碼指的是能夠?qū)υ摼唧w圖像塊進(jìn)行在后解碼操作。
[0017]根據(jù)本發(fā)明實(shí)施例的并行解碼方法,所界定的能夠彼此并行進(jìn)行在后解碼操作的宏塊可以包括在不同幀中的宏塊。
[0018]根據(jù)本發(fā)明實(shí)施例的并行解碼方法,所述界定能夠彼此并行進(jìn)行在后解碼操作的宏塊可以在以下兩種情況下被觸發(fā)執(zhí)行:在CABAC熵解碼線程中具體圖像塊的CABAC熵解碼完成后,確定該具體圖像塊是否可以進(jìn)行在后解碼操作,如果確定可以,則將該具體圖像塊加入能夠彼此并行進(jìn)行在后解碼操作的宏塊的集合中;在具體圖像塊的在后解碼操作完成后,確定與該具體圖像塊相關(guān)的圖像塊中是否有新的可進(jìn)行在后解碼操作的圖像塊出現(xiàn),如果有,則將出現(xiàn)的新的可進(jìn)行在后解碼操作的圖像塊加入能夠彼此并行進(jìn)行在后解碼操作的宏塊的集合中。
[0019]根據(jù)本發(fā)明實(shí)施例的并行解碼方法,還可以包括:利用并行化調(diào)度模塊,基于環(huán)狀緩沖區(qū)中可進(jìn)行在后解碼操作的圖像塊的數(shù)量A、圖像塊熵解碼完成領(lǐng)先數(shù)量B、當(dāng)前計(jì)算資源的使用率C、當(dāng)前的并行的塊解碼線程的數(shù)量D,對(duì)熵解碼線程和并行的塊解碼線程進(jìn)行調(diào)度。
[0020]根據(jù)本發(fā)明實(shí)施例的并行解碼方法,所述對(duì)熵解碼線程和并行的塊解碼線程進(jìn)行調(diào)度可以包括下述項(xiàng)目中的至少一個(gè):暫停熵解碼線程、重啟熵解碼線程、增加并行的塊解碼線程、減少并行的塊解碼線程。
[0021]根據(jù)本發(fā)明實(shí)施例的并行解碼方法,并行化調(diào)度模塊可以在每次塊解碼線程準(zhǔn)備開始尋找一個(gè)可解碼圖像塊進(jìn)行解碼時(shí)進(jìn)行調(diào)度。
[0022]根據(jù)本發(fā)明實(shí)施例的并行解碼方法,所述并行化調(diào)度模塊可以根據(jù)下述規(guī)則中的至少一個(gè)進(jìn)行調(diào)度:熵解碼線程處于運(yùn)行狀態(tài)時(shí),當(dāng)圖像塊熵解碼完成領(lǐng)先數(shù)量等于預(yù)定的最大值時(shí),熵解碼線程暫停;熵解碼線程處于暫停狀態(tài)時(shí),并且圖像塊熵解碼完成領(lǐng)先數(shù)量小于預(yù)定最大值的預(yù)定百分比時(shí),熵解碼線程重啟;如果環(huán)狀緩沖區(qū)中可進(jìn)行在后解碼操作的圖像塊的數(shù)量A大于等于2,且當(dāng)前計(jì)算資源的使用率C不大于第一預(yù)定閾值,則增加一個(gè)塊解碼線程;如果當(dāng)前的并行的塊解碼線程的數(shù)量D大于1、當(dāng)前計(jì)算資源的使用率C大于第二預(yù)定閾值、圖像塊熵解碼完成領(lǐng)先數(shù)量B小于預(yù)定的最大值,則減少一個(gè)塊解碼線程。
[0023]根據(jù)本發(fā)明的另一方面,提供了一種針對(duì)采用了CABAC熵編碼技術(shù)編碼的碼流進(jìn)行的、宏塊級(jí)別的并行解碼裝置,對(duì)于一個(gè)宏塊的解碼操作包括熵解碼操作和除了熵解碼操作外的在后解碼操作,并行解碼裝置可以包括:碼流接收單元,接收來(lái)自編碼器側(cè)的碼流,該碼流是采用了CABAC熵編碼技術(shù)熵編碼的;CABAC熵解碼單元,利用單獨(dú)的CABAC熵解碼線程對(duì)所接收的碼流中的宏塊進(jìn)行CABAC熵解碼;可解碼宏塊界定單元,至少部分基于CABAC熵解碼的結(jié)果、幀內(nèi)宏塊和幀間宏塊之間的依賴關(guān)系、當(dāng)前能夠利用的存儲(chǔ)資源和計(jì)算資源,界定能夠彼此并行進(jìn)行在后解碼操作的宏塊;以及在后解碼操作執(zhí)行單元,利用并行的塊解碼線程,彼此并行地對(duì)所界定的宏塊進(jìn)行在后解碼操作。
[0024]根據(jù)本發(fā)明的再一方面,提供了一種針對(duì)采用了CABAC熵編碼技術(shù)編碼的碼流進(jìn)行宏塊級(jí)別的并行解碼的計(jì)算裝置,對(duì)于一個(gè)宏塊的解碼操作包括熵解碼操作和除了熵解碼操作外的在后解碼操作,所述計(jì)算裝置包括存儲(chǔ)器和處理器,存儲(chǔ)器中存儲(chǔ)有計(jì)算機(jī)可執(zhí)行指令集合,當(dāng)處理器執(zhí)行所述計(jì)算機(jī)可執(zhí)行指令集合時(shí),執(zhí)行下述操作:接收來(lái)自編碼器側(cè)的碼流,該碼流是采用了 CABAC熵編碼技術(shù)熵編碼的;利用單獨(dú)的CABAC熵解碼線程對(duì)所接收的碼流中的宏塊進(jìn)行CABAC熵解碼;至少部分基于CABAC熵解碼的結(jié)果、幀內(nèi)宏塊和幀間宏塊之間的依賴關(guān)系、當(dāng)前能夠利用的存儲(chǔ)資源和計(jì)算資源,界定能夠彼此并行進(jìn)行在后解碼操作的宏塊;以及利用并行的塊解碼線程,彼此并行地對(duì)所界定的宏塊進(jìn)行在后解碼操作。
【附圖說(shuō)明】
[0025]從下面結(jié)合附圖對(duì)本發(fā)明實(shí)施例的詳細(xì)描述中,本發(fā)明的這些和/或其它方面和優(yōu)點(diǎn)將變得更加清楚并更容易理解,其中:
[0026]圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的并行解碼方法100的流程圖。
[0027]圖2示例性地示出了幀內(nèi)圖像塊解碼的依賴關(guān)系的示意圖。
[0028]圖3示例性地示出了幀間圖像塊解碼的依賴關(guān)系的示意圖。
[0029]圖4示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的并行編碼框架的示意圖。
[0030]圖5A到5Y示例性說(shuō)明對(duì)幀內(nèi)圖像和幀間圖像的圖像塊進(jìn)行解碼的解碼過(guò)程的一系列示意圖。
【具體實(shí)施方式】
[0031]為了使本領(lǐng)域技術(shù)人員更好地理解本發(fā)明,下面結(jié)合附圖和【具體實(shí)施方式】對(duì)本發(fā)明作進(jìn)一步詳細(xì)說(shuō)明。
[0032]本文中,在沒(méi)有特別說(shuō)明的情況下,“可解碼”指的是可進(jìn)行除了“熵解碼”操作之外的在后解碼操作。單獨(dú)出現(xiàn)的“解碼”也是指的是進(jìn)行除了“熵解碼”操作的在后解碼操作。
[0033]后面的描述將以H.265標(biāo)準(zhǔn)的解碼技術(shù)為例加以說(shuō)明,其中采用CABAC熵編碼方式。而H.264標(biāo)準(zhǔn)的編碼技術(shù)H.264中是有兩種熵編碼方式,CAVLC和CABAC,CAVLC由于復(fù)雜度低是事實(shí)上大部分碼流所采用的編碼方式,CAVLC的解碼過(guò)程比較快,相鄰的元素解碼不存在依賴關(guān)系,因此如果H.264采用CAVLC方式編碼的話,解碼可以不用特別考慮熵解碼部分帶來(lái)的復(fù)雜性。H.265中出于編碼效率的考慮,統(tǒng)一只采用CABAC的熵編碼方式,CAVLC不再被包含在H.265標(biāo)準(zhǔn)中。而如果采用CABAC,即算術(shù)編碼,則CABAC的編碼和解碼過(guò)程都比CAVLC復(fù)雜很多,速度也慢,前后元素的編解碼過(guò)程互相關(guān)聯(lián),如果前面的元素不解碼完成,后面的元素是無(wú)法解碼的,只有到了幀(更準(zhǔn)確的說(shuō)是Slice)的邊界,熵解碼才會(huì)有結(jié)束標(biāo)志,并重新初始化進(jìn)行編解碼,也就是說(shuō)只有到了幀的邊界,熵解碼才有并行的可能,在幀的內(nèi)部,熵解碼必須串行順序執(zhí)行。
[0034]下面描述一下本發(fā)明的發(fā)明思想,以便于透徹理解本發(fā)明。
[0035]針對(duì)H.265只有CABAC這一種熵編碼方式,并考慮到CABAC的解碼在Intra幀中占據(jù)了近50%的解碼時(shí)間,在Inter幀中占據(jù)了約30%的解碼時(shí)間這一統(tǒng)計(jì)事實(shí),著重考慮了有CABAC條件下如何并行解碼的問(wèn)題。
[0036]首先,本發(fā)明實(shí)施例給CABAC熵解碼單獨(dú)建立了一個(gè)線程,解碼器的其他線程跟隨在CABAC線程后面執(zhí)行,CABAC與其他線程之間存在并行關(guān)系,CABAC之外的塊解碼線程之間也存在并行關(guān)系。
[0037]此外,本發(fā)明實(shí)施例的并行解碼方法同時(shí)面向幀內(nèi)圖像解碼和幀間圖像解碼,特別的是對(duì)幀間圖像而言,圖像塊是否可以解碼很多情況下并不依賴其左側(cè)和上方的圖像塊是否已經(jīng)解碼完成,而是依賴前一幀圖像中的參考位置是否存在,因此圖像塊之間的并行沒(méi)有很強(qiáng)的依賴關(guān)系,可以“亂”序并行解碼。在一個(gè)示例中,為了將幀間圖像的“亂”序并行和幀內(nèi)圖像的“順”序并行融合在一起,采用了一種由環(huán)狀緩沖區(qū)管理可解碼圖像塊列表,統(tǒng)一圖像塊可并行解碼的信號(hào)觸發(fā)方式,使得“順”和“亂”兩種方式都能得到統(tǒng)一的并行化支持。
[0038]根據(jù)本發(fā)明的一個(gè)實(shí)施例,為了保障最大并行效率,基于一些參數(shù)對(duì)熵解碼線
當(dāng)前第1頁(yè)1 2 3 4 5 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1