HM编码器16.4 predMode是2

时间:2015-04-02 12:59:16

标签: c++ hevc h.265

我想确定CU是用HEVC参考软件HM 16.4编码器进行帧内编码还是帧间编码。

在TEncSlice.cpp中,在CTU被压缩(m_pcCuEncoder->compressCtu( pCtu );)之后,我应该能够判断CU是内部编码还是帧间编码。

因此,我会检查m_pePredMode的{​​{1}}数组:

TComDataCU* pCtu

PredMode在Char* predMode = pCtu->getPredictionMode(); for (int i = 0; i < pCtu->getTotalNumPart(); i++) { std::cout << (int)predMode[i] << " "; } std::cout << std::endl; 中定义为:

TypeDef.h

我的代码输出首先给出了预期的结果。对于第一个帧内帧,我首先只获得一个(MODE_INTRA)。但是对于某些CTU,我也得到了#14;两个&#34;,这对我来说并不合理,因为2不应该描述预测模式。

类似地,在帧间帧(P帧)中,我主要得到零(MODE_INTER),少数(MODE_INTRA),这是好的。但后来我也得到了一些&#34; twos&#34;。示例输出的一部分如下所示(每行对应一个64x64 CTU):

enum PredMode
{
MODE_INTER                 = 0,     ///< inter-prediction mode
MODE_INTRA                 = 1,     ///< intra-prediction mode
NUMBER_OF_PREDICTION_MODES = 2,
};

有谁知道这些意味着什么?我检查了这是否与跳过模式相对应,但跳过标志和2s之间没有相关性。

1 个答案:

答案 0 :(得分:0)

好吧,我得到了这个问题的答案:

如果CU具有predMode 2,则意味着CU未被编码。在这种情况下会发生这种情况,因为CU位于图片的边界之外。

编码序列的分辨率为416x240,CTU大小为64x64。所以连续有6.5个CTU。

这解释了为什么每7个CTU,我得到2s作为predMode。