关于SAO的原理和流程的解析,已经在我转载的一篇博客HEVC中SAO--自适应样点补偿 详细分析解读有了比较清楚的介绍了,本文就不再重复这个过程,而把主要精力放在具体函数实现的解析上。在我自己的一篇博客HEVC学习(八) —— 以SAO为例浅析跟踪代码方法里其实也作了相关的铺垫了,当中重点放在跟踪代码的方法上,本文在此基础上对重要的函数进行解析,它们的调用位置这里就不提了,有关这部分的内容请参考前述的两篇博客。
本文首先介绍
m_cEncSAO.create( getSourceWidth(), getSourceHeight(), g_uiMaxCUWidth, g_uiMaxCUHeight, _uiMaxCUDepth );
该函数为SAO的相关参数分配内存和初始化。
/** create SampleAdaptiveOffset memory.
* \param
*/
Void TComSampleAdaptiveOffset::create( UInt uiSourceWidth, UInt uiSourceHeight, UInt uiMaxCUWidth, UInt uiMaxCUHeight, UInt uiMaxCUDepth)
{
m_iPicWidth = uiSourceWidth;
m_iPicHeight = uiSourceHeight;
m_uiMaxCUWidth = uiMaxCUWidth;
m_uiMaxCUHeight = uiMaxCUHeight;
m_iNumCuInWidth = m_iPicWidth / m_uiMaxCUWidth;
m_iNumCuInWidth += ( m_iPicWidth % m_uiMaxCUWidth ) ? 1 : 0;
m_iNumCuInHeight = m_iPicHeight / m_uiMaxCUHeight;
m_iNumCuInHeight += ( m_iPicHeight % m_uiMaxCUHeight ) ? 1 :