H.264解码器如何确定参考帧?含LTR等特殊场景疑问
H.264解码器确定非前一帧的参考目标,核心依赖比特流中Slice层的语法信息,而非NAL单元头部,具体逻辑如下:
Slice头部的参考帧重排序指令
对于P/B帧,Slice头部会携带ref_pic_list_reordering_flag_l0(针对前向参考列表)或ref_pic_list_reordering_flag_l1(针对后向参考列表)标志位。当该标志位为1时,会通过reordering_of_pic_nums_idc、abs_diff_pic_num_minus1等语法元素,对默认参考帧列表进行重排序,明确指定当前Slice需要参考的帧。长期参考帧(LTR)的定位方式
如果是参考LTR,Slice头部会通过long_term_pic_num语法元素指定对应长期参考帧的编号,解码器会在自身维护的长期参考帧列表中匹配该编号对应的帧,完成参考。帧编号与参考列表的关联逻辑
H.264的每个帧都分配有pic_num(短期图像编号)或long_term_pic_num(长期图像编号),解码器会实时维护包含短期、长期帧的活跃参考帧列表。比特流中并不直接存储“参考帧ID”,而是通过这些编号来索引列表中的目标帧。为何NAL规范中找不到相关信息?
NAL单元头部仅包含forbidden_zero_bit、nal_ref_idc、nal_unit_type三个基础字段,仅用于标识单元类型、是否为参考帧等元信息。具体的参考帧选择逻辑属于Slice层的语法定义,需要查看H.264规范中Slice头部的相关章节,而非仅关注NAL单元部分。
内容的提问来源于stack exchange,提问作者counter

