我想确定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之间没有相关性。
答案 0 :(得分:0)
好吧,我得到了这个问题的答案:
如果CU具有predMode 2,则意味着CU未被编码。在这种情况下会发生这种情况,因为CU位于图片的边界之外。
编码序列的分辨率为416x240,CTU大小为64x64。所以连续有6.5个CTU。
这解释了为什么每7个CTU,我得到2s作为predMode。