编码顺序、frame_num和POC
来源:互联网 发布:淘宝店店铺转让 编辑:程序博客网 时间:2024/06/06 16:43
一、基本概念
1、编码顺序
H.264的码流输出顺序便是编码顺序,所以在编码B帧的时候,由于B是双向预测,需要先编码后面编码帧P/I,这时候先输出I/P,后面才有B帧,我们在解码段拿到相应的I/P帧后,不能马上丢到buffer list里面,还需要等待后面的B帧,解码B帧后再reorder。
2、frame_num
每个参考帧都有一个依次连续的frame_num 作为它们的标识,这指明了各图像的解码顺序。在非参考帧的slice header中也会出现frame_num,不过该语法元素只有在参考帧才有意义。H.264 对frame_num 的值作了如下规定: 当参数集中的句法元素gaps_in_frame_num_value_allowed_flag 不为1 时,每个图像的frame_num 值是它前一个参考帧的frame_num 值增加1。这句话包含有两层意思。
(1)当gaps_in_frame_num_value_allowed_flag 不为1,即frame_num 连续的情况下,每个图像的frame_num 由前一个参考帧图像对应的值加1,着重点是“前一个参考帧”。
(2)当gaps_in_frame_num_value_allowed_flag 等于1,这时若网络阻塞,编码器可以将编码后的若干图像丢弃,而不用另行通知解码器。在这种情况下,解码器必须有机制将缺失的frame_num 及所对应的图像填补,否则后续图像若将运动矢量指向缺失的图像将会产生解码错误。
frame_num 是循环计数的,即当它到达MaxFrameNum 后又从0 重新开始新一轮的计数。解码器必须要有机制检测这种循环,
3、POC
Picture Order Count,即图像顺序号,主要用于标识图象的播放顺序,同时还用于在对帧间预测片解码时,标记参考图像的初始图像序号,表明下列情况下帧或场之间的图像序号差别:
(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;
(2)第1和2个图像虽然在第4个图像之后,但是,在编码顺序上,第4个图像在他们之前且是参考帧,因此他们的frame_num的值为1 + 1 = 2。
3、POC标识图像的显示顺序,因此递增的顺序和图像顺序是一致的,不过有其自己的循环,当达到最大值时,重新开始递增。POC是针对场而言的,因此每个图像都会包括顶场顺序号和底场顺序号。表1和表2中只给出了每个图像中一个场的编号。
- 编码顺序、frame_num和POC
- 编码顺序、frame_num和POC
- 编码顺序、frame_num和POC
- 编码顺序、frame_num和POC
- POC和frame_num的概念
- POC,和frame_num的概念(转)
- PoC
- PoC
- POC
- POC
- POC
- 编码格式互相转换顺序和次数
- CVE-2013-1488 分析和PoC
- .NET(C#):字符编码(Encoding)和字节顺序标记(BOM)
- PoC TBCP消息解析和构造的JAVA实现
- 电路域PoC系统的实现方式和特点
- ElasticSearch Groovy远程代码执行POC和exp
- 编写poc和exploit的几款常用工具介绍
- python pandas (ix & iloc &loc) 的区别
- 为PowerApps和Flow,Power BI开发自定义连接器
- deeplearning.ai 第四课第二周,keras导航
- 购物车批量删除
- RPC、SQL、NFS属于OSI的哪一层
- 编码顺序、frame_num和POC
- Anagrams问题 关键字:数组运算 字符操作
- linux redis安装
- [吴恩达 DL] Class1 Week3 浅层神经网络+代码实现
- padding和margin区别以及常用法
- 如何去掉 Liferay 页面下方的 Powered by Lifray
- 前端涉及的知识体系
- 基于caffe的多标签端到端车牌识别
- CS 400 Path Union 思维+贪心