http://wenku.baidu.com/view/6f0bf60d844769eae009eddf.html: 解码流程
http://wenku.baidu.com/view/15b4c8a5b0717fd5360cdc4a.html: 帧format
http://wenku.baidu.com/view/77ed4c1755270722192ef7ec.html: 码流结构
http://wenku.baidu.com/view/00bb007b31b765ce050814a9.html: 格式
http://wenku.baidu.com/view/29636bc2aa00b52acfc7cab7.html: 格式解释
h264中文标准的翻译不敢恭维。
nal中包含rbsp, rbsp是字节对齐的。 rbsp以rbsp_stop_one_bit及其补0位对齐的。 rbsp里可能包含sodb, sodb最后一位后面是rbsp_stop_one_bit. 这个不是字节对齐的。
在rbsp后面可以(不是必定)有大于等于一个0x0000的16位的cabac_zero_word。 _rbsp是后缀吧。当有cabac_zero_word时, 后面应插入0x03. 这个0x03
的字节是在nal的层面来讲的。
字节对齐的0x000000, 0x000001, 0x000002不应在nal单元出现,字节对齐的0x000003除了0x00000300, 0x00000301, 0x00000302, 0x00000302, 0x00000303之外不应出现(因为03是补丁字节)。
为何nal序列里面不能有0x000002?
图像参数集rbsp的参数可以被一个或多个编码图像的编码条带NAL 单元或编码条带数
据分割块A 的NAL 单元使用
任意时刻, 只有一个图像参数集激活。 新的激活使旧的吊销。 激活是由于该图像参数的pic_parameter_set_id被编码图像的编码条带NAL 单元或编码条带数
据分割块A 的NAL 单元(a coded slice NAL unit or coded slice data partition A NAL unit)使用
vcl nal: type为1,5的nal。任何含pic_parameter_set_id的用于活动图像参数集rbsp的参数集nal单元应与该活动图像参数集rbsp具有相同的内容。,除非它是位于一个编码图像的最后一个VCL NAL 单元之后,另一个编码图像的第一个VCL NAL单元之前。
一个序列参数集RBSP 包括可能被一个或多个图像参数集RBSP 或者一个或多个包含一个缓冲周期SEI 消息的SEI NAL单元引用的参数。类型为7. 也是只有一个激活。由指定该seq_parameter_set_id的图像参数集RBSP 或者一个或多个包含一个缓冲周期SEI 消息的SEI NAL单元激活。
注 2 — 由于一个IDR访问单元开始了一个新的编码视频序列并且一个激活的序列参数集RBSP在整个编码视频序
列中必须保持活动状态,当缓冲周期SEI消息是IDR访问单元的一部分时,一个序列参数集RBSP可以仅由该缓冲
周期SEI消息激活(a sequence parameter set RBSP can only be activated by a buffering period SEI
message when the buffering period SEI message is part of an IDR access unit)。
序列参数集RBSP也可在vcl nal之后。它还可位于第一个包含一个缓冲周期SEI消息(当出现时)的SEI NAL单元之前。
序列参数集扩展RBSP 应当作前面的具有同样seq_parameter_set_id值的序列参数集RBSP的一部分。当一个序列参数集RBSP存在,并且
其后面没有跟随一个在序列参数集RBSP 激活之前且具有同样seq_parameter_set_id 值的序列参数集扩展RBSP,
对于活动序列参数集RBSP来说,该序列参数集扩展RBSP及其语法元素应被当作不存在(未跟一个同样seq_parameter_set_id 值的序列参数集扩展RBSP)
每个编码视频序列的第一个访问单元是IDR 访问单元。该编码视频序列中所有后续的访问单元都是非IDR
访问单元。
access unit: A set of NAL units always containing exactly one primary coded picture. In addition to the
primary coded picture, an access unit may also contain one or more redundant coded pictures or other NAL
units not containing slices or slice data partitions of a coded picture. The decoding of an access unit always
results in a decoded picture.: 一帧加其他信息
一个访问单元由一个基本编码图像、零或多个相应的冗余编码图像以及零或多个非VCL NAL 单元组成
— 访问单元分隔NAL单元(存在时)
— 序列参数集NAL单元(存在时)
— 图像参数集NAL单元(存在时)
— SEI NAL单元(存在时)
— nal_unit_type值在14-18之间(包括)的NAL单元 (这个case在ffmpeg中未处理。 这些类型是保留的类型)
— 基本编码图像的第一个VCL NAL单元(总是存在)---(在ffmpeg中, 这是通过foundend 函数的state <= 5分支中发现v = 1/2/5且字节等于0x80来处理的)
序列参数集NAL单元或图像参数集NAL单元可以在一个访问单元中出现,但不能在该访问单元的基本编
码图像的最后一个VCL NAL单元之后,因为这种情况将代表一个新的访问单元的开始
这个要求跟前面的
“vcl nal: type为1,5的nal。任何含pic_parameter_set_id的用于活动图像参数集rbsp的参数集nal单元应与该活动图像参数集rbsp具有相同的内容。,除非它是位于一个编码图像的最后一个VCL NAL 单元之后,另一个编码图像的第一个VCL NAL单元之前。
”
让人难以理解。是说码流中不能有这种情况, 还是说如果有这种情况, 就算是新帧的开始? 如果算新帧开始的话, 是不是说,在参数集nal和基本编码nal之间不能出现访问单元分隔符?
咨询了一下, 认为这个算新帧, 不算错。
视屏的质量由两方面判定: 一是主观感觉, 一是通过s/n信噪比来衡量。
当前的帧间, 帧内编码属于基于波形的编码方式。 而基于内容的编码方式则是考虑物体的形状, 纹理, 运动等(类似矢量方法)。对于立体编码, 还有位差估计。
光线在ccd/cmos摄像头中要经过如下预处理:
1. 经过滤镜阵列
2. 插值得到rgb
3. 色彩校正(color correction): 棱镜、滤镜, 光照条件影响
4. 伽马校正: 用于校正电压和输出强度之间的比例关系到线性。实际是显示器这边的衰减特性。 (在摄像头这边校正?)。
5. 图像增强: 平滑, 锐化,直方图均衡, 白平衡(消除环境光的差别造成的对同一颜色的不同偏差, 也即消除色温的影响。 色温以达尔文温度为单位, 色温大时, 偏兰, 色温低时, 偏红。 所以消除白平衡就是调整r/b通道的感应增益)
信噪比:
h264可以有最多16个参考帧。所谓多帧是需要先缓冲后向帧的。
帧内压缩取相邻像素的加权值均方差,得到预测帧, 传送其预测帧跟实际帧的差值给解码器恢复。
帧间压缩利用帧之间的相似性, 以块为单位, 估计块的运动矢量, 由此得到预测帧, 传送预测帧与实际帧的差值和运动矢量给解码器恢复。 为进一步利用相关性, 还可对运动矢量进行估计。由于帧间移动未必是整像素的,需要考虑亚像素的情况, h264中用1/4像素单位。另外还需要用obmc(重叠块运动补偿)来refine 运动矢量的误差的。 之所以需要这个补偿, 是因为运动矢量的计算假定运动是刚性的。
运动矢量的预测有四种方法: 分为空间的中值预测(取左, 上, 右上的运动矢量预测当前矢量),空间域的上层块模式运动矢量(根据当前块的像素大小来选择相应的其它像素大小的块的矢量来预测, h264有7中块大小模式: 16x16, 8x16, 16x8, 8x8, 8x4, 4x8, 4x4). 时间域的前帧对应块运动矢量预测(利用前后帧相同像素位置的运动矢量的相关性), 邻近参考帧运动矢量预测(利用前后帧相同块的相关性)。 空间上的矢量预测的质量要好些。
下面是一段关于avc和264区别的讨论, 东西是同一个东西, 只不过由不同的组织去表述:
| |
相关帖子
自强不息 厚德载物
| |
|
| |
| ||
|
| |
自强不息 厚德载物
| ||
|
|