hevc中cu有64x64,32x32,16x16,8x8四種,對於乙個大的lcu,應該如何劃分cu才能使得rdco最小,我們知道hm中是採用遍歷遞迴的形式進行計算的,但是具體的流程又是怎麼樣的?
1,首先對於乙個大的lcu即64x64的塊,我們首先把他當作乙個cu,計算出這個cu最佳的**模式,並記錄當前劃分模式下的最佳**資料。
2,然後我們對當前lcu進行劃分,劃分成4個32x32的cu,首先我們做的是對4個32x32的cu進行迴圈,但是對於每乙個迴圈又有向下的遞迴,即,我們先計算第乙個32x32 所對應的最佳**模式,並記錄**資料,然後對第乙個進行向下遞迴。
3,類似的,首先計算32x32向下遞迴的16x16cu所對應的最佳**模式並記錄其所對應的資料,然後上層還是對16x16的cu進行迴圈,下層又是對16x16的cu進行遞迴。
4,類似,首先我們計算8x8所對應的最佳**模式並記錄其所對應的**資料,由於8x8已經達到最深的cu劃分深度,所以這裡我們我們只是迴圈計算各個8x8所對應的最佳** 模式,並記錄其資料。
5,待8x8的完成以後,我們拿四個8x8的rdcost的總和和第乙個16x16整個劃分所對應的rdcost比較,以此來決定是選擇8x8劃分還是選擇16x16劃分。
6,待第乙個16x16完成以後,我們再重複3,4,5的步驟,決定第二個16x16的cu怎麼劃分,即是選擇16x16劃分還是4個8x8劃分;然後是第3個16x16,第4個16x16.
7,待16x16完成以後,我們就把4個16x16的rrdcost總和乙個32x32作比較,以此來決定是選擇32x32劃分,還是已經向下劃分好的16x16以及16x16向下的劃分。
8,待第乙個32x32完成以後,我們再重複2,3,4,5的步驟,決定第2,3,4個32x32的劃分模式。
9,等到4個32x32全部計算完成之後,我們再比較32x32cu劃分的rdcost的總和和乙個64x64cu的rdcost,然後是決定選擇64x64還是32x32以及其向下的劃分。
整個過程就是hm中cu劃分的遞迴過程,從這個過程可以看出,由於是從64x64一直向下劃分到8x8,我們必須等劃分到8x8才能決定cu的劃分到底是什麼樣的,即是選擇8x8還是16x16,待16x16完成以後,就選擇16x16還是32x32,待32x32完成以後,就決定是32x32還是64x64。所以只有8x8cu劃分完畢才能做後續cu劃分的決定。
這裡值得提出的是不管cu的大小多大,每乙個cu**完成(即確定了當前劃分層次的**模式)之後,都會有物件的物件來儲存和當前cu所有有關的**資料(最佳**模式,**資料,**殘差),儲存這些資料的物件就是當前cu上一級的cu資料物件rpctempcu,這些操作都是在函式rpctempcu->cptypartfrom下完成的,程式如下圖所示,其中uipartunitidx就是表示當前cu是上一級cu劃分的第幾個,因為上一級cu分下來是4個當前大小的cu,所以資料的儲存肯定也要按照cu對應的位置儲存。
HEVC學習(十二) CU的最終劃分
相信會有不少人對如何確定cu最終的劃分有所困惑 包括我在內,剛開始接觸時也不知道該怎麼做 我覺得很大的乙個原因就是cu是遞迴劃分的,這就導致在尋找確定最佳分割位置時比較困難。其實,解決問題的辦法說難也不難,關鍵在於思路的轉換,既然對於xcompresscu中是如何儲存劃分模式的覺得難以理解,何不跳出...
CU的最終劃分
相信會有不少人對如何確定cu最終的劃分有所困惑 包括我在內,剛開始接觸時也不知道該怎麼做 我覺得很大的乙個原因就是cu是遞迴劃分的,這就導致在尋找確定最佳分割位置時比較困難。其實,解決問題的辦法說難也不難,關鍵在於思路的轉換,既然對於xcompresscu中是如何儲存劃分模式的覺得難以理解,何不跳出...
過載函式的過載確定過程
最近在找工作的過程中,發現很多平時沒有注意的問題,反省之後,決定好好把基礎知識過一過。過載函式的定義 出現在相同作用域中的兩個函式,如果具有相同的名字而形參表不同,則稱為過載函式。這裡有兩個地方需要注意 同乙個作用域,形參表不同。形參表不同的意思就是形參個數不同,或者引數型別不同。過載確定分三步 1...