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