PU::getAffineMergeCand

getAffineMergeCand函数中调用的子函数分析

1. 子块级ATMVP相关函数

  • getInterMergeSubPuMvpCand: 获取子块级ATMVP运动向量候选

    • 作用:用于获取子块级别的时空运动向量预测候选
    • 提供的MV候选类型:MRG_TYPE_SUBPU_ATMVP类型的运动向量候选
  • deriveSubTmvpTMMv2Pel: 进行运动向量精细化处理

    • 作用:对子块TMVP进行精细化处理,提高运动向量精度
    • 提供的MV候选类型:MRG_TYPE_SUBPU_ATMVP类型的精细化运动向量候选

2. 仿射运动向量继承相关函数

  • getOneSbSmvpCand: 获取子块SMVP候选

    • 作用:获取子块级的时空运动向量预测候选
    • 提供的MV候选类型:子块SMVP类型的运动向量候选
  • getAvailableAffineNeighboursForLeftPredictor: 获取左侧仿射邻居PU

    • 作用:查找并获取当前PU左侧可用的仿射运动邻居
    • 提供的MV候选类型:继承的仿射运动向量候选
  • getAvailableAffineNeighboursForAbovePredictor: 获取上方仿射邻居PU

    • 作用:查找并获取当前PU上方可用的仿射运动邻居
    • 提供的MV候选类型:继承的仿射运动向量候选
  • xInheritedAffineMv: 从邻居PU继承仿射运动向量

    • 作用:从已识别的仿射邻居中继承运动向量信息
    • 提供的MV候选类型:继承的仿射MV候选

3. 仿射合并候选冗余检查函数

  • checkLastAffineMergeCandRedundancy : 检查仿射合并候选的冗余性
    • 作用:检查新生成的仿射合并候选是否与已有候选重复
    • 提供的MV候选类型:经过冗余检查后的仿射合并类型的MV候选

4. 仿射运动向量候选获取函数

  • getColocatedAffineCMVP : 获取仿射运动向量候选
    • 作用:根据时域信息获取仿射运动向量候选
    • 提供的MV候选类型:
      • L0/L1方向的仿射运动向量候选
      • 区分AFFINEMODEL_4PARAM和AFFINEMODEL_6PARAM两种仿射模型类型

5. HMVP历史运动向量候选相关函数

  • addSpatialAffineMergeHMVPCand: 添加空间仿射HMVP候选

    • 作用:从历史运动向量表中添加空间仿射合并候选
    • 提供的MV候选类型:历史运动向量预测的仿射合并候选
  • addOneInheritedHMVPAffineMergeCand: 添加继承的HMVP仿射合并候选

    • 作用:添加从历史运动向量表继承的仿射合并候选
    • 提供的MV候选类型:继承的历史运动向量仿射合并候选
  • addOneAffineMergeHMVPCand: 添加单个仿射HMVP合并候选

    • 作用:添加单个来自历史运动向量表的仿射合并候选
    • 提供的MV候选类型:历史运动向量仿射合并候选

6. 控制点候选生成函数

  • getAffineControlPointCand : 获取仿射控制点候选
    • 作用:基于空间邻居的运动信息构造仿射控制点候选
    • 提供的MV候选类型:构造的仿射合并候选(基于LT、RT、LB、RB控制点的不同组合)

7. 非相邻候选相关函数

  • getNonAdjCstMergeCand : 获取非相邻约束合并候选
    • 作用:获取非相邻位置的约束仿射合并候选
    • 提供的MV候选类型:非相邻仿射合并候选

8. 链式候选相关函数

  • getChainedCstMergeCand : 获取链式约束合并候选
    • 作用:获取通过链式方式构造的约束仿射合并候选
    • 提供的MV候选类型:链式仿射合并候选

9. 相似性检查函数

  • xCPMVSimCheck : 检查CPMV相似性
    • 作用:检查控制点运动向量的相似性,避免重复候选
    • 提供的MV候选类型:经过相似性检查的仿射合并候选

10. 运动向量处理辅助函数

  • roundAffineMv : 四舍五入仿射运动向量
    • 作用:对仿射运动向量进行四舍五入处理
    • 提供的MV候选类型:处理后的仿射运动向量候选

这些子函数协同工作,共同完成仿射合并候选的生成过程,包括:

  1. 从时空邻居获取初始候选
  2. 继承历史运动信息
  3. 构造新的仿射候选
  4. 去除冗余和重复候选
  5. 填充候选列表至最大数量要求

调用位置

EncCu::xCheckRDCostMerge2Nx2N

子函数及其对应的宏条件

1. 函数入口和初始化阶段

  • 初始化逻辑 : 包括maxNumAffineMergeCand计算和affMrgCtx上下文初始化
    • 涉及宏: JVET_AA0107_RMVF_AFFINE_MERGE_DERIVATION, JVET_W0090_ARMC_TM, ADDITIONAL_AFFINE_CAND_NUM

2. 空间运动向量获取阶段

  • getPURestricted(): 获取相邻PU
  • getMotionInfo(): 提取运动信息
  • 涉及宏: JVET_Y0065_GPM_INTRA (用于isDiffMER检查)

3. 基于历史的仿射合并候选生成阶段

  • xInheritedAffineMv() : 仿射运动向量继承
    • 条件宏: JVET_AG0164_AFFINE_GPM
  • xCPMVSimCheck() : 运动相似性检查
    • 条件宏: JVET_AC0185_ENHANCED_TEMPORAL_MOTION_DERIVATION

4. 时间运动向量预测(TMVP)阶段

  • getColocatedAffineCMVP() : 获取共置仿射运动向量
    • 条件宏: JVET_AK0095_ENHANCED_AFFINE_CANDIDATE, JVET_AC0185_ENHANCED_TEMPORAL_MOTION_DERIVATION
  • refineTmvpCoverGetColocatedMVP() 和 getColocatedMVP() : 获取共置运动向量
    • 条件宏: JVET_AL0214_MV_REFINEMENT_FOR_TMVP, JVET_Y0134_TMVP_NAMVP_CAND_REORDERING

5. 冗余检查和候选验证阶段

  • checkLastAffineMergeCandRedundancy() : 冗余检查
    • 条件宏: JVET_Z0139_HIST_AFF
  • xCheckSimilarMotion(): 相似运动检查

6. 非相邻仿射合并候选生成阶段

  • getNonAdjAvailableAffineNeighboursByDistance(): 获取非相邻仿射邻居
  • collectNeiMotionInfo(): 收集邻居运动信息
  • getRMVFAffineGuideCand() : 获取RMVF指导的仿射候选
    • 条件宏: JVET_AH0314_LIC_INHERITANCE_FOR_MRG, JVET_AG0164_AFFINE_GPM

7. 候选调整阶段

  • adjustAffineMergeCandidatesOneGroup() : 调整仿射合并候选
    • 条件宏: JVET_W0090_ARMC_TM, JVET_AE0174_NONINTER_TM_TOOLS_CONTROL

8. 零填充阶段

  • 最后的零填充逻辑,确保候选数量达到最大值

这些子函数按照上述顺序依次执行,每个阶段都可能根据不同的宏定义条件进行编译时的条件编译,从而影响最终的功能实现。

相关推荐
智能直播2 天前
MEDAI-W2_RGA+DRM_HDMI输出_CSDN文章
实时音视频·视频编解码
智能直播3 天前
MEDAI-W2_OpenGL绿幕扣图_DRMBUF_HDMI送显_CSDN文章
实时音视频·视频编解码
智能直播3 天前
MEDAI-W2_FFmpeg多协议归一拉流_CSDN文章
视频编解码
智能直播3 天前
MEDAI-W2_Tinyalsa音频_HDMI输出_CSDN文章
音视频·实时音视频·视频编解码
Industio_触觉智能11 天前
瑞芯微RK平台视频硬解排障指南-下|板端实测记录
音视频·视频编码·视频编解码·零拷贝·gstreamer·视频解码·rk3576
智能直播14 天前
RK3576 + NDI 框架:HX2 编码输出与 HX2/FULL介绍
音视频·实时音视频·视频编解码
Industio_触觉智能16 天前
瑞芯微RK平台视频硬解排障指南-上|编解码、GStreamer与零拷贝全解析
视频编码·视频编解码·零拷贝·gstreamer·视频解码·rk3576
常州晟凯电子科技17 天前
8路CVBS/AHD模拟视频编码器评测
音视频·视频编解码
VidDown18 天前
上线三个月后的第一次事故:一个 Django 服务的日志、监控与故障复盘
数据库·python·django·wpf·音视频·视频编解码
VidDown19 天前
24fps 转 25fps 不只是改个数字:帧率转换、PAL/NTSC 与音频补偿
python·网络协议·音视频·视频编解码·视频