【HEVC学习与研究】46、HEVC参考代码中SAO的实现

简介: 1、HM10 encoder关于SAO的初始化操作 在编码开始之前,编码器将进行与SAO有关的一些初始化设置。如在TAppEncTop::encode()函数中调用TAppEncTop::xInitLibCfg()进行与config相关的设置: m_cTEncTop.

1、HM10 encoder关于SAO的初始化操作

在编码开始之前,编码器将进行与SAO有关的一些初始化设置。如在TAppEncTop::encode()函数中调用TAppEncTop::xInitLibCfg()进行与config相关的设置:

  m_cTEncTop.setLFCrossSliceBoundaryFlag( m_bLFCrossSliceBoundaryFlag );//parseCfg时设置,指定loop filter是否能跨越slice边界,默认为false
  m_cTEncTop.setUseSAO ( m_bUseSAO );//parseCfg时设置,指定SAO功能是否开启,由cfg文件指定
  m_cTEncTop.setMaxNumOffsetsPerPic (m_maxNumOffsetsPerPic);//每一个像素最大允许的偏移量,默认为2048

  m_cTEncTop.setSaoLcuBoundary (m_saoLcuBoundary);//是否使用非deblocked像素做SAO参数估计
  m_cTEncTop.setSaoLcuBasedOptimization (m_saoLcuBasedOptimization);//选择基于picture还是CTU的估计,默认选择CTU

在TEncTop::create ()中,会依据前面配置的结果进行初始化操作:

  if (m_bUseSAO)
  {
    m_cEncSAO.setSaoLcuBoundary(getSaoLcuBoundary());
    m_cEncSAO.setSaoLcuBasedOptimization(getSaoLcuBasedOptimization());
    m_cEncSAO.setMaxNumOffsetsPerPic(getMaxNumOffsetsPerPic());
    m_cEncSAO.create( getSourceWidth(), getSourceHeight(), g_uiMaxCUWidth, g_uiMaxCUHeight );
    m_cEncSAO.createEncBuffer();
  }


前面三个函数分别实现对m_cEncSAO私有数据成员的赋值,后两个函数主要为编码器分配内存以及其他一些初始化操作。随后,在TEncGOP::init中获取SAO滤波器对象的指针:

Void TEncGOP::init ( TEncTop* pcTEncTop )
{//......
  //--Adaptive Loop filter
  m_pcSAO                = pcTEncTop->getSAO();
  //......
}

2、实际进行SAO滤波操作

在TEncGOP::compressGOP函数中调用SAOProcess实现:

Void TEncSampleAdaptiveOffset::SAOProcess(SAOParam *pcSaoParam, Double dLambda)
#endif
{
  m_dLambdaLuma    = dLambdaLuma;
  m_dLambdaChroma  = dLambdaChroma;

  if(m_bUseNIF)
  {
    m_pcPic->getPicYuvRec()->copyToPic(m_pcYuvTmp);
  }

  m_uiSaoBitIncreaseY = max(g_bitDepthY - 10, 0);
  m_uiSaoBitIncreaseC = max(g_bitDepthC - 10, 0);
  m_iOffsetThY = 1 << min(g_bitDepthY - 5, 5);
  m_iOffsetThC = 1 << min(g_bitDepthC - 5, 5);
  resetSAOParam(pcSaoParam);
  if( !m_saoLcuBasedOptimization || !m_saoLcuBoundary )
  {
    resetStats();
  }
  Double dCostFinal = 0;
  if ( m_saoLcuBasedOptimization)
  {
    rdoSaoUnitAll(pcSaoParam, dLambdaLuma, dLambdaChroma, depth);
  }
  else
  {
    pcSaoParam->bSaoFlag[0] = 1;
    pcSaoParam->bSaoFlag[1] = 0;
    dCostFinal = 0;
    Double lambdaRdo =  dLambdaLuma;
    resetStats();
    getSaoStats(pcSaoParam->psSaoPart[0], 0);
    runQuadTreeDecision(pcSaoParam->psSaoPart[0], 0, dCostFinal, m_uiMaxSplitLevel, lambdaRdo, 0);
    pcSaoParam->bSaoFlag[0] = dCostFinal < 0 ? 1:0;
    if(pcSaoParam->bSaoFlag[0])
    {
      convertQT2SaoUnit(pcSaoParam, 0, 0);
      assignSaoUnitSyntax(pcSaoParam->saoLcuParam[0],  pcSaoParam->psSaoPart[0], pcSaoParam->oneUnitFlag[0], 0);
    }
  }
  if (pcSaoParam->bSaoFlag[0])
  {
    processSaoUnitAll( pcSaoParam->saoLcuParam[0], pcSaoParam->oneUnitFlag[0], 0);
  }
  if (pcSaoParam->bSaoFlag[1])
  {
    processSaoUnitAll( pcSaoParam->saoLcuParam[1], pcSaoParam->oneUnitFlag[1], 1);
    processSaoUnitAll( pcSaoParam->saoLcuParam[2], pcSaoParam->oneUnitFlag[2], 2);
  }
}

具体的实现原理下篇继续研究

目录
相关文章
|
8月前
|
Web App开发 存储 编解码
视频压缩标准的介绍以及视频压缩标准H.26x各个版本的介绍
视频压缩标准的介绍以及视频压缩标准H.26x各个版本的介绍
382 0
|
机器学习/深度学习 存储 编解码
超越最新视频压缩标准H.266,字节跳动编码新技术让视频缩小13%
联合视频专家组 JVET 官网显示,字节跳动设立在美国的研发团队于今年初发起了一项视频压缩技术提案,并命名为 DAM(Deep-filtering with Adaptive Model-selection)。相比 H.266/VVC 最新标准,DAM 能够为视频编码性能带来显著提升,亮度信号 Y 可实现 10.28% 的性能增益。两个色度信号 U 和 V 的性能增益也分别达到 28.22% 和 27.97%。这是业界公开的单个智能编码工具的最佳性能增益。
744 0
超越最新视频压缩标准H.266,字节跳动编码新技术让视频缩小13%
|
编解码 流计算
研究音频编解码要看什么书
前言。。。。。。 最近总是有人问研究音频编解码要看什么书 其实这是一个很难回答的问题,原因有很多。 首先,做工程首先一个问题就是和课本学习不同,不是看书能解决的。 其次,音频编解码技术在国内研究的人很少包括总体的音频技术国内相对国外都研究的不多。
2133 0
|
编解码
【H.264/AVC视频编解码技术详解】十四、H.264的变换编码(一)——矩阵运算与正交变换基本概念
《H.264/AVC视频编解码技术详解》视频教程已经在“CSDN学院”上线,视频中详述了H.264的背景、标准协议和实现,并通过一个实战工程的形式对H.
1476 0
|
编解码 算法 索引
【H.264/AVC视频编解码技术详解】十三、熵编码算法(4):H.264使用CAVLC解析宏块的残差数据
《H.264/AVC视频编解码技术详解》视频教程已经在“CSDN学院”上线,视频中详述了H.264的背景、标准协议和实现,并通过一个实战工程的形式对H.
1747 0
|
编解码 算法
【H.264/AVC视频编解码技术详解】十三、熵编码算法(3):CAVLC原理
《H.264/AVC视频编解码技术详解》视频教程已经在“CSDN学院”上线,视频中详述了H.264的背景、标准协议和实现,并通过一个实战工程的形式对H.
1578 0
|
编解码
【H.264/AVC视频编解码技术详解】十二、解析H.264码流的宏块结构(下):H.264帧内编码宏块的预测结构
《H.264/AVC视频编解码技术详解》视频教程已经在“CSDN学院”上线,视频中详述了H.264的背景、标准协议和实现,并通过一个实战工程的形式对H.
1592 0