一種針對專用視頻解碼單元的低功耗解碼器實現(xiàn)方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及視頻解碼功耗優(yōu)化技術(shù),尤其是一種針對專用硬件視頻解碼單元解碼 過程的功耗優(yōu)化技術(shù)。
【背景技術(shù)】
[0002] 視頻解碼一個重要的特點是其計算復(fù)雜度高,而且計算過程需要密集的數(shù)據(jù)存 取,很大程度上增加了系統(tǒng)的計算負(fù)載和能量消耗。然而不同的視頻有不同的碼率,不同的 尺寸,不同的幀類型序列和編碼格式,同一視頻不同的幀也有不同的類型和宏塊編碼方式, 因而導(dǎo)致實際解碼功耗各不相同。如果能夠根據(jù)視頻解碼的特點預(yù)測每一幀的解碼時間, 并據(jù)此動態(tài)設(shè)置解碼單元工作頻率和電壓,在保證每一幀的解碼時間恰好滿足播放的實時 需求前提下,使解碼單元能夠盡可能地在較低的主頻和電壓下工作,就可以降低視頻解碼 功耗。
[0003] 目前以幀為單位實現(xiàn)的解碼復(fù)雜度預(yù)測算法大都基于幀長和幀類型兩種信息預(yù) 測解碼復(fù)雜度。在使用CPU做軟件視頻解碼操作的情況下視頻的幀長和解碼時間存在較為 明顯的線形關(guān)系,易于使用幀長作為解碼復(fù)雜度的預(yù)測參考。而在使用專用視頻解碼單元 以幀為單位做硬件解碼時,由于視頻專用解碼單元內(nèi)部設(shè)計使用了諸如流水線并行處理, 內(nèi)部解碼數(shù)據(jù)緩存,解碼指令重排序等解碼優(yōu)化設(shè)計,使得使用專用硬件解碼單元做視頻 解碼的情況下視頻的幀長和解碼時間并不存在明顯的線形關(guān)系。因而不能依據(jù)幀長信息預(yù) 測硬件解碼單元的解碼時間復(fù)雜度。
[0004] 雖然使用專用硬件解碼單元做視頻解碼每幀數(shù)據(jù)和幀長并不存在明顯的線性關(guān) 系,但是對于同種類型的幀,解碼每一幀數(shù)據(jù)的時間比較接近,均維持在一個中心值范圍內(nèi) 上下波動,考慮對不同類型的幀進(jìn)行分類,分別計算其解碼時間平均值,作為對該類型幀的 預(yù)測值,可以準(zhǔn)確預(yù)測每一幀數(shù)據(jù)解碼時間復(fù)雜度。
【發(fā)明內(nèi)容】
[0005] 本發(fā)明要解決的技術(shù)問題是:提出一種針對專用視頻解碼單元的低功耗解碼器實 現(xiàn)方法。
[0006] 本發(fā)明所采用的技術(shù)方案為:一種針對專用視頻解碼單元的低功耗解碼器實現(xiàn)方 法,步驟分為:
[0007] A、應(yīng)用程序?qū)雍筒僮飨到y(tǒng)內(nèi)核層兩部分實現(xiàn);應(yīng)用程序?qū)痈鶕?jù)解碼復(fù)雜度預(yù)測算 法得到預(yù)測解碼時間,填取一幀數(shù)據(jù)到硬件解碼單元,調(diào)用操作系統(tǒng)內(nèi)核層提供支持的電 壓頻率調(diào)節(jié)接口,動態(tài)調(diào)節(jié)電壓和頻率后解碼,解碼完成后更新預(yù)測參數(shù)。
[0008] 通過碼流解析得到幀類型和幀長度信息,每次填取一幀長度的碼流到專用視頻解 碼單元,而預(yù)測解碼時間復(fù)雜度僅根據(jù)幀類型信息分類,不使用幀長信息做參考。
[0009] B、解碼復(fù)雜度預(yù)測算法基于幀類型分類,定義一個最大窗口值winSize,并維護(hù)三 個尺寸為winSize的Buffer ;每個buffer分別用于存儲I、P、和B類幀的最近winSize幀 的解碼時間,維護(hù)三個記錄最優(yōu)預(yù)測窗口尺寸的變量optWinSize分別記錄其最優(yōu)預(yù)測窗 口大??;初始值均為1。
[0010] C、將視頻幀類型分為I、P、B三類,從視頻碼流中解析一幀數(shù)據(jù)幀長FrameLen并解 析其幀類型FrameType ;
[0011] 其中,
[0012] Cl、尋找當(dāng)前NAL單元的其實字節(jié)碼為0x000001或0x00000001,記錄此時的位置 為 FrameStart0
[0013] C2、從起始字節(jié)碼開始,解析當(dāng)前NAL單元的類型。判斷為非VCL NAL單元則跳過。 若為VCL NAL單元則分析NAL單元中Slice的類型為FrameType ;
[0014] C3、尋找下一個NAL單元并判斷其類型。若為非VCL NAL單元表明一幀分析 結(jié)束,記錄當(dāng)前NAL單元的其實字節(jié)碼位置為FrameEnd。若為VCL NAL單元,則解析 firstMblnSlice值,若為0,表示其為下一幀數(shù)據(jù)的開始,記錄此時NAL單元其實字節(jié)碼為 FrameEncL若firstMblnSlice不為0,表明當(dāng)前slice與上一個slice為同一幀數(shù)據(jù)的內(nèi) 容,此時按照步驟A3進(jìn)行下一個NAL單元尋找下一個NAL單元。
[0015] C4、FrameEnd與FrameStart的差值即為當(dāng)前數(shù)據(jù)幀的幀長FrameLen。
[0016] D、依據(jù)幀類型FrameType選擇對應(yīng)的Buffer和最優(yōu)窗口尺寸optWindow ;
[0017] 其中,
[0018] D1、若當(dāng)前幀類型FrameType為I,則解碼時間預(yù)測值為
[0022] 其中,
[0023] E1、若當(dāng)前幀類型FrameType為I,則選擇IBuffer和IoptWindow作為復(fù)雜度預(yù)測 的Buffer和最優(yōu)預(yù)測窗口;
[0024] E2、若當(dāng)前幀類型FrameType為P,則選擇PBuffer和PoptWindow作為復(fù)雜度預(yù)測 的Buffer和最優(yōu)預(yù)測窗口;
[0025] E3、若當(dāng)前幀類型FrameType為B,則選擇BBuffer和BoptWindow作為復(fù)雜度預(yù)測 的Buffer和最優(yōu)預(yù)測窗口
[0026] F、根據(jù)該預(yù)測值與當(dāng)前視頻幀顯示時間間隔的關(guān)系調(diào)用操作系統(tǒng)的電壓 頻率調(diào)節(jié)接口動態(tài)設(shè)置頻率和電壓以用于控制解碼。實際電壓和頻率調(diào)節(jié)方案為:
[0027] G、讀取一幀數(shù)據(jù)長度FrameLen內(nèi)容填入硬件解碼單元,記錄解碼開始時間,開始 一幀數(shù)據(jù)解碼;
[0028] H、解碼完成后統(tǒng)計當(dāng)前幀解碼花費時間decTime,依據(jù)幀類型更新相關(guān)預(yù)測 參數(shù)。解碼完成后根據(jù)實際解碼時間decTime更新最優(yōu)窗口尺寸optWindow的值; 根據(jù)該幀的類型,選取對應(yīng)的Buffer和optWindow ;對于0〈 = N〈winSize依次計算 avgN=Z (IBuffer[n])/(N+l),求取 |avgN_decTime| 最小的avgN所對應(yīng)的N值為最 優(yōu)預(yù)測窗口值,作為對下一個該類型幀預(yù)測的窗口尺寸;對于〇〈N〈winSize,Buffer[N]= Buffer[N-l],Buffer[0] = decTime〇
[0029] 其中,
[0030] HI、若當(dāng)前幀為 I 幀,則對任意 0〈 =N〈winSize計算avgN=2n=〇(IBuffer[n]) 這N+1個同類型幀的歷史解碼時間的平均值,選取|avgN-decTime|最小的avgN所對 應(yīng)的 N 為最優(yōu) I 幀窗口 尺寸,即 IoptWinow =Nd 對任意 0〈N〈winSize,IBuffer[N]= IBuffer[N-l]〇IBuffer[0] = decTime〇
[0031] H2、若當(dāng)前幀為 P 幀,則對任意 0< = N〈winSize 計算avgN=2n=()(PBuffer[Il]) 這N+1個同類型幀的歷史解碼時間的平均值,選取|avgN-decTime|最小的avgN所對 應(yīng)的 N 為最優(yōu) P 幀窗 口尺寸,即 PoptWinow =Nd 對任意 0〈N〈winSize,F(xiàn)jBufferIiN]= PBuffer[N-1]〇PBuffer[0] = decTime〇 _M
[0032] H3、若當(dāng)前幀為 B 幀,則對任意 0< = N〈winSize 計算avgN=Zn=()(BBuffer[n]) 這N+1個同類型幀的歷史解碼時間的平均值,選取|avgN-decTime|最小的avgN所對 應(yīng)的N為最優(yōu)B幀窗口尺寸,即BoptWinow = N。對任意0〈N〈winSize,BBuffer[N]= BBufTer[N-l]。 BBufTer[0] = decTime。
[0033] 本發(fā)明的有益效果是:由于本方案考慮了專用視頻解碼單元做硬件解碼的特點, 使得其預(yù)測效果較好;在北大眾志PKUnity86-3系統(tǒng)芯片平臺實現(xiàn)該預(yù)測方案,測試器誤 差為3ms以內(nèi)的預(yù)測準(zhǔn)確度在95 %以上。
【附圖說明】
[0034] 下面結(jié)合附圖和實施例對本發(fā)明進(jìn)一步說明。
[0035] 圖1是本發(fā)明的整體設(shè)計思路圖;
[0036] 圖2是本發(fā)明實現(xiàn)從視頻碼流中提取出幀類型信息流程圖;
[0037] 圖3是本發(fā)明中提取一幀數(shù)據(jù)的長度的流程圖;
[0038] 圖4是本發(fā)明實現(xiàn)依據(jù)幀類型做解碼復(fù)雜度預(yù)測的示意圖。
【具體實施方式】
[0039] 現(xiàn)在結(jié)合附圖和優(yōu)選實施例對本發(fā)明作進(jìn)一步詳細(xì)的說明。這些附圖均為簡化的 示意圖,僅以示意方式說明本發(fā)明的基本結(jié)構(gòu),因此其僅顯示與本發(fā)明有關(guān)的構(gòu)成。
[0040] 本發(fā)明包含三項關(guān)鍵技術(shù),即應(yīng)用程序?qū)雍筒僮飨到y(tǒng)內(nèi)核層分層實現(xiàn)復(fù)雜度預(yù)測 和電壓頻率調(diào)節(jié)、復(fù)雜度預(yù)測方法的計算依