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计算
该类型不能用于包含连续非参考图像的序列中,且解码结果导致输出的顺序与解码顺序相同。