最终:计算和显示差异后的结果我是 VVC 的新手,我正在通过参考软件的代码试图理解它。我使用参考软件对视频进行了编码和解码。我想从中提取比特流,我想知道每个宏块中的比特数。我不确定我应该与哪个班级一起工作,现在我正在查看mv.cpp
、、、QuantRDOQ.cpp
和TrQuant.cpp
。
我怕把代码完全弄乱了,我不知道在哪里添加什么代码行。开始:计算并显示差异后的结果 PS 链接的图片是我的问题解决后,我附上这些图片,因为我在评论中的查询。
最终:计算和显示差异后的结果我是 VVC 的新手,我正在通过参考软件的代码试图理解它。我使用参考软件对视频进行了编码和解码。我想从中提取比特流,我想知道每个宏块中的比特数。我不确定我应该与哪个班级一起工作,现在我正在查看mv.cpp
、、、QuantRDOQ.cpp
和TrQuant.cpp
。
我怕把代码完全弄乱了,我不知道在哪里添加什么代码行。开始:计算并显示差异后的结果 PS 链接的图片是我的问题解决后,我附上这些图片,因为我在评论中的查询。
我知道的简单解决方案是在编码器端。
诀窍是计算编码单元(CU)(又名宏块)编码“之前”和“之后”写入比特数的差异。这些东西发生在CABACWriter.cpp
文件中。
你应该去到coding_tree()
函数,coding_unit()
函数被调用,它负责对当前CU中的所有语法元素进行上下文编码。在那里,您可以调用该函数getNumBins()
两次:一次 before 和一次 after coding_unit()
。两个值的差异应该为您完成工作。
正如错误所说,getNumBins()
CABAC 估计器不支持。因此,您应该确保在编码期间“仅”调用它,而不是在 RDO 期间。
这应该做的工作:
if (isEncoding())
before = m_BinEncoder.getNumBins()
coding_unit( cu, partitioner, cuCtx );
if (isEncoding())
{
after = m_BinEncoder.getNumBins();
diff = after - before;
}