分析HM代码,首先必须把class TComDataCU完全搞明白!
2012-11-29 09:35
435 查看
分析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来操作, 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的部分代码, 那些地方有疑问大家可以都贴出来一起讨论啊!
相关文章推荐
- 分析HM代码,首先必须把class TComDataCU完全搞明白! .
- 分析HM代码,首先必须把class TComDataCU完全搞明白!
- HEVC/H265 HM10.0 分析(二)TComDataCU.cpp
- HEVC/H265 HM10.0 分析(二)TComDataCU.cpp .
- Android 开源框架Universal-Image-Loader完全解析(五)- 从代码分析Android-Universal-Image-Loader的图片加载、显示流程
- UCHome中数据库操作类(class_mysql.php)页面的代码分析
- 《linux 内核完全剖析》 由逻辑地址转换成线性地址代码分析 get_base get_limit 代码分析笔记
- 使用.net Stopwatch class 来分析你的代码
- HEVC码率控制算法研究与HM相应代码分析(一)——HEVC标准及编码流程介绍
- 足以应付一切的水仙花数,字母交叉问题,数组排序去重复,今天get到一点点,首先一道题莫名其妙地改对了然后明白了自己思路是对的但是不会写代码 还是什么用都没有
- 语法分析表产生器的代码之二:自定义类的声明文件myclass.h
- 首先给出最小优先级队列和最大优先级队列完整代码,稍后分析博文奉上
- ZStack-CC2530-2.5.1a主要代码分析总结——明白ZStack-OSAL的原理和思想
- HM中语法元素二进制化的相关代码分析
- 《linux 内核完全剖析》sched.c sched.h 代码分析笔记
- 《linux 内核完全剖析》 exit.c 代码分析笔记
- 执行这些代码, Edit1只能输入数字,小数点和负号,负号和小数点只能输入一个,负号必须在最前,粘贴的数字必须完全正确.
- HEVC学习:HM-10.1-dev代码分析之TLibVideoIO库
- flex之RemoteClass --没有完全讲明白作用实例
- JBoss、Tomcat Classloader不完全分析