我在[Mac OS X] [GCC 4.2.1] [64位]上使用HEVC参考软件,HM编码器版本[16.15](包括RExt),并希望在编码器端提取: 1)每个块的运动矢量 2)帧分区信息,即运动矢量所参考的帧中每个块的大小和位置。
是否有人提示每个编码单元存储此信息的变量是什么?谢谢!
答案 0 :(得分:0)
您需要的只是TComDataCU
课程。
1)对于运动信息,有函数getCUMvField()
,它返回运动矢量。但是,使用它并不容易。
基本上,要访问几乎任何PU / CU级语法元素,您需要能够使用该PU / CU的绝对索引。这个独特的索引通过指向该部分的左上角4x4块,告诉您PUU / CU在CTU中的确切位置。
我记得大多数时候这个索引存储在变量uiAbsPartIdx
中。
如果您了解如何使用此索引,那么您将能够获得CTU级别的块分区信息。所以对于2)我的建议是当你对CUT进行循环时你会进入切片级别(我认为这是在compressSlice()
函数中完成的)。并且在为每个CTU调用compressCtu()
函数之后(这意味着已经做出所有RDO决策并且决定了CTU分区),然后在CTU的所有uiAbsPartIdx
上放置一个循环并获取它们的宽度和高度。例如,如果您的CTU大小为128,那么您的CTU中将有32 * 32 = 1024个唯一的4x4块。获取对应于某个uiAbsPartIdx
的CU的宽度/高度的函数是pCtu->getWidth(uiAbsPartIdx)
。
我希望很清楚。