- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在调试 HM 16.2 的解码时,我看到 CU 看起来像是被分割为 PU。每个PU都有相同的MV。在一个 CU 中允许不同的 MV 是我(目前)知道将 CU 拆分为 PU 的唯一原因。
我想知道我是否误解了 CTU 数据结构 (TComDataCU
)*。谁能帮我这个?你知道是否还有其他原因将 CU 拆分为 PU?
相关问题:
TComDataCU
将 64x64 CTU 拆分为 256 个部分? (我最初预计会看到 64 个部分,每个部分对应最小的 8x8 CU。现在我假设额外的部分允许更小的 PU/TU。)TComMv::getHor()
和 TCovMv::getVer()
直接解释为 MV 是否正确,还是必须提供一些附加信息(例如合并/跳过信息、增量等..) 被合并以获得“真正的”MV?* 对于一个名为 ctu
的 TComDataCU*
,我明白了
ctu->getTotalNumPart() == 256
ctu->getDepth(48) == 3
ctu->getPredictionMode(48) == INTER_MODE
ctu->getPartitionSize(48) == Nx2N
其中 mvf = ctu->getCUMvField(REF_PIC_LIST_0)
(仅使用单向预测,具有简单的 GOP:I <- P <- P <- P ...),
mvf->getMv(48).getHor() == mvf->getMv(50).getHor() &&
mvf->getMv(49).getHor() == mvf->getMv(51).getHor() &&
mvf->getMv(48).getVer() == mvf->getMv(50).getVer() &&
mvf->getMv(49).getVer() == mvf->getMv(51).getVer() &&
mvf->getMv(48).getHor() == mvf->getMv(49).getHor() &&
mvf->getMv(48).getVer() == mvf->getMv(49).getVer()
将这些观察结果与我的问题联系起来,对于这个 CU,我知道 CU 有两个包含索引 48,50 和 49,51 的 PU
+--+--+|48|49|+--+--+|50|51|+--+--+
and so I expect
mvf->getMv(48).getHor() == mvf->getMv(50).getHor() &&
mvf->getMv(49).getHor() == mvf->getMv(51).getHor() &&
mvf->getMv(48).getVer() == mvf->getMv(50).getVer() &&
mvf->getMv(49).getVer() == mvf->getMv(51).getVer() && (
mvf->getMv(48).getHor() != mvf->getMv(49).getHor() ||
mvf->getMv(48).getVer() != mvf->getMv(49).getVer()
)
为什么两个 PU(看起来)有相同的 MV?
最佳答案
首先,正如您所注意到的,HEVC 中的最小块大小是 4x4。 CU 只能采用 64x64 和 8x8 之间的大小,但 PU 或 TU 可以缩小到 4x4。除了你提到的原因,一个CU也可以在帧内编码的情况下分成4个PU,这4个PU可以有不同的帧内预测方向。
由于最小的 block 大小是 4x4,一个 64x64 的 CTU 由 256 个部分组成。
在 HM 引用软件中,CTU TComDataCU
的数据结构将始终包含所有可能的最小块,而不管实际 block 结构如何。这就是为什么 CU 数据有可能(而且通常是这种情况)被冗余存储的原因。
例如,一个名为 ctu
的 64x64 CTU 包含单个 CU(因此 CU 大小为 64x64)将存储 256 个深度 0。如果您检查 (z-scan) 索引 0 处的深度,ctu->getDepth(0)
,您将得到 0。这足以描述 CU 的大小,但是如果您检查在另一个索引 ctu->getDepth(48)
处的深度,你也会得到 0,这是多余的。
这就是您在案例中观察到的情况。您的 CU 被分成 2 个垂直 PU (Nx2N),因此 (48,50) 是一个 PU,并用一个运动向量来描述。然而,HM中的数据结构将MV存储在48和50两个地方。
为了解决您的第二个相关问题,是的,MV 的水平和垂直部分“真实地”描述了它。但是,您可能还需要引用帧的索引。这可以在 TComMvField
中找到,除了 TComMv
之外,它还有一个 Int
索引。
关于hevc - (为什么)HM 会把一个 CU 分割成具有相同 MV 的 PU?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28014901/
如何根据tomcat日志计算出PV,ip,PU? 我已经将 tomcat 日志导出到 db。 可以找到有关数据库结构的信息here . 对于我可以使用的ip: select count(distinc
我尝试将 Maven 生成的 WAR 文件安装到 Weblogic 服务器,但在尝试部署时从 weblogic 收到以下错误消息: Duplicate persistence units with n
我有以下 PostGreSQL Locations 表: -------------------- | ID | Name | -------------------- | 1 | K
我使用 EclipseLink 作为我的 JPA 提供程序。我的应用程序工作正常,但最近在部署应用程序时出现错误,并且它不再工作。我是 JPA 新手,尽管我已阅读日志,但我无法理解发生了什么。它与 E
让我们举一个基本的例子,假设我们有一个实体类 @Entity public class User { } 以及一个用于处理数据的 DAO: public interface UserDao {
当使用 ColdFusion Illudium 代码生成器从 postgresql 生成模型时, bool 值在 cfqueryparam 中被转换为 varchar,而 varchar 被转换为 c
我目前正在尝试构建一个应该可以在各种机器上运行的代码,从手持式口袋和传感器到数据中心的大型服务器。 这些架构之间的(许多)差异之一是对齐内存访问的要求。 “标准”x86 CPU 不需要对齐内存访问,但
我正在使用 cmake 为 VxWorks 进行交叉编译。当我第一次运行 cmake 时,我必须提供有关编译器、目标操作系统等的信息。 在交叉编译对话框中,我设置了三个目标系统设置: 操作系统 版本
这个问题在这里已经有了答案: 9年前关闭。 Possible Duplicate: Detecting CPU architecture compile-time 是否有 GCC 设置的定义来说明 G
在 VS 2013 中,在项目属性中的编译中,我看到两个似乎与同一事物相关的配置(下方的打印屏幕)。平台和 objective-c PU。 有什么不同?有没有? 最佳答案 默认情况下,平台字符串与 o
我正在阅读 kubernetes hpa example 的示例.在这个例子中,它们运行:kubectl run php-apache --image=k8s.gcr.io/hpa-example -
在调试 HM 16.2 的解码时,我看到 CU 看起来像是被分割为 PU。每个PU都有相同的MV。在一个 CU 中允许不同的 MV 是我(目前)知道将 CU 拆分为 PU 的唯一原因。 我想知道我是否
假设我们有一个面向任何 CPU 的应用程序,但该应用程序使用具有两种风格的第三方程序集,32 位和 64 位。必须使用其中的哪一个? 如果“Any”选项同时运行 32 位和 64 位应用程序,我如何才
我希望在 Visual Studio 2010 中将 objective-c PU 设置从“任何 CPU”更改为“x86”。 我在另一个网站上读到我需要执行以下操作: 转到您程序的启动项目。 打开属性
我正尝试按照 Chris Simmonds 在“掌握嵌入式 Linux 编程”中的说明为 beagle bone black 构建 u-boot。我已经构建了交叉工具链,现在正尝试使用该工具链构建 D
我正在尝试构建一个网站应用程序并将 objective-c PU 指定为 x86 而不是任何 CPU。在“事件解决方案平台:”下拉列表下,我在 Configuration Manager 中的唯一选择
我是一名优秀的程序员,十分优秀!