H.264 数据分割片
来源:互联网 发布:负卡路里食物 知乎 编辑:程序博客网 时间:2024/05/09 09:11
一帧图像就是一个Access unit,一个图像序列由几个Access unit组成。其中第一个Access unit就是IDR帧,其他的Access unit是非IDR帧(B帧或者P 帧)。I帧的Access unit包括的SEI nalu可以被一个序列的其他p帧或者B帧access unit共享。一组非参数集NALU被称为一个接入单元(Access Unit),delimiter定界后加上定时信息(SEI),后面紧跟基本编码图像(PCP,primary coded picture)。PCP后面是冗余编码图像(CRP,corresponding redundant picture),用于解码中PCP丢失情况下恢复信息。冗余分片允许编码器把在同一个码流中添加同一MB的一个或更多冗余表示。需要注意的是这些冗余片 的编码参数与非冗余片的编码参数不同,例如主片可用低QP(高质量)来编码,而冗余信息中能用一个高QP(低质量)的方式来编码,这样质量粗糙一些但码率 更低。解码器在重构时,首先使用主片,如果它可用就抛弃冗余片;而如主片丢失(比如因为包的丢失)冗余片也能被用于重构。冗余片主要用于支持高误码的移动 环境。 冗余编码图像的计数器redundant_pic_cnt是递增的。序列结束nalu标志着一个Access unit的结束。Nalu type=0,12,19~31不能出现在PCP前面。
一个primary coded picture结束以后,如果紧接着出现了下列Nalu之一则标志着新的一个Access unit开始了:
1. access unit delimiter,这是access unit的第一个nalu,一个access unit只能有一个access unit delimiter定界nalu
2. 序列参数集
3. 图像参数集
4. 定时信息SEI,SEI出现于primary之前。如果SEI包含缓冲期的消息,则应该出现在第一个SEI nalu包的第一个消息。
5. 类型为13~18的Nalu
6. 另一个primary coded picture的第一个VCL nalu,如何判断PCP中的第一个VCL nalu请看下文。
一个PCP 包括一个或者几个slice,第一个VCL nalu有如下特征:
1. Slice header中的frame_num不一样
2. 使用的pic_parameter_set_id不一样
3. field_pic_flag不一样
4. bottom_field_flag不一样
5. nal_ref_idc不一样,其中一个nal_ref_idc=0
6. pic_order_cnt_type=0:pic_order_cnt_lsb不一样,或者delta_pic_order_cnt_bottom不一样
7. pic_order_cnt_type:delta_pic_order_cnt[ 0 ]不一样,或者delta_pic_order_cnt[ 1 ]不一样
8. nal_unit_type不一样,其中一个nal_unit_type=5
9. nal_unit_type=5:idr_pic_i不一样
一幅图像由若干片组成,每片包含一系列的宏块(MB)。MB的排列可按光栅扫描顺序,也可不按扫描顺序。每个片独立解码,不同片的宏块不能 用于自身片中作预测参考。因此,片的设置不会造成误码扩散。灵活的宏块排序FMO是H.264的一大特色,适用于H.264的基本档次和扩展档次的应用。 图像内部预测机制,例如帧内预测或运动矢量预测,仅允许用同一片组里的空间相邻的宏块。FMO通过宏块分配映射技术,把每个宏块分配到不按扫描顺序的片 中。FMO模式划分图像的模式各种各样,重要的有棋盘模式、矩形模式等。当然FMO模式也可以使一帧中的宏块顺序分割,使得分割后的片的大小小于无线网络 的MTU尺寸,经过FMO模式分割后的图像数据分开进行传输。使用FMO的代价是稍微降低了编码效率(因为它打破了原先非邻居MB之间的预测),而且在高 度优化的环境中,有较高的时延。
通常情况下,一个宏块的数据是存放在一起而组成片的,数据划分使得一个片中的宏块数据重新组合,把宏块语义相关的数据组成一个划分,由划分来组装片。H.264视频编码标准使用了三种不同类型的数据分割:
1. A型分割 :A型分割是头信息划分,包括宏块类型、量化参数和运动矢量,这个信息是最重要的。
2. B型分割 :B型分割是帧内信息划分,包括帧内CBPs和帧内系数。帧内信息可以阻止错误的传播,该型数据分割要求给定分片的A型分割有效,相对于帧间信息,帧内信息能更好地阻止漂移效应,因此它比帧间分割更为重要。
3. C型分割:C型分割是帧间信息划分,包括帧间CBPs和帧间系数,一般情况下它是编码分片的最大分区。帧间分割是最不重要的,它的使用要求A型分割有效。
当使用数据分割时,源编码器把不同类型的分割安排在3个不同的缓冲器中,同时分片的尺寸必须进行调整以保证小于MTU长度,因此是编码器而 不是NAL来实现数据分割。在解码器上,所有分割用于信息重建。这样,如果帧内或帧间信息丢失了,有效的帧头信息仍然能用来提高错误隐藏效率,即有效的宏 块类型和运动矢量,保留了宏块的基本特征,从而仍可获得一个相当高的信息重构质量,而仅仅丢失了细节信息。
如果profile/level中规定允许乱序slice(FMO),则I帧可以随意顺序(棋盘模式、矩形模式等等)传输,而B、P帧中的coded slice以及A分割slice data可以随意顺序传输。相同slice_id的A分割slice data优先于B分割,而B分割又优先于C分割。
如果profile/level中规定不允许乱序slice(FMO),则I帧的VCL nalu顺序应该按照MB地址递增(光栅扫描)的顺序进行传输。B、P帧的coded以及A分割slice data按照MB地址递增(光栅扫描)顺序传输。同样的,相同slice_id的A分割slice data优先于B分割,而B分割又优先于C分割。
from:http://blog.chinaunix.net/uid-17053077-id-1987967.html
- H.264 数据分割片
- H.264 数据分割
- H.264数据元素:序列、图像、片、宏块、块
- H.264句法和语法总结(九)片层数据句法
- H.264句法和语法总结(九)片层数据句法
- H.264句法和语法总结(九)片层数据句法
- H.264句法和语法总结(九)片层数据句法
- H.264句法和语法总结(九)片层数据句法
- 图像、帧、片、NALU 学习 H.264
- h.264 图像、帧、片、NALU
- H.264(片及片头语法)
- 图像、片、帧、NALU学习H.264
- DM8168中视频/图像协处理器HDVICP2不支持H.264的数据分割data partition
- H.264中块,宏块,片,图像的关系
- H.264 数据示例
- 分割数据
- 数据报片重组
- H.264学习笔记之二(片及片头语法)
- Java Unsafe
- WPF学习记录-布局[摘抄自博客园(xiepeixing<WPF布局该如何选用panel>与(DotNet菜园<WPF入门教程系列七——布局之WrapPanel与StackPanel(二)>))]
- 如何从本地向阿里云或其他服务器传输文件?
- php设计模式-对象池模式(Object pool)
- 1060. 爱丁顿数(25)
- H.264 数据分割片
- C++ template —— 动多态与静多态(六)
- 高性能JS
- linux访问、登录监管命令who命令详解
- 解决cengos device eth0 does not seem to present 问题
- JavaScript 学习一
- 函数模板、类模板生成静态库
- Adroid之MVC框架_
- Data-Driven Sparse Structure Selection for Deep Neural Networks 论文翻译