H.264初始化与重排序机制详解

H.264 标准中规定的一套“初始化 + 重排序”流程决定的,

🧐 核心机制:初始化与重排序

简单来说,这个“对应关系”的明确遵循以下两个步骤:

1. 📋 列表初始化

解码器会从 DPB(解码图像缓冲区)中选出合适的参考帧,并按照标准规定的默认顺序进行排列。这个默认顺序因帧类型(P帧或B帧)而异:

帧类型参考帧列表初始排序规则(默认顺序)
P帧RefPicList0 (前向)1. 短期参考帧在前:按 PicNum 从大到小 (由近及远) 降序排列
2. 长期参考帧在后:按 LongTermPicNum 从小到大升序排列
B帧RefPicList0 (前向)1. POC小于当前帧:按 POC 从大到小 (降序) 排列在前
2. POC大于当前帧:按 POC 从小到大 (升序) 排列在后
3. 长期参考帧:最后按 LongTermPicNum 升序排列
B帧RefPicList1 (后向)1. POC大于当前帧:按 POC 从小到大 (升序) 排列在前
2. POC小于当前帧:按 POC 从大到小 (降序) 排列在后
3. 长期参考帧:最后按 LongTermPicNum 升序排列

POC (Picture Order Count) 是图像的显示顺序,而 frame_num 是解码顺序。正因为显示顺序和解码顺序通常不一致,B帧的列表初始化规则才会按 POC 来划分前后向参考帧。

2. 🔄 关键一步:list1的前两个元素交换

list1list0完全相同时,标准中有一个重要的附加规定:

如果RefPicList1(即list1)中的参考帧数量大于1,并且它与RefPicList0(即list0)完全相同,那么必须交换list1中的前两个元素(即RefPicList1[0]RefPicList1[1])。

这步操作的目的非常明确:为了编码效率。如果两个列表完全相同,编码器在宏块预测时,用一位标志位选择list0还是list1就没有意义了,因为结果是一样的。通过强制交换list1的前两个元素,打破了这种同一性,使得两个列表的参考帧顺序产生差异,让编码器有更灵活的选择

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值