H.264 长短参考帧的更新流程,发生在当前帧解码完成之后,下一帧开始之前。这个流程会依据当前帧的类型,执行不同的管理策略。
-
DPB (解码图像缓存):相当于存放所有参考帧的图书馆书架。
-
短期参考帧:相当于“近期热门书籍”,遵循先入先出的原则,最新的书会挤掉最旧的。
-
长期参考帧:相当于“永久存档书籍”,除非收到特殊指令,否则不会被移除。
-
MMCO (自适应内存控制):相当于管理员收到的“工作指令”,明确告知如何处理特定书籍。
整个更新流程的核心逻辑可以拆解为两个主要场景:IDR帧(刷新帧) 和 非IDR帧。
1. 清理与重置:遇到 IDR 帧
IDR 帧(即时解码刷新帧)就像一道“重置指令”。当解码器遇到它时,意味着之前所有帧都可以被清空,一切从头开始。
-
清空书架:DPB中所有已存在的参考帧被全部清空(标记为“不作为参考”)。
-
上架新书:将当前的IDR帧放入DPB。根据其标识
long_term_reference_flag决定状态:-
若为 0:标记为短期参考帧。
-
若为 1:标记为长期参考帧,索引(
LongTermFrameIdx)设为0。
-
2. 标记与淘汰:遇到非 IDR 帧
对于非IDR帧(如P帧、B帧),更新流程则分为两步:先按规则淘汰旧帧,再将当前帧加入书架。
第一步:执行淘汰策略
解码器会根据码流中的标志位,选择两种淘汰机制之一:
-
自动模式(滑动窗口法):简单粗暴的“先入先出”队列。
-
场景:当
adaptive_ref_pic_marking_mode_flag == 0时。 -
逻辑:如果DPB中的参考帧数量(短期+长期)已达到上限(
max_num_ref_frames),DPB会自动将最早加入的那个短期参考帧移除(标记为“不作为参考”)。长期参考帧不参与此自动淘汰。
-
-
指令模式(自适应内存控制法 - MMCO):精细化的“手动操作”。
-
场景:当
adaptive_ref_pic_marking_mode_flag == 1时。 -
逻辑:码流中包含一系列
memory_management_control_operation(MMCO) 指令,解码器需按顺序执行。这些指令非常灵活,常见的操作包括:
-
| 操作码 (MMCO) | 含义与效果 |
|---|---|
| 1 | 移除特定短期帧:通过指令中的差值计算PicNumX,找到对应的短期帧并移除。 |
| 2 | 移除特定长期帧:直接根据指令中的long_term_pic_num索引,移除对应的长期帧。 |
| 3 | 短期变长期:将某个短期帧转为长期帧,并赋予新的长期索引(LongTermFrameIdx)。 |
| 4 | 调整长期索引上限:设定一个最大值(MaxLongTermFrameIdx),索引超过此值的长期帧会被清空。 |
| 5 | 全部清空:清空DPB中所有的短期和长期参考帧。 |
| 6 | 当前帧变长期:将当前正在解码的帧标记为长期参考帧(见下文)。 |
第二步:标记当前帧
执行完上述淘汰指令后,处理当前解码完成的帧:
-
如果上一步中没有执行 MMCO == 6 的指令,那么当前帧默认被标记为短期参考帧。
-
如果上一步中执行了 MMCO == 6 的指令,那么当前帧被标记为长期参考帧,并使用指令中指定的长期索引。

2200

被折叠的 条评论
为什么被折叠?



