gpt4 book ai didi

c++ - 在哪里更改引用代码以从 HEVC 编码视频中提取运动 vector

转载 作者:行者123 更新时间:2023-12-01 14:23:34 34 4
gpt4 key购买 nike

所以这个问题已经被问过几次了,但我认为我的 C++ 技能太缺乏,无法真正理解答案。我需要的是一种从 HEVC 编码视频开始到具有所有运动 vector 的 CSV 结束的方法。到目前为止,我已经编译并运行了引用解码器,一切似乎都运行良好。我不确定这是否重要,但我对运动 vector 感兴趣,因为它是一种分析视频运动的便捷方式。我最初的计划是对每一帧中的 MV 进行平均,以获得一个值来表示该帧中的平均移动量。

讨论here告诉我我需要与之交互以获取 MV 的 TComDataCU 类方法,并讨论如何迭代 CTU。但我仍然不太了解以下内容:

1) 这些 MV 方法返回什么信息,以什么格式返回?以我有限的知识,我假设将有 7 个与 MV 相关的值:帧编号、标识该帧中宏 block 的索引、宏 block 的大小、宏 block 的 x 坐标(可能是左上角?),宏 block 的y坐标, vector 的x坐标, vector 的y坐标。

2) 我需要在代码中的什么地方放置保存数据的新语句?我认为 TComDataCU.cpp 中一定有一些地方,我可以在其中放置一些行,将我想要的数据打印到文件中,但是当实际确定这些值以及它们是什么时,我感到困惑。变量声明如下所示:

  // create motion vector fields

m_pCtuAboveLeft = NULL;
m_pCtuAboveRight = NULL;
m_pCtuAbove = NULL;
m_pCtuLeft = NULL;

但我无法理解这些名字。 AboveLeft、AboveRight、Above 和 Left 似乎是方向的不对称组合?

任何帮助都会很棒!我想我会从看到一些示例代码中获益最多。对我需要注意的变量的解释也会非常有帮助。

最佳答案

TEncSlice.cpp,您可以访问循环中的每个CTU

for( UInt ctuTsAddr = startCtuTsAddr; ctuTsAddr < boundingCtuTsAddr; ++ctuTsAddr )

然后您可以使用 CTU 的地址来选择准确的 CTU。pCtu(TComDataCU 类)->getCtuRsAddr()

在那之后,

pCtu->getCUMvField()

将返回 CTU 的运动 vector 场。您可以在该对象中提取 CTU 的 MV。例如,

TComMvField->getMv(g_auiRasterToZscan[y * 16 + x])->getHor() 

返回特定 4x4 block MV 的水平元素。

你可以在m_pcCuEncoder->compressCtu( pCtu )之后保存这些数据,因为compressCtu决定了CTU的所有数据,比如CU划分和运动估计等。

希望这些信息对您和其他人有所帮助!

关于c++ - 在哪里更改引用代码以从 HEVC 编码视频中提取运动 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49125290/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com