HEVC學習(二十五) 變換係數的編碼之一

2021-06-12 06:32:28 字數 1691 閱讀 2144

本文首先介紹係數掃瞄模式的初始化。

直接給出**及相應的注釋:

// scanning order table

uint* g_auisiglastscan[ 3 ][ max_cu_depth ]; //!< [pattern][depth]

const uint g_siglastscan8x8[ 3 ][ 4 ] =

, //!< right-up diagonal

, //!< horizontal

//!< vertical

};uint g_siglastscancg32x32[ 64 ];

void initsiglastscan(uint* pbuffd, uint* pbuffh, uint* pbuffv, int iwidth, int iheight, int idepth)

for( uint uiscanline = 0; uinextscanpos < uinumscanpos; uiscanline++ )

while( iprimdim >= 0 && is***dim < iwidth ) //!< 設定矩陣中某一條反對角線上(左下到右上)的元素的序號

} }

if( iwidth > 4 )

uint offsety = initblkpos / uinumblkside; //!< 當前4x4塊垂直方向的偏移量

uint offsetx = initblkpos - offsety * uinumblkside; //!< 當前4x4塊水平方向的偏移量

uint offsetd = 4 * ( offsetx + offsety * iwidth ); //!< 當前4x4塊第乙個位置序號

uint offsetscan = 16 * uiblk; //!< 每乙個4x4塊包含了16個畫素(即係數),用於給出當前4x4塊第乙個位置相對於第1個4x4塊第乙個位置的偏移量

for( uint uiscanline = 0; uinextscanpos < 16; uiscanline++ ) //!< 對每個4x4塊進行掃瞄順序的確定

while( iprimdim >= 0 && is***dim < 4 ) //!< 設定矩陣中某一條反對角線上(左下到右上)的元素的序號 }}

} uint uicnt = 0;

if( iwidth > 2 )}}

}//!< 垂直掃瞄模式

uicnt = 0;

for(int blkx=0; blkx < numblkside; blkx++) //!< 以4x4塊為單元,列優先

}} //!< for(int blky=0; blky < numblkside; blky++)

} //!< for(int blkx=0; blkx < numblkside; blkx++)

} //!< if( iwidth > 2 )

else //!< if( iwidth <= 2 )

}//!< vertical scan pattern

uicnt = 0;

for(int ix=0; ix < iwidth; ix++)

}

} //!< else //!< if( iwidth <= 2 )

}

C 學習(二十五)記憶體洩漏的幾種方式

檢測記憶體洩漏的關鍵是要能截獲住對分配記憶體和釋放記憶體的函式的呼叫。截獲住這兩個函式,我們就能跟蹤每一塊記憶體的生命週期,比如,每當成功的分配一塊記憶體後,就把它的指標加入乙個全域性的list中 每當釋放一塊記憶體,再把它的指標從list中刪除。這樣,當程式結束的時候,list中剩餘的指標就是指向...

C 學習筆記 二十五 指向類的指標

乙個指向 c 類的指標與指向結構的指標類似,訪問指向類的指標的成員,需要使用成員訪問運算子 就像訪問指向結構的指標一樣。與所有的指標一樣,您必須在使用指標之前,對指標進行初始化。include using namespace std class boxdouble volume private do...

Linux學習筆記(二十五 VI編輯器的操作模式)

vim abc 開啟名為abc的檔案,並將游標定位到首行,如果無該檔案則建立該檔案 vim abc 開啟名為abc的檔案,並將游標定位到尾行 vim 3 abc 將游標定位到第三行,如果該數字大於行數,則定位到末行 vim abc 將游標定位到 第一次出現的那一行,並且按n鍵可在 多次出現的地方切換...