5.2.1 参考帧解码

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

引言

参考帧解码是帧间预测模式信息解码的第一步,它从比特流中解析出当前块使用的参考帧索引。参考帧的选择直接影响预测质量和编码效率。

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


参考帧解码概述

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

规范文档: 5.11.25 Ref frames syntax

功能说明

参考帧解码确定当前块使用的参考帧索引,支持单参考模式和复合参考模式。

解码流程

  1. Skip模式检查

    if skip_mode == 1:
        RefFrame[0] = SkipModeFrame[0]
        RefFrame[1] = SkipModeFrame[1]
    
  2. 分段特征检查

    if segment_feature_enabled(SEG_LVL_REF_FRAME):
        RefFrame[0] = FeatureData[segment_id][SEG_LVL_REF_FRAME]
    elif segment_feature_enabled(SEG_LVL_SKIP) or segment_feature_enabled(SEG_LVL_GLOBALMV):
        RefFrame[0] = LAST_FRAME
    
  3. 参考模式选择

    • 单参考模式(SINGLE_REFERENCE):
      single_ref_p1 = read_S(av1, 'single_ref_p1')
      # 根据single_ref_p1到single_ref_p6确定参考帧
      
    • 复合参考模式(COMPOUND_REFERENCE):
      comp_ref_type = read_S(av1, 'comp_ref_type')
      comp_ref = read_S(av1, 'comp_ref')
      comp_bwdref = read_S(av1, 'comp_bwdref')
      

参考帧类型

  • LAST_FRAME: 最近解码的帧
  • LAST2_FRAME: 倒数第二帧
  • LAST3_FRAME: 倒数第三帧
  • GOLDEN_FRAME: 黄金帧
  • BWDREF_FRAME: 后向参考帧
  • ALTREF_FRAME: 替代参考帧
  • ALTREF2_FRAME: 第二个替代参考帧

参考帧解码流程图

参考帧解码主流程

graph TD A[参考帧解码开始<br/>__read_ref_frames] --> B{skip_mode == 1?} B -->|是| C[RefFrame 0 = SkipModeFrame 0<br/>RefFrame 1 = SkipModeFrame 1] B -->|否| D{分段特征<br/>SEG_LVL_REF_FRAME?} C --> END[参考帧解码完成] D -->|是| E[RefFrame 0 = FeatureData] D -->|否| F{分段特征<br/>SEG_LVL_SKIP<br/>或SEG_LVL_GLOBALMV?} E --> END F -->|是| G[RefFrame 0 = LAST_FRAME] F -->|否| H{允许选择参考模式<br/>且块大小足够?} G --> END H -->|是| I[解码comp_mode] H -->|否| J[comp_mode = SINGLE_REFERENCE] I --> K{comp_mode} J --> K K -->|COMPOUND_REFERENCE| L[复合参考模式解码] K -->|SINGLE_REFERENCE| M[单参考模式解码] L --> END M --> END style A fill:#e1f5ff style B fill:#fff9c4 style D fill:#fff9c4 style F fill:#fff9c4 style K fill:#fff9c4 style END fill:#c8e6c9

详细技术文档参考

说明: 以下内容来自详细技术文档,包含完整的实现细节和代码说明。这些内容主要用于技术参考。

点击展开查看详细技术文档

单参考模式解码流程

graph TD A[单参考模式解码] --> B[解码single_ref_p1] B --> C{single_ref_p1 == 0?} C -->|是| D[解码single_ref_p3] C -->|否| E[解码single_ref_p2] D --> F{single_ref_p3 == 0?} E --> G{single_ref_p2 == 0?} F -->|是| H[解码single_ref_p4] F -->|否| I[解码single_ref_p5] G -->|是| J[解码single_ref_p6] G -->|否| K[ALTREF_FRAME] H --> L{single_ref_p4 == 0?} I --> M{single_ref_p5 == 0?} J --> N{single_ref_p6 == 0?} L -->|是| O[LAST_FRAME] L -->|否| P[LAST2_FRAME] M -->|是| Q[LAST3_FRAME] M -->|否| R[GOLDEN_FRAME] N -->|是| S[BWDREF_FRAME] N -->|否| T[ALTREF2_FRAME] O --> V[单参考模式解码完成] P --> V Q --> V R --> V K --> V S --> V T --> V style A fill:#e1f5ff style C fill:#fff9c4 style F fill:#fff9c4 style G fill:#fff9c4 style V fill:#c8e6c9

复合参考模式解码流程

graph TD A[复合参考模式解码] --> B[解码comp_ref_type] B --> C{comp_ref_type} C -->|UNIDIR_COMP_REFERENCE| D[单向复合参考] C -->|BIDIR_COMP_REFERENCE| E[双向复合参考] D --> D1[解码uni_comp_ref] D1 --> D2{uni_comp_ref == 0?} D2 -->|是| D3[解码uni_comp_ref_p1] D2 -->|否| D4[RefFrame 0 = BWDREF_FRAME<br/>RefFrame 1 = ALTREF_FRAME] D3 --> D5{uni_comp_ref_p1 == 0?} D5 -->|是| D6[RefFrame 0 = LAST_FRAME<br/>RefFrame 1 = LAST2_FRAME] D5 -->|否| D7[解码uni_comp_ref_p2] D7 --> D8{uni_comp_ref_p2 == 0?} D8 -->|是| D9[RefFrame 0 = LAST_FRAME<br/>RefFrame 1 = LAST3_FRAME] D8 -->|否| D10[RefFrame 0 = LAST_FRAME<br/>RefFrame 1 = GOLDEN_FRAME] D4 --> END D6 --> END D9 --> END D10 --> END E --> E1[解码comp_ref] E1 --> E2{comp_ref == 0?} E2 -->|是| E3[解码comp_ref_p1] E2 -->|否| E4[解码comp_ref_p2] E3 --> E5{comp_ref_p1 == 0?} E4 --> E6{comp_ref_p2 == 0?} E5 -->|是| E7[RefFrame 0 = LAST_FRAME] E5 -->|否| E8[RefFrame 0 = LAST2_FRAME] E6 -->|是| E9[RefFrame 0 = LAST3_FRAME] E6 -->|否| E10[RefFrame 0 = GOLDEN_FRAME] E7 --> E11[解码comp_bwdref] E8 --> E11 E9 --> E11 E10 --> E11 E11 --> E12{comp_bwdref == 0?} E12 -->|是| E13[解码comp_bwdref_p1] E12 -->|否| E14[RefFrame 1 = ALTREF_FRAME] E13 --> E15{comp_bwdref_p1 == 0?} E15 -->|是| E16[RefFrame 1 = BWDREF_FRAME] E15 -->|否| E17[RefFrame 1 = ALTREF2_FRAME] E14 --> END E16 --> END E17 --> END END[复合参考模式解码完成] style A fill:#e1f5ff style C fill:#fff9c4 style D2 fill:#fff9c4 style E2 fill:#fff9c4 style E12 fill:#fff9c4 style END fill:#c8e6c9

总结

参考帧解码是帧间预测的基础,它确定当前块使用的参考帧索引。参考帧的选择直接影响预测质量,是AV1帧间预测的重要环节。


参考资源:

上一篇: 帧间预测概述
下一篇: 运动向量栈构建

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