当前位置: 代码迷 >> 综合 >> H264/AVC 解码时POC的计算
  详细解决方案

H264/AVC 解码时POC的计算

热度:71   发布时间:2023-12-21 07:15:57.0

POC用于标识图像的播放顺序,同时还用于在对帧间预测片解码时,标记参考图像的初始图象序号,表明下列情况下帧或场之间的图像序号差别:使用直接预测模式的运动矢量推算时;B片中使用固有模式加权预测时;解码器一致性检查时。

264对每个编码帧有两个图像序列号,分别成为顶场序列号(TopFieldOrderCnt)和底场序列号(BottomFieldOrderCnt)。这两个序列号分别指明了相应的顶场/底场相对于前一个IDR图像(或解码顺序中前一个包含memory_management_control_operation=5的参考图像)的第一个输出场的相对位置。

264使用了B帧预测,使得图像序列解码顺序并不一定等于实际播放顺序,但两种顺序之间存在一定的映射关系。264一共定义了三种POC的编码方法,句法元素pic_order_cnt_type就是用来通知解码器该用哪种方法来计算POC。(若当前图像的语法元素memory_management_control_operation等于5,在当前图像解码完成后,进行图像序列号的重新初始化操作)计算POC的流程如下图所示:

264规定了码流中不会出现的三种POC情况:

  • 一个IDR帧的Min(TopFieldOrderCnt, BottomFieldOrderCnt)不等于0
  • 一个IDR顶场的TopFieldOrderCnt不等于0
  • 一个IDR底场的BottomFieldOrderCnt不等于0

同时,264规定码流中不允许存在数据导致TopFieldOrderCnt,BottomFieldOrderCnt,PicOrderCntMsb或FrameNumOffset超出-2^(31)到2^(31)-1的范围。


POC类型为0时的POC计算

当pic_order_cnt_type=0时,基于前一个参考图像(按照解码顺序)的picOrderCntMsb计算当前图像的TopFieldOrderCnt和(或)BottomFieldOrderCnt。


POC类型为1的POC计算

在此情况下,TopFieldOrderCnt和(或)BottomFieldOrderCnt主要基于前一图像(按照解码顺序)的FrameNumOffset来计算。


POC类型为2的POC计算

该类型不能用于包含连续非参考图像的序列中,且解码结果导致输出的顺序与解码顺序相同。