P中,如果沒有其他條件的限制,圖像塊熵解碼完成領(lǐng)先數(shù)量這個(gè)數(shù)值應(yīng)該越大越好,因?yàn)殪亟獯a完成得越多,才可以讓可并行的圖像塊數(shù)量更多,才可能在計(jì)算資源充足的條件下有更大的并行性加速整個(gè)解碼速度。但是熵解碼本身要占用一部分計(jì)算資源,會使得其他塊解碼線程可用的計(jì)算資源減小,在“一馬當(dāng)先”的情況下拖累整體的解碼速度;同時(shí)熵解碼輸出的解碼結(jié)果需要占用一定的緩存資源來存儲,因此領(lǐng)先數(shù)量會受到緩存資源大小的限制。可以根據(jù)經(jīng)驗(yàn)或一定的計(jì)算,為某個(gè)硬件平臺設(shè)置該B值的最大上限,并且?guī)瑑?nèi)圖像的最大上限與幀間圖像由于并行化特點(diǎn)不同,其最大上限值也應(yīng)有所不同。
[0079]假定“熵解碼完成數(shù)量”這個(gè)值從上述GOP的第一個(gè)幀內(nèi)圖像的第一個(gè)幀內(nèi)圖像塊開始初始化為O,熵解碼每完成一個(gè)圖像塊的熵解碼,“熵解碼完成數(shù)量”加I。
[0080]假定“已解碼圖像塊數(shù)量”從上述GOP的第一個(gè)幀內(nèi)圖像的第一個(gè)幀內(nèi)圖像塊開始初始化為O,每當(dāng)一個(gè)圖像塊完全解碼完畢,該數(shù)值加I。
[0081 ]圖像塊熵解碼完成領(lǐng)先數(shù)量即為上述兩個(gè)數(shù)值之差,即:
[0082 ]圖像塊熵解碼完成領(lǐng)先數(shù)量=熵解碼完成數(shù)量一已解碼圖像塊數(shù)量。
[0083](3)當(dāng)前計(jì)算資源的使用率C
[0084]可以通過操作系統(tǒng)底層支持獲得當(dāng)前計(jì)算資源的使用率。
[0085]如果解碼器運(yùn)行環(huán)境有計(jì)算資源使用率的最大限制,比如為了給解碼器以外的其他任務(wù)留出計(jì)算資源,則計(jì)算出解碼任務(wù)所使用的計(jì)算資源占預(yù)設(shè)的最大限制的百分比即可。
[0086](4)塊解碼線程數(shù)量D
[0087]即當(dāng)前已經(jīng)生產(chǎn)的塊解碼線程數(shù)量,初始化時(shí)有I個(gè)塊解碼線程,隨著并行化條件的滿足程度和計(jì)算資源的可用性,該數(shù)值會動(dòng)態(tài)增加或減少。
[0088]在一個(gè)示例中,對熵解碼線程和并行的塊解碼線程進(jìn)行調(diào)度包括下述項(xiàng)目中的至少一個(gè):暫停熵解碼線程、重啟熵解碼線程、增加并行的塊解碼線程、減少并行的塊解碼線程。
[0089]并行化調(diào)度器可以在每次塊解碼線程準(zhǔn)備開始尋找一個(gè)可解碼圖像塊進(jìn)行解碼時(shí)進(jìn)行調(diào)度。
[0090]并行化調(diào)度器可以根據(jù)下述規(guī)則中的至少一個(gè)進(jìn)行調(diào)度:
[0091](I)熵解碼線程處于運(yùn)行狀態(tài)時(shí),當(dāng)圖像塊熵解碼完成領(lǐng)先數(shù)量等于預(yù)定的最大值時(shí),熵解碼線程暫停;
[0092](2)熵解碼線程處于暫停狀態(tài)時(shí),并且圖像塊熵解碼完成領(lǐng)先數(shù)量小于預(yù)定最大值的預(yù)定百分比(例如小于預(yù)定最大值的三分之二)時(shí),熵解碼線程重啟;
[0093](3)如果環(huán)狀緩沖區(qū)中可進(jìn)行在后解碼操作的圖像塊的數(shù)量A大于等于2,且當(dāng)前計(jì)算資源的使用率C不大于第一預(yù)定閾值(例如,不大于90%),則增加一個(gè)塊解碼線程;
[0094]此時(shí)表示現(xiàn)在有新的無人認(rèn)領(lǐng)的圖像塊需要解碼,且計(jì)算資源有富余,因此可以再增加一個(gè)塊解碼線程。具體而言,對幀內(nèi)圖像而言,每次解碼線程完成一個(gè)圖像塊解碼后,一般會使得一個(gè)新的圖像塊成為可解碼塊,所以A值此時(shí)必然為I,當(dāng)A值為2時(shí),表示有一個(gè)新的塊可以解碼。對于幀間圖像而言,由于一般沒有本幀的依賴關(guān)系,所以不會直接導(dǎo)致新的可解碼塊,此時(shí)A值為2表示有2個(gè)獨(dú)立的圖像塊可以解碼了,因此也可以增加新線程。
[0095](4)如果當(dāng)前的并行的塊解碼線程的數(shù)量D大于1、當(dāng)前計(jì)算資源的使用率C大于第二預(yù)定閾值(例如大于95%)、圖像塊熵解碼完成領(lǐng)先數(shù)量B小于預(yù)定的最大值,則減少一個(gè)塊解碼線程,例如將當(dāng)前塊的塊解碼線程暫停。
[0096]圖4所示的解碼主線程可以負(fù)責(zé)啟動(dòng)熵解碼線程和第一個(gè)塊解碼線程,利用并行解碼調(diào)度器對熵解碼線程和塊解碼線程進(jìn)行控制和調(diào)節(jié),協(xié)調(diào)各線程的工作,并搜集所有解碼線程的輸出結(jié)果,形成解碼圖像。
[0097]下面給出典型并行解碼過程舉例。
[0098]本例以一個(gè)三幀圖像的并行解碼過程為例介紹并行解碼中的一些典型過程和狀態(tài),每幀圖像由6x4共24個(gè)圖像塊組成,下面圖中白色表示圖像塊尚未進(jìn)行任何解碼,黃色表示已完成熵解碼,藍(lán)色表示該圖像塊處于可塊解碼狀態(tài),綠色表示塊解碼完成。環(huán)狀緩沖區(qū)大小為6,B值的預(yù)定最大值為6。
[0099]圖5A到5Y說明對幀內(nèi)圖像和幀間圖像的圖像塊進(jìn)行解碼的解碼過程的一系列示意圖。
[0100]I)如圖5A所示,初始時(shí),所有的圖像塊均未進(jìn)行任何解碼,全部為白色。此時(shí)環(huán)狀緩沖區(qū)為空。
[0101]環(huán)狀緩沖區(qū):空
[0102]環(huán)狀緩沖區(qū)中可解碼圖像塊數(shù)量(A值):0
[0103]圖像塊熵解碼完成領(lǐng)先數(shù)量(B值):0
[0104]當(dāng)前計(jì)算資源的使用率(C值):10%
[0105]塊解碼線程數(shù)量(D值):I
[0106]熵解碼線程解碼到達(dá)的位置:O
[0107]1#塊解碼線程解碼過的圖像塊和達(dá)到的位置:空
[0108]2)在圖5B中,熵解碼線程完成第一個(gè)圖像塊的熵解碼,將該圖像塊的相關(guān)數(shù)據(jù)放入環(huán)狀緩沖區(qū)。
[0109]環(huán)狀緩沖區(qū):I
[0110]環(huán)狀緩沖區(qū)中可解碼圖像塊數(shù)量(A值):1
[0111]圖像塊熵解碼完成領(lǐng)先數(shù)量(B值):I
[0112]當(dāng)前計(jì)算資源的使用率(C值):40%
[0113]塊解碼線程數(shù)量(D值):1
[0114]熵解碼線程解碼到達(dá)的位置:1
[0115]1#塊解碼線程解碼過的圖像塊和達(dá)到的位置:空
[0116]3)圖5C中,熵解碼線程判定I號圖像塊沒有依賴關(guān)系,是可以解碼的,將I號圖像塊對應(yīng)的環(huán)狀緩沖區(qū)數(shù)據(jù)塊可解碼標(biāo)志設(shè)置為“可解碼”。
[0117]環(huán)狀緩沖區(qū):I
[0118]環(huán)狀緩沖區(qū)中可解碼圖像塊數(shù)量(A值):1
[0119]圖像塊熵解碼完成領(lǐng)先數(shù)量(B值):I
[0120]當(dāng)前計(jì)算資源的使用率(C值):40%
[0121 ] 塊解碼線程數(shù)量(D值):I
[0122]熵解碼線程解碼到達(dá)的位置:1
[0123]1#塊解碼線程解碼過的圖像塊和達(dá)到的位置:1
[0124]4)圖5D中,熵解碼線程繼續(xù)向前解碼,將2、3兩個(gè)圖像塊的熵解碼也完成了,加入環(huán)狀緩沖區(qū)。與此同時(shí),塊解碼線程也完成了I號圖像塊的解碼,將其從環(huán)狀緩沖區(qū)中刪除,2號圖像塊成為可解碼。
[0125]環(huán)狀緩沖區(qū):2、3
[0126]環(huán)狀緩沖區(qū)中可解碼圖像塊數(shù)量(A值):I
[0127]圖像塊熵解碼完成領(lǐng)先數(shù)量(B值):2
[0128]當(dāng)前計(jì)算資源的使用率(C值):60%
[0129]塊解碼線程數(shù)量(D值):I
[0130]熵解碼線程解碼到達(dá)的位置:3
[0131]1#塊解碼線程解碼過的圖像塊和達(dá)到的位置:1、2
[0132]5)圖5E中,熵解碼線程繼續(xù)向前解碼,將4、5、6三個(gè)圖像塊的熵解碼也完成了,加入環(huán)狀緩沖區(qū)。與此同時(shí),塊解碼線程也完成了2號圖像塊的解碼,將其從環(huán)狀緩沖區(qū)中刪除,3號圖像塊成為可解碼。
[0133]環(huán)狀緩沖區(qū):3、4、5、6
[0134]環(huán)狀緩沖區(qū)中可解碼圖像塊數(shù)量(A值):1
[0135]圖像塊熵解碼完成領(lǐng)先數(shù)量(B值):4
[0136]當(dāng)前計(jì)算資源的使用率(C值):60%
[0137]塊解碼線程數(shù)量(D值):I
[0138]熵解碼線程解碼到達(dá)的位置:6
[0139]1#塊解碼線程解碼過的圖像塊和達(dá)到的位置:1、2、3
[0140]6)圖5F中,熵解碼線程繼續(xù)向前解碼,將7、8兩個(gè)圖像塊的熵解碼也完成了,加入環(huán)狀緩沖區(qū)。熵解碼線程也希望解出更多的塊,但是受到B值不能大于6的限制,暫停了熵解碼線程。與此同時(shí),在7號塊熵解碼完成時(shí),由于依賴關(guān)系滿足,7號塊成為可解碼塊,并且生成一個(gè)新的2#塊解碼線程負(fù)責(zé)解碼7號塊。然后,塊解碼線程也完成了 3號圖像塊的解碼,將其從環(huán)狀緩沖區(qū)中刪除,同時(shí)4號圖像塊成為可解碼。此時(shí)B值回到5,但仍然大于4,熵解碼線程依然暫停。
[0141]環(huán)狀緩沖區(qū):4、5、6、7、8
[0142]環(huán)狀緩沖區(qū)中可解碼圖像塊數(shù)量(A值):2
[0143]圖像塊熵解碼完成領(lǐng)先數(shù)量(B值):5
[0144]當(dāng)前計(jì)算資源的使用率(C值):75%
[0145]塊解碼線程數(shù)量(D值):2
[0146]熵解碼線程解碼到達(dá)的位置:8
[0147]1#塊解碼線程解碼過的圖像塊和達(dá)到的位置:1、2、3、4
[0148]2#塊解碼線程解碼過的圖像塊和達(dá)到的位置:7
[0149]7)圖5G中,熵解碼處于暫停狀態(tài)。與此同時(shí),2#塊解碼線程也完成了 7號圖像塊的解碼,將其從環(huán)狀緩沖區(qū)中刪除,8號塊成為新的可解碼塊,由2#塊解碼線程負(fù)責(zé)解碼。此時(shí)B值回到4,熵解碼線程被重新調(diào)度啟動(dòng),并逐步完成9、10、11號塊的熵解碼后繼續(xù)暫停。由于4號圖像塊比較復(fù)雜,解碼時(shí)間較長,1#塊解碼線程較晚完成了 4號圖像塊的解碼,并將5號塊變?yōu)樾碌目山獯a塊,由1#塊解碼線程負(fù)責(zé)。
[0150]環(huán)狀緩沖區(qū):5、6、8、9、10、11
[0151]環(huán)狀緩沖區(qū)中可解碼圖像塊數(shù)量(A值):2
[0152]圖像塊熵解碼完成領(lǐng)先數(shù)量(B值):6
[0153]當(dāng)前計(jì)算資源的使用率(C值):76%
[0154]塊解碼線程數(shù)量(D值):2
[0155]熵解碼線程解碼到達(dá)的位置:11
[0156]I#塊解碼線程解碼過的圖像塊和達(dá)到的位置:1、2、3、4、5
[0157]2#塊解碼線程解碼過的圖像塊和達(dá)到的位置:7、8
[0158]8)圖5H中,1#塊解碼線程完成5號塊的塊解碼,2#塊解碼線程也完成了 8號塊的塊解碼,將其從環(huán)狀緩沖區(qū)中刪除,6、9號塊成為新的可解碼塊。此時(shí)B值回到4,熵解碼線程繼續(xù)向前解碼,將12、13相繼解碼完成加入環(huán)狀緩沖區(qū)。當(dāng)13號塊完成熵解碼后,由于依賴關(guān)系滿足,也成為新的可解碼塊,此時(shí)由于C值沒有超過80%,系統(tǒng)生成一個(gè)新的3#解碼線程負(fù)責(zé)解碼13號塊。
[0159]環(huán)狀緩沖區(qū):6、9、10、11、12、13
[0160]環(huán)狀緩沖區(qū)中可解碼圖像塊數(shù)量(A值):3[0161 ]圖像塊熵解碼完成領(lǐng)先數(shù)量(B值):6
[0162]當(dāng)前計(jì)算資源的使用率(C值):92%
[0163]塊解碼線程數(shù)量(D值):3
[0164]熵解碼線程解碼到達(dá)的位置:13
[0165]1#塊解碼線程解碼過的圖像塊和達(dá)到的位置:1、2、3、4、5、6
[0166]2#塊解碼線程解碼過的圖像塊和達(dá)到的位置:7、8、9
[0167]3#塊解碼線程解碼過的圖像塊和達(dá)到的位置:13
[0168]9)圖51中,各線程繼續(xù)執(zhí)行各自的工作。
[0169]環(huán)狀緩沖區(qū):10、11、12、14、15
[0170]環(huán)狀緩沖區(qū)中可解碼圖像塊數(shù)量(A值):2[0171 ]圖像塊熵解碼完成領(lǐng)先數(shù)量(B值):5
[0172]當(dāng)前計(jì)算資源的使用率(C值):80%
[0173]塊解碼線程數(shù)量(D值):2
[0174]熵解碼線程解碼到達(dá)的位置:15
[0175]1#塊解碼線程解碼過的圖像塊和達(dá)到的位置:1、2、3、4、5、6
[0176]2#塊解碼線程解碼過的圖像塊和達(dá)到的位置:7、8、9、1
[0177]3#塊解碼線程解碼過的圖像塊和達(dá)到的位置:13、14
[0178]1)圖5 J中,各線程繼續(xù)執(zhí)行各自的工作。
[0179]環(huán)狀緩沖區(qū):11、