HEVC和JEM中的掃瞄順序

2021-08-14 21:03:45 字數 1040 閱讀 2451

為了更好地理解幀內**中的各個函式的原理過程,有必要對cu、pu位址計算方法有著較好的了解,因此,本文將對這個問題先做個討論。

hevc裡同樣也有光柵掃瞄順序,但是,由於它對cu採用的是遞迴劃分的方式,如果仍是採用光柵掃瞄順序,對cu的定址會很不方便,因此,hevc定義了z掃瞄順序,如下圖所示:

右圖可見,這種掃瞄順序保證了對於不同分割都能按照相同的遍歷順序進行定址,有利於程式中的遞迴實現。

具體到**中,為了處理的方便,並沒有使用上圖這種定義方式,而是以4x4塊為最小單位,對cu進行分割,同時,為了簡化計算,在初始化時定義了幾個位址對映的陣列,g_auirastertozscan, g_auizscantoraster, g_auirastertox, g_auirastertoy。

第乙個是從光柵掃瞄順序轉換為z掃瞄順序,第二個是從z掃瞄順序轉換為光柵掃瞄順序,第

三、第四個則是得到某乙個塊相對於所在pu左上角的橫縱座標,且以畫素為單位。

下面幾張表是我在最大cu為64x64的前提下列印出來的:

上面這些值的含義,這裡就不多解釋了,相信大家自己畫個cu,以4x4塊對其進行分割,再對照上面幾張表琢磨琢磨就清楚了。

值得一提的是,可能會有人有這樣的疑問:影象的解析度不同,它怎麼能夠保證這張表就能用呢?需要指出的是,z掃瞄是針對乙個cu來說的,它是用於遞迴掃瞄cu的分割。定位一幅影象中的乙個cu(或其分割)大致是這麼個過程,首先,由於cu的尺寸的最大值是已知的,會根據這個定位到該cu左上角相對於影象左上角的位置,即得到它的座標,接著,才是對當前塊進行z掃瞄,單位是4x4塊,換句話說,z掃瞄位址是對乙個cu有效的,不能直接使用這個位址來確定它在影象中的位置,這個地方是需要大家注意的

JEM中的SIMD優化

simd是single instruction,multiple data的縮寫 意為單指令多資料,是inter開發的多 指令集,採用c 封裝介面,底層呼叫組合語言,因此執行效率很高。適合重複且可以並行的計算場合。由於編碼器在計算sad操作需要反覆讀寫資料,並且適合並行執行,因此jem在計算sad的...

類的繼承和掃瞄順序

類的掃瞄原則 01先進後遠 02以誰的身份宣告的變數就在誰的掃瞄 向上掃瞄 繼承 子類可以繼承基類的公有成員和受保護的成員不能繼承私有成員,私有成員只能在聲他們的類和結構體中使用.掃瞄情況有 1.以子類身份宣告的變數並用子類物件賦值,先在自己身上掃瞄,如果有並且是用virtual關鍵字修飾的,就向下...

Jvm載入和Spring掃瞄的順序

jvm首先載入classes檔案裡面的類,然後載入jar中的,如果遇到同類的名的類,首先載入classes的.class,然後載入jar包裡面的,如果都在jar裡面,就無法保證載入順序。先是jvm載入在到classloader裡面,然後spring才能掃瞄到。lambda表示式一定是匿名內部類形式。...