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模式解码需要满足以下所有条件:
- 非skip模式:
skip_mode == 0 - 启用Inter-Intra复合模式:
enable_interintra_compound == 1 - 非复合预测:
isCompound == 0 - 块大小限制:
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帧间预测的重要补充。
参考资源:
- AV1规范文档
- 源码实现: GitHub - av1_learning
- Tile解码:
src/tile/tile_group.py
- Tile解码:

浙公网安备 33010602011771号