分析HM代码,首先必须把class TComDataCU完全搞明白!

原创 2012年11月29日 09:35:24

  

分析HM代码,首先必须把class TComDataCU完全搞明白!

为了找到合适的模式或者合适的分割, 基本上都是采用两个TComDataCU来操作, TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU.

相当于两个指针对应两个乒乓buffer,  m_ppcBestCU[uiDepth], m_ppcTempCU[uiDepth], 当然每一个uiDepth都有一个对应的BestCU和TempCU的buffer.

 

 

class TComDataCU
{
private:
 
  // -------------------------------------------------------
  // class pointers
  // -------------------------------------------------------
  TComPic*      m_pcPic;              ///< picture class pointer
  TComSlice*    m_pcSlice;            ///< slice header pointer
  TComPattern*  m_pcPattern;          ///< neighbour access class pointer
  // -------------------------------------------------------
  // CU description
  // -------------------------------------------------------
  UInt          m_uiCUAddr;           ///< CU address in a slice
  UInt          m_uiAbsIdxInLCU;      ///< absolute address in a CU. It's Z scan order
  UInt          m_uiCUPelX;           ///< CU position in a pixel (X)
  UInt          m_uiCUPelY;           ///< CU position in a pixel (Y)
  UInt          m_uiNumPartition;     ///< total number of minimum partitions in a CU
  UChar*        m_puhWidth;           ///< array of widths
  UChar*        m_puhHeight;          ///< array of heights
  UChar*        m_puhDepth;           ///< array of depths
  Int           m_unitSize;           ///< size of a "minimum partition"
  // -------------------------------------------------------
  // CU data
  // -------------------------------------------------------
  Bool*         m_skipFlag;           ///< array of skip flags
  Char*         m_pePartSize;         ///< array of partition sizes
  Char*         m_pePredMode;         ///< array of prediction modes
  Bool*         m_CUTransquantBypass;   ///< array of cu_transquant_bypass flags
  Char*         m_phQP;               ///< array of QP values
  UChar*        m_puhTrIdx;           ///< array of transform indices
  UChar*        m_puhTransformSkip[3];///< array of transform skipping flags
  UChar*        m_puhCbf[3];          ///< array of coded block flags (CBF)
  TComCUMvField m_acCUMvField[2];     ///< array of motion vectors
  TCoeff*       m_pcTrCoeffY;         ///< transformed coefficient buffer (Y)
  TCoeff*       m_pcTrCoeffCb;        ///< transformed coefficient buffer (Cb)
  TCoeff*       m_pcTrCoeffCr;        ///< transformed coefficient buffer (Cr)
#if ADAPTIVE_QP_SELECTION
  Int*          m_pcArlCoeffY;        ///< ARL coefficient buffer (Y)
  Int*          m_pcArlCoeffCb;       ///< ARL coefficient buffer (Cb)
  Int*          m_pcArlCoeffCr;       ///< ARL coefficient buffer (Cr)
  bool          m_ArlCoeffIsAliasedAllocation; ///< ARL coefficient buffer is an alias of the global buffer and must not be free()'d
  static Int*   m_pcGlbArlCoeffY;     ///< ARL coefficient buffer (Y)
  static Int*   m_pcGlbArlCoeffCb;    ///< ARL coefficient buffer (Cb)
  static Int*   m_pcGlbArlCoeffCr;    ///< ARL coefficient buffer (Cr)
#endif
  Pel*          m_pcIPCMSampleY;      ///< PCM sample buffer (Y)
  Pel*          m_pcIPCMSampleCb;     ///< PCM sample buffer (Cb)
  Pel*          m_pcIPCMSampleCr;     ///< PCM sample buffer (Cr)
  Int*          m_piSliceSUMap;       ///< pointer of slice ID map
  std::vector<NDBFBlockInfo> m_vNDFBlock;
 ..................
 .............
}

 

上面是HM9.0的class TComDataCU的部分代码, 那些地方有疑问大家可以都贴出来一起讨论啊!

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

TComDataCU

/** \file TComDataCU.h \brief CU data structure (header) \todo not all entities a...

TComDataCU.h等主要类

/// Non-deblocking filter processing block border tag enum NDBFBlockBorderTag {   SGU_L = 0,   SGU_R...

HM编码器端提取PU分割模式及CU深度信息

CU深度及PU分割方式提取

HEVC/H265 HM10.0 分析(二)TComDataCU.cpp .

以下分析TComDataCU.cpp。这个cpp是很重要的,要分几次分析完,这是分析TComDataCU.cpp(一)。 [cpp] view plaincopyprint?...

HEVC 常用之 类TComDataCU分析

分析HM代码,首先必须把class TComDataCU完全搞明白! 分类: AVC H 分析HM代码,首先必须把class TComDataCU完全搞明白! 为了找到合适的...
  • Goul_
  • Goul_
  • 2014年07月18日 11:41
  • 622

HEVC官方软件HM源代码简单分析-编码器TAppEncoder

上一篇文章总结了HEVC官方参考软件HM中的视频解码器TAppDecoder的结构,本文继续分析HM中的视频编码器TAppEncoder。函数调用关系图HM中的HEVC视频编码器TAppEncoder...

SecureCRT

      SecureCRT是一卷支持SSH(SSH1和SSH2)的终端仿真程序,还支持telnet、serial和其它协议,可以用于连接运行包括Windows、Unix和VMS的远程系统的理想工具...

arm-linux一句话备忘录

arm-linux一句话备忘录 网址:http://blog.csdn.net/linucos/article/details/5278211 1.uboot传递给li...

HEVC学习:HM-10.1-dev代码分析之TLibVideoIO库

转载地址:http://blog.csdn.net/zhuyonghao123/article/details/9068181 HEVC学习:HM-10.1-dev代码分析之TLibVideoIO库...

HEVC码率控制算法研究与HM相应代码分析(二)——新的码率控制模型

下面简单回顾一下H.264中的码率控制算法,并说明为什么不能直接将之前的码率控制算法用于HEVC,同时介绍一下一种很有意思的新的R-λ模型。 在H.264以及之前的码率控制算法中,R-Q模型得到...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:分析HM代码,首先必须把class TComDataCU完全搞明白!
举报原因:
原因补充:

(最多只允许输入30个字)