H264---帧间编码---帧间预测编码(2):解码、显示顺序与图像管理

本文深入探讨H264的帧间编码,重点解析解码顺序(frame_num)、显示顺序(POC)及其计算方法。详细介绍了直传模式、预测与差分方式的POC计算,以及图像管理中的参考帧标记和管理策略,如滑动窗口法和自适应内存控制法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

H.264/AVC视频编解码技术详解
GitHub代码地

一、基本概念

nalu按照解码顺序frame_num送入解码器解码
解码后的图像按照播放顺序POC(picture_order_count)进行存储和播放
(由于B帧的存在,解码顺序和显示顺序会有差异)

在这里插入图片描述
frame_num和POC通过slice_header传输:
在这里插入图片描述

某一帧图像在解码完成后,可能会被保存于解码图像缓存中,用于后续图像帧间预测的参考帧。在解码图像缓存中,用于P帧或B帧帧间编码的参考帧图像保存为一个或两个参考帧列表,列表中参考帧的顺序可以通过某个专门的过程进行重排列。

二、解码顺序计数值frame_num(当前slice在GOP中的解码顺序)

在一个GOP中,第一个slice即作为随机接入点的IDR slice,其frame_num值为0,表示当前slice是一个GOP的起点。
GOP中的其他slice按照相应距离IDR的顺序按1递增。
当另一个语法元素gaps_in_frame_num_value_allowed存在时,slice可以以大于1的值递增,此时缺失的frame_num值需要解码器用空slice数据进行填充。

三、显示顺序标志值POC(picture_order_count)

视频中IDR的第一个field作为POC的开始,其值为0。在H.264的标准中,POC的计算方法在标准文档中的8.2.1节中定义。

对于H.264的码流,有三种结构会被赋予POC的值:coded frame(编码帧), coded field(编码场)和complementary field pair(互补参考场对),每种类型的POC都由TopFieldOrderCnt和BottomFieldOrderCnt这两个值的一个或两个组成:
 1、对于每一个编码帧,poc包含两个值TopFieldOrderCnt和BottomFieldOrderCnt;
 2、对于每一个编码场,poc包含一个值,如果该field为顶场则为TopFieldOrderCnt,如果是底场为BottomFieldOrderCnt;
 3、对于每一个互补参考场对,POC包含两个值,对顶场为TopFieldOrderCnt,对底场为BottomFieldOrderCnt;
在H.264中,TopFieldOrderCnt和BottomFieldOrderCnt共定义了3种解析方法,由sps中的值pic_order_cnt_type决定。

3.1 直传模式:pic_order_cnt_type=0

POC的值通过slice_header中的数据计算得到

1、获得中间变量prevPicOrderCntMsb和prevPicOrderCntLsb
2、计算当前帧的PicOrderCntMsb
3、计算TopFieldOrderCnt和BottomFieldOrderCnt
在这里插入图片描述

3.2 预测与差分方式(pic_order_cnt_type=1)

sps中:
在这里插入图片描述

1、获得中间变量prevFrameNum、FrameNumOffset、prevFrameNumOffset
2、计算中间变量absFrameNum、picOrderCntCycleCnt、frameNumInPicOrderCntCycle和expectedPicOrderCnt

if (sps中)num_ref_frames_in_pic_order_cnt_cycle != 0
	absFrameNum = FrameNumOffset + frame_num
else
	absFrameNum = 0
end

另外,若nal_ref_idc值为0且absFrameNum非0,absFrameNum需再减去1:

absFrameNum = absFrameNum − 1

当absFrameNum大于0时,picOrderCntCycleCnt和frameNumInPicOrderCntCycle分别为absFrameNum - 1除以num_ref_frames_in_pic_order_cnt_cycle的商和余数:

picOrderCntCycleCnt = ( absFrameNum − 1 ) / num_ref_frames_in_pic_order_cnt_cycle
frameNumInPicOrderCntCycle = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值