5.2.5 Inter-Intra模式

作者:chai51
出处:https://www.cnblogs.com/chai51
版权:本文版权归作者和博客园共有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任

引言

Inter-Intra模式解码确定是否使用Inter-Intra混合预测模式,结合帧间预测和帧内预测的优势。这种混合模式能够更好地处理复杂场景,提高预测质量。

源码说明: 本文档基于作者自己编写的AV1解码器Python实现,所有代码示例和实现细节均来自实际可运行的源码。源码仓库:GitHub - av1_learning


Inter-Intra模式解码概述

位置: src/tile/tile_group.py - __read_interintra_mode()

规范文档: 5.11.28 Read inter intra syntax

功能说明

确定是否使用Inter-Intra混合预测模式,结合帧间预测和帧内预测的优势。

解码条件

Inter-Intra模式解码需要满足以下所有条件:

  1. 非skip模式skip_mode == 0
  2. 启用Inter-Intra复合模式enable_interintra_compound == 1
  3. 非复合预测isCompound == 0
  4. 块大小限制8x8 <= MiSize <= 32x32

解码流程

if (not skip_mode and 
    enable_interintra_compound and 
    not isCompound and
    MiSize >= BLOCK_8X8 and 
    MiSize <= BLOCK_32X32):
    # 解码是否使用Inter-Intra模式
    interintra = read_S(av1, 'interintra')
    
    if interintra == 1:
        # 解码Inter-Intra模式类型
        interintra_mode = read_S(av1, 'interintra_mode')
        
        # 设置参考帧:第二个参考帧设为INTRA_FRAME
        RefFrame[1] = INTRA_FRAME
        
        # 重置角度增量
        AngleDeltaY = 0
        AngleDeltaUV = 0
        
        # 禁用滤波器内模式
        use_filter_intra = 0
        
        # 解码wedge_interintra标志
        wedge_interintra = read_S(av1, 'wedge_interintra')
        
        if wedge_interintra == 1:
            # 解码wedge索引
            wedge_index = read_S(av1, 'wedge_index')
            wedge_sign = 0
else:
    interintra = 0

Inter-Intra模式类型

interintra_mode 支持以下帧内预测模式:

  • DC_PRED:DC预测
  • V_PRED:垂直预测
  • H_PRED:水平预测
  • SMOOTH_PRED:平滑预测
  • SMOOTH_V_PRED:垂直平滑预测
  • SMOOTH_H_PRED:水平平滑预测

Wedge Inter-Intra

wedge_interintra == 1 时,使用wedge形状的mask来混合帧间预测和帧内预测:

  • 解码 wedge_index 来确定wedge的形状和方向
  • wedge_sign 固定为0(在Inter-Intra模式下)

总结

Inter-Intra模式解码确定是否使用Inter-Intra混合预测模式。这种模式结合帧间预测和帧内预测的优势,能够更好地处理复杂场景,是AV1帧间预测的重要补充。


参考资源:

上一篇: 运动向量分配
下一篇: 运动模式解码

posted @ 2026-01-10 07:53  chai51  阅读(0)  评论(0)    收藏  举报