如何在HEVC HM 16.15中提取帧分区的运动矢量和信息

时间:2017-04-20 12:46:48

标签: codec hevc

我在[Mac OS X] [GCC 4.2.1] [64位]上使用HEVC参考软件,HM编码器版本[16.15](包括RExt),并希望在编码器端提取: 1)每个块的运动矢量 2)帧分区信息,即运动矢量所参考的帧中每个块的大小和位置。

是否有人提示每个编码单元存储此信息的变量是什么?谢谢!

1 个答案:

答案 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)

我希望很清楚。