从 VVC VTM 参考软件中提取宏块中的位数

Extracting number of bits in a macroblock from VVC VTM reference software

Final:Result after calculating and displaying the difference我是 VVC 的新手,我正在浏览参考软件的代码以试图理解它。我使用参考软件对视频进行了编码和解码。我想从中提取比特流,我想知道每个宏块中的位数。我不确定我应该使用哪个 class,目前我正在查看 mv.cppQuantRDOQ.cppTrQuant.cpp.

我怕把代码搞得一团糟,不知道在哪加什么行。 Start: Result after calculating and displaying the difference P.S。链接的图片是我的问题解决后的,因为我在评论中的疑问,附上了这些图片。

我知道的简单集解决方案是在编码器端。

诀窍是计算编码单元 (CU)(也称为宏块)编码“之前”和“之后”的写入位数的差异。这些东西发生在 CABACWriter.cpp 文件中。

您应该转到coding_tree()函数,其中调用了coding_unit()函数,该函数负责对当前CU中的所有语法元素进行上下文编码。 在那里,您可以调用函数 getNumBins() 两次:一次在 coding_unit() 之前,一次在之后。这两个值的差异应该可以为您完成工作。

如错误所述,CABAC 估算器不支持 getNumBins()。所以你应该确保你在编码期间称它为“仅”,而不是在 RDO 期间。

这应该可以完成工作:

if (isEncoding())
    before = m_BinEncoder.getNumBins()

coding_unit( cu, partitioner, cuCtx );

if (isEncoding())
{
    after = m_BinEncoder.getNumBins();
    diff = after - before;
}