變換 有關的幾個主要函式及重要變數

2021-08-11 06:26:44 字數 3135 閱讀 5343

如何定位到這幾個函式的,方法與前面的一篇部落格hevc學習(八) —— 以sao為例**跟蹤**方法類似,有興趣的朋友可以去看看,這裡就不重複這個過程了。

在xcompresscu函式中,有這麼幾個函式值得我們注意的,xcheckrdcostinter、xcheckrdcostmerge2nx2n、xcheckrdcostintra。它們分別是實現幀間**模式、merge模式、幀內**式的主函式。前兩個函式的子函式xestimateresidualqt(實際上通過呼叫函式encoderesandcalcrdintercu)、第三個函式的子函式xrecurintracodingqt(實際上通過呼叫xintracodinglumablk、xintracodingchromablk)均會呼叫函式transformnxn,該函式如下定義:

void tcomtrquant::transformnxn( tcomdatacu* pccu,  

pel* pcresidual,

uint uistride,

tcoeff* rpccoeff,

#if adaptive_qp_selection

int*& rpcarlcoeff,

#endif

uint uiwidth,

uint uiheight,

uint& uiabssum,

texttype ettype,

uint uiabspartidx,

bool usetransformskip

) else

uiabssum = 0;

assert( (pccu->getslice()->getsps()->getmaxtrsize() >= uiwidth) );

if(usetransformskip)

else

xquant( pccu, m_pltempcoeff, rpccoeff,

#if adaptive_qp_selection

rpcarlcoeff,

#endif

uiwidth, uiheight, uiabssum, ettype, uiabspartidx );

這個函式主要呼叫了xtransformskip、xt、xquant三個函式,分別實現對殘差進行ts(transform skip)模式、普通變換模式以及量化的功能。對於第二個函式xt來說,它呼叫了xtrnxn,該函式的實現如下所示:

/** mxn forward transform (2d) 

* \param block input data (residual)

* \param coeff output data (transform coefficients)

* \param iwidth input data (width of transform)

* \param iheight input data (height of transform)

*/

void xtrmxn(short *block,short *coeff, int iwidth, int iheight, uint uimode)

else if( iwidth == 32 && iheight == 8 )

else if( iwidth == 4 && iheight == 16)

else if( iwidth == 8 && iheight == 32 )

else

#endif

if( iwidth == 4 && iheight == 4)

else

#else

if (uimode != reg_dct && (!uimode || (uimode>=2 && uimode <= 25))) // check for dct or dst

else

if (uimode != reg_dct && (!uimode || (uimode>=11 && uimode <= 34))) // check for dct or dst

else

#endif

} else if( iwidth == 8 && iheight == 8)

else if( iwidth == 16 && iheight == 16)

else if( iwidth == 32 && iheight == 32)

}

到了這裡,相信大家光看名字也能看出這些**是做什麼事情的了,對幀內**模式的4x4塊進行dst變換,其餘的根據塊大小分別做蝶形快速變換(4x4,8x8,16x16,32x32),不同尺寸的變換矩陣在**中如下表示:

const short g_ait4[4][4] =  

, ,

, };

const short g_ait8[8][8] =

, ,

, ,

, ,

, };

const short g_ait16[16][16] =

, ,

, ,

, ,

, ,

, ,

, ,

, ,

, };

const short g_ait32[32][32] =

, ,

, ,

, ,

, ,

, ,

, ,

, ,

, ,

, ,

, ,

, ,

, ,

, ,

, ,

, ,

, };

jQuery應用的幾個主要函式

1.清空元素 empty 內容刪除,但元素還存在 document ready function 2.刪除元素 remove expr 元素和內容都刪除 document ready function 或 document ready function 3.獲得父元素 parent expr 獲得唯...

有關檔案操作的幾個函式

1.creat 1 函式的作用 建立,建立新檔案。2 函式的原型 int creat const char pathname,mode t mode 3 函式的引數 pathname 要建立的檔案路徑字串。如 home hello.c mode 建立檔案的許可權。4 函式的返回值 成功返回檔案描述符...

有關字串的幾個函式

1.strlen 測量字串的長度 include define n 100 int my strlen char str return count int main 2.strcpy 複製字串 include define n 100 char my strcpy char str,char des...