在调试 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()
将其直接解释为 MV 是否正确TCovMv::getVer()
,还是必须合并一些附加信息(例如合并/跳过信息、增量等)才能获得“真实”的 MV?
* 对于TComDataCU*
被叫ctu
,我看到
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 有两个 PU,包括索引 48,50 和 49,51,例如
+--+--+ |48|49| +--+--+ |50|51| +--+--+
所以我期待
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?