/** 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...