H264---编码顺序、frame_num和POC

一、基本概念

1、编码顺序

H.264的码流输出顺序便是编码顺序,所以在编码B帧的时候,由于B是双向预测,需要先编码后面编码帧P/I,这时候先输出I/P,后面才有B帧,我们在解码段拿到相应的I/P帧后,不能马上丢到buffer list里面,还需要等待后面的B帧,解码B帧后再reorder。

2、frame_num(图像的解码顺序)

参考帧和非参考帧的slice_header均有frame_num,但该语法元素只有在参考帧才有意义。

3、POC(图像播放顺序号)

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

POC和frame_num之间存在一定的映射关系,当pic_order_cnt的值为1或者2的时候,可以通过frame_num来获得POC。
二、简单的例子

一个简单的视频序列如表1和表2所以,表1按图像顺序,表2按编码顺序。

表1 按图像顺序的视频序列
在这里插入图片描述

表2 按编码顺序的视频序列
在这里插入图片描述

说明:

1、图像顺序和编码顺序不是对应的关系,比如图像顺序为4的P帧,是图像顺序为1和2的参考帧,虽然在这两个帧之后,但是需要在他们在前进行编码。

2、frame_num按照编码的顺序从0递增,当达到最大值3后,从0重新开始递增。每个图像的frame_num为它前一个参考图像的frame_num + 1。比如:

(1)第4个图像,虽然在第1和2个图像之后,但是它前面的参考图像是第0个图像,因此,其frame_num的值为0 + 1 = 1;

扫描二维码关注公众号,回复: 11507994 查看本文章

(2)第1和2个图像虽然在第4个图像之后,但是,在编码顺序上,第4个图像在他们之前且是参考帧,因此他们的frame_num的值为1 + 1 = 2。

3、POC标识图像的显示顺序,因此递增的顺序和图像顺序是一致的,不过有其自己的循环,当达到最大值时,重新开始递增。POC是针对场而言的,因此每个图像都会包括顶场顺序号和底场顺序号。表1和表2中只给出了每个图像中一个场的编号。

https://www.cnblogs.com/TaigaCon/p/3551001.html

https://www.cnblogs.com/545235abc/p/4092034.html

http://www.360doc.com/content/13/0916/10/9008018_314775865.shtml
https://www.jianshu.com/p/4f988d5af787

猜你喜欢

转载自blog.csdn.net/qq_42024067/article/details/107535673
今日推荐