HEVC學習(十四) SAO函式解析之二

2021-06-11 19:12:18 字數 3325 閱讀 6339

/** rate distortion optimization of all sao units

* \param saoparam sao parameters

* \param lambda

* \param lambdachroma

*/#if sao_encoding_choice

void tencsampleadaptiveoffset::rdosaounitall(saoparam *saoparam, double lambda, double lambdachroma, int depth)

#else

void tencsampleadaptiveoffset::rdosaounitall(saoparam *saoparam, double lambda, double lambdachroma)

#endif

if( depth > 0 && m_depthsaorate[1][depth-1] > sao_encoding_rate_chroma )

#else

int numnosao = 0;

if( depth > 0 && m_depth0saorate > sao_encoding_rate )

#endif

#endif

//!< 以lcu為單位對影象中的每個lcu進行遍歷

for (idxy = 0; idxy< frameheightincu; idxy++)

}else

if (idxy!=0) //!< 非第1行

}else

compdistortion[0] = 0; //!< y distortion

compdistortion[1] = 0; //!< cb distortion

compdistortion[2] = 0; //!< cr distortion

m_pcrdgoonsbaccoder->load(m_pppcrdsbaccoder[0][ci_curr_best]);

if (allowmergeleft)

if (allowmergeup)

m_pcrdgoonsbaccoder->store( m_pppcrdsbaccoder[0][ci_temp_best] );

// reset stats y, cb, cr

for ( compidx=0;compidx<3;compidx++)

}//!< y分量最佳濾波模式的選擇

saocomponentparamdist(allowmergeleft, allowmergeup, saoparam, addr, addrup, addrleft, 0, lambda, &mergesaoparam[0][0], &compdistortion[0]);

//!< cbcr分量最佳濾波模式的選擇

sao2chromaparamdist(allowmergeleft, allowmergeup, saoparam, addr, addrup, addrleft, lambdachroma, &mergesaoparam[1][0], &mergesaoparam[2][0], &compdistortion[0]);

if( saoparam->bsaoflag[0] || saoparam->bsaoflag[1] )

if (allowmergeup)

for ( compidx=0;compidx<3;compidx++)

}rate = m_pcentropycoder->getnumberofwrittenbits();

bestcost = compdistortion[0] + (double)rate;

m_pcrdgoonsbaccoder->store(m_pppcrdsbaccoder[0][ci_temp_best]);

// cost of merge

for(int mergeup=0; mergeup<2; ++mergeup)

if ( allowmergeup && (mergeup==1) )

rate = m_pcentropycoder->getnumberofwrittenbits();

mergecost = compdistortion[mergeup+1] + (double)rate;

if (mergecost < bestcost)}}

}}

#if sao_encoding_choice

#if sao_encoding_choice_chroma

if( saoparam->saolcuparam[0][addr].typeidx == -1) //!< y分量不存在sao引數

if( saoparam->saolcuparam[1][addr].typeidx == -1) //!< cbcr分量不存在sao引數

#else

for ( compidx=0;compidx<3;compidx++)

}#endif

#endif

m_pcrdgoonsbaccoder->load(m_pppcrdsbaccoder[0][ci_temp_best]);

m_pcrdgoonsbaccoder->store(m_pppcrdsbaccoder[0][ci_curr_best]);

} //!< if( saoparam->bsaoflag[0] || saoparam->bsaoflag[1] )

} //!< for (idxx = 0; idxx< framewidthincu; idxx++)

} //!< for (idxy = 0; idxy< frameheightincu; idxy++)

#if sao_encoding_choice

#if sao_encoding_choice_chroma

#if sao_encoding_choice_chroma_bf

if( !saoparam->bsaoflag[0])

else

if( !saoparam->bsaoflag[1])

else

#else

m_depthsaorate[0][depth] = numnosao[0]/((double) frameheightincu*framewidthincu);

m_depthsaorate[1][depth] = numnosao[1]/((double) frameheightincu*framewidthincu*2);

#endif

#else

if( depth == 0)

#endif

#endif

}

HEVC學習(十六) SAO函式解析之四

void tencsampleadaptiveoffset saocomponentparamdist int allowmergeleft,int allowmergeup,saoparam saoparam,int addr,int addrup,int addrleft,int ycbcr,d...

PHP學習之十四 建構函式

建構函式是類中的乙個特殊函式,當使用 new 操作符建立乙個類的例項時,建構函式將會自動呼叫。php 3 中,當函式與類同名時,這個函式將成為建構函式。php 4 中,在類裡定義的函式與類同名時,這個函式將成為乙個建構函式 區別很微妙 注意 不管是 php 3 還是 php 4 都不會從派生類的建構...

Swift學習筆記(三十四) 函式型別

1 函式也可以賦值給乙個變數,此時這個變數的型別是什麼呢?import foundation func add a int,b int int let anotheradd int,int int add anotheradd 3,4 2 如果引數的返回值為空,那麼這個函式型別應該怎麼寫呢?impo...