您的位置:首页 > 编程语言

分析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的部分代码, 那些地方有疑问大家可以都贴出来一起讨论啊!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐