当前位置:首页 >> 信息与通信 >>

H.264标准----句法与语义(一)_图文

1.

一些约定
返回该当前字节是否到了字节末尾,是则返回 true Annex B 规定的 字节流 NAL 单元 中使用 指示是否还有后续的数据,是则返回 true

byte_aligned() more_data_in_byte_stream()

more_rbsp_data()

没有更多 RBSP 数据,返回 false 否 则 , 当 搜 索 到 RBSP 中 最 后 一 个 为 1 的 比 特 ( 就 是 rbsp_stop_one_bit , rbsp_trailing_bits() 的 第 一 位 ) , 如 果 rbsp_trailing_bits()之前还有更多 RBSP 数据,则,返回 true; 否则返回 false

more_rbsp_trailing_data( ) next_bits( n )

是否 RBSP 有更多数据,是则返回 true 读取接来下 n 比特数据,不移动指针 不足 n 比特返回 0

read_bits( n )

读取接来下 n 比特数据,并移动指针 n=0 时返回 0

Categories

Slice DataPartition 包括 Category=2 的语义元素 Slice DataPartition 包括 Category=3 的语义元素 Slice DataPartition 包括 Category=4 的语义元素

2.
使用

描述子 (Descriptor)

如果有竖线,左边表示 entropy_coding_mode_flag=0 时使用,竖线右边则为 1 时

ae(v) b(8) ce(v) f(n) i(n)

用 cabac 编码的语义元素 任意形式的 8 比特,解析过程由 read_bits(8)的返回值规定 用 cavlc 编码的语义元素 n 位固定模式比特,解析过程由 read_bits(n)的返回值规定 n 比特有符号整数,如果 n 由 v 代替,则 n 通过其他渠道规定 解析过程由 read_bits(n)的返回值被译成 2 的补码形式规 定 ????
The parsing process for this descriptor is specified by the return value of the function read_bits( n ) interpreted as a two's complement integer representation with

most significant bit written first.

(有符号整数的二进制)

me(v) se(v) te(v) u(n)

指数哥伦布编码的语义元素(Exp_Golomb) 有符号整数指数哥伦布编码的语义元素 截断指数哥伦布编码的语义元素(Truncated EG) 无符号 n 比特整数,如果 n 由 v 代替,则 n 通过其他渠道规定 解析过程由 read_bits(n)的返回值用无符号整数的二进制表示规定 无符号整数指数哥伦布编码的语义元素

ue(v)

3.

数据分割片: 数据分割片:

A:片头和片中每个宏块头数据 B:Intra 和 SI 片宏块的编码残差数据 C:Inter 宏块的编码残差数据 IDR 片不分割 其他片是否分割视情况而定

4.

几个概念之间的关系

每个 NAL 单元包含一个 RBSP RBSP 的头信息定义了 RBSP 单元的类型 SPS:seq_parameter_set_id,帧数,POC 约束,参考帧数目,解码图像尺寸和帧 场编码模式选择标识等 PPS:pic_parameter_set_id,可选的 seq_parameter_set_id,熵编码模式选择标 识,片组数目,初始量化参数和去方块滤波系数调整标识等

5.

NAL 单元句法
C All All All Descriptor f(1) u(2) u(5) forbidden_zero_bit nal_ref_idc nal_unit_type 恒=0,补齐 8 比特用 NAL 单元类型 NAL 单元优先级(0-3)

nal_unit( NumBytesInNALunit ) {

NumBytesInRBSP = 0 nalUnitHeaderBytes = 1 if( nal_unit_type = = 14 | | nal_unit_type = = 20 ) { svc_extension_flag if( svc_extension_flag ) nal_unit_header_svc_extension( ) /* specified in Annex G */ else nal_unit_header_mvc_extension( ) /* specified in Annex H */ nalUnitHeaderBytes += 3 } for( i = nalUnitHeaderBytes; i < NumBytesInNALunit; i++ ) { if( i + 2 < NumBytesInNALunit && next_bits( 24 ) = = 0x000003 ) { rbsp_byte[ NumBytesInRBSP++ ] rbsp_byte[ NumBytesInRBSP++ ] i += 2 emulation_prevention_three_byte /* equal to 0x03 */ } else rbsp_byte[ NumBytesInRBSP++ ] } } All b(8) All f(8) All All b(8) b(8) All All All u(1)

1)

每个 NAL 单元可以有 起始码前缀 和 额外填充单元(填充若干个字节 0 在起

始码前缀前实现每个 NAL 单元长度对齐-------介质存储) 2) 起始码 0x000001,填充 0x000000

防止竞争

0x000000 0x000001 0x000002 0x000003

0x00000300 0x00000301 0x00000302 0x00000303

注意: 在 最后, 注意: RBSP 最后, 如果没有 cabac_zero_word, , 最后一个字节肯定不是 0x00, , 但是如果最后由一个或者多个 cabac_zero_word, ,需要在末尾填上一个 0x03. ,则 因为码流里除了起始, 因为码流里除了起始,其他地方绝不能出现 0x000001 和 0x000000 隔断! 所以就连 cabac_zero_word 出现 0x0000,0x0000,中间也要被 0x03 隔断! , , 3) 每次读一个 NAL 单元,检测到下个 NAL 单元起始码,就可以计算出

NumBytesInNALunit 4) nal_ref_idc:优先级

非 0: 包含序列参数集、 序列参数集 extension, subset 序列参数集, 图像参数集, 参 考图像 slice, 参考图像的 slice data partition, 参考图像 slice 的 NAL 单元前缀 为 0:非参考图像的 slice 或者 slice data partition

-1) 序列参数集、序列参数集 extension,subset 序列参数集, 图像参数集的 nal_ref_idc 不应为 0,如果 nal_ref_idc=0 且 nal_unit_type=1~4,那所有的 nal_unit_type=1~4 的 nal_ref_idc=0 -2) nal_unit_type=5 时,nal_ref_idc 不能为 0 -3) nal_unit_type=6,9,10,11,12 时,nal_ref_idc 为 0

5)

nal_unit_type:
Annex A Content of NAL unit and RBSP syntax structure C NAL unit type class 0 1 未定义 不分区,非 IDR 图像的 slice 2, 3, 4 non-VCL VCL Annex G/H NAL unit type class non-VCL VCL

nal_unit_type

slice_layer_without_partitioning_rbsp( ) 2 3 4 5 6 7 8 9 10 11 12 13 14 slice 分区 A slice_data_partition_a_layer_rbsp( ) slice 分区 B slice_data_partition_b_layer_rbsp( ) slice 分区 C slice_data_partition_c_layer_rbsp( ) IDR 图像 slice slice_layer_without_partitioning_rbsp( ) 补充增强单元信息(SEI) sei_rbsp( ) 序列参数集 seq_parameter_set_rbsp( ) 图像参数集 pic_parameter_set_rbsp( ) Access unit delimiter/分界符 access_unit_delimiter_rbsp( ) 序列结束 end_of_seq_rbsp( ) 码流结束 end_of_stream_rbsp( ) Filler data filler_data_rbsp( ) Sequence parameter set extension seq_parameter_set_extension_rbsp( ) Prefix NAL unit prefix_nal_unit_rbsp( ) 15 Subset sequence parameter set subset_seq_parameter_set_rbsp( ) 16..18 19 保留 Coded slice of an auxiliary coded picture without 2, 3, 4 partitioning slice_layer_without_partitioning_rbsp( ) Coded slice extension slice_layer_extension_rbsp( ) 21..23 24..31 保留 未定义 non-VCL non-VCL non-VCL non-VCL 2, 3, 4 non-VCL non-VCL non-VCL non-VCL 0 non-VCL non-VCL 2 3 4 2, 3 5 0 1 6 7 8 9 10 2 VCL VCL VCL VCL non-VCL non-VCL non-VCL non-VCL non-VCL non-VCL non-VCL non-VCL non-VCL 未使用 未使用 未使用 VCL non-VCL non-VCL non-VCL non-VCL non-VCL non-VCL non-VCL non-VCL suffix dependent

20

non-VCL

VCL

suffix dependent:如果 nal_unit_type=14 之后的 NAL 单元的 nal_unit_type=1/5, 则 是 VCL,否则不是 VCL。解码器忽略 nal_unit_type=14 的 NAL 单元内容。 不影响非 13/19 的 nal_unit_type 单元解码情况下,13/19 的 NAL 单元可以丢弃 不影响非 14/15/20 的 nal_unit_type 单元解码情况下, 14/15/20 的 NAL 单元可以丢 弃 IdrPicFlag = ( ( nal_unit_type = = 5 ) ? 1 : 0 )

6)

svc_extension_flag=1 时,解码器忽略 nal_unit_type=14-20 中关于

svc_extension_flag=0 的一些 NAL 单元 svc_extension_flag=0 时,解码器忽略 nal_unit_type=14-20 中关于 svc_extension_flag=1 的一些 NAL 单元

7)

SODB => RBSP,写入 rbsp_byte[i]

RBSP 最后一个字节 rbsp_trailing_bits(),包含 SODB 最后几个比特(if any),再补上 rbsp_stop_one_bit (1),以及一系列 rbsp_alignment_zero_bit(0,if needed)。 rbsp_trailing_bits()后还要加上最后若干个 cabac_zero_word(0x0000) 句法里没有 该内容

8)

标准中关于 PPS 和 SPS 的翻译:

一个图像参数集 RBSP 包含能被一个或多个编码图像的编码片 NAL 单元或者编码

片分区 A NAL 引用的参数。解码过程最初,每个图像参数集 RBSP 是未激活的。 在解码过程中的某个时刻,最多一个图像参数集 RBSP 被激活,同时这个激活过 程也意味着先前激活的那个图像参数集 RBSP 被反激活。 当一个图像参数集 RBSP(有一个 pic_parameter_set_id )未激活并且被一个编码 片 NAL 单元或者一个编码片分区 A NAL 单元引用(即使用了相同的 pic_parameter_set_id),这个 PPS RBSP 被激活。在被反激活之前,它被称为激 活的 PPS RBSP,直到被反激活。拥有 pic_parameter_set_id 的 PPS RBSP 在激 活之前必须处于可用状态。 任何与激活的 PPS RBSP 拥有相同 pic_parameter_set_id 的 PPS NAL 单元,必须 与激活的 PPS RBSP 内容相同。除非这个 PPS NAL 处在一个编码图像的最后一个 VCL NAL 单元之后,又在另一个编码图像的第一个 VCL NAL 单元之前。 ============================================================= 一个序列参数集 RBSP 包含能被一个或多个图像参数集 RBSP 或者包含缓冲周期 SEI 消息的 SEI NAL 单元引用的参数。解码过程最初,每个序列参数集 RBSP 是 未激活的。在解码过程中的某个时刻,最多一个序列参数集 RBSP 被激活,同时 这个激活过程也意味着先前激活的那个序列参数集 RBSP 被反激活。 当一个序列参数集 RBSP(有一个 seq_parameter_set_id )未激活并且被一个图像 参数集 RBSP 或者一个包含缓冲周期 SEI 消息的 SEI NAL 单元引用(即使用了相同 的 seq_parameter_set_id),这个 SPS RBSP 被激活。在被反激活之前,它被称 为激活的 SPS RBSP,直到被反激活。拥有 seq_parameter_set_id 的 SPS RBSP 在激活之前必须处于可用状态。 注意: 因为 IDR 访问单元的序列参数集 RBSP 必须在整个序列期间处于激活状态, 所以当一个缓冲周期 SEI 消息是 IDR 访问单元的一部分时, 可以激活序列参数集 RBSP。 任何与激活的 SPS RBSP 拥有相同 seq_parameter_set_id 的 PPS NAL 单元,必须 与激活的 SPS RBSP 内容相同。除非这个 SPS NAL 处在一个编码视频序列的最后 一个 VCL NAL 单元之后,又在另一个编码视频序列的第一个包含缓冲周期 SEI 消息的 SEI NAL 单元之前。 ============================================================= 一个序列参数集扩展 RBSP(如果出现)的参数与序列参数集 RBSP 类似,它应该被 认为是前面的有相同 seq_parameter_set_id 的序列参数集 RBSP 的一部分。 如果 该 SPS RBSP 在激活之前没有伴随着拥有相同 id 的 SPS RBSP 扩展,则激活的该 序列参数集无视 SPS RBSP 扩展。
9) 访问单元 access unit----就是一个完整的图像

编码视频序列由一个或多个访问单元组成 编码视频序列由两个 IDR 标定 一个访问单元包含:一个主要编码图像,0 或多个冗余编码图像,0 或多个非 VCL NAL 单元 第一个是 IDR 访问单元,后续全是非 IDR 访问单元 SEI NAL 单元包含属于多个访问单元数据时,它被包含到第一个被应用的访问单元 中

10)

NAL 单元的与访问单元的关系和顺序

------比特流的第一个 NAL 单元作为第一个访问单元的起始 ------在一个基本编码图像的最后一个 VCL NAL 之后,如果出现以下 NAL 单元

访问单元分界符(如果 有) (9) 序列参数集(如果 有) (7) 图像参数集(如果 有) (8) SEI(如果 有) (6) nal_unit_type=14~18(如果 有) 基本编码图像的第一个 VCL NAL
就定义了一个新的访问单元的开始

限制:

a) 当一个访问单元分界符 NAL 单元存在时,它就是第一个 NAL 单元, 并且一个访问单元最多只能有一个它 b) SEI NAL 应该在基本编码图像之前;并且如果包含缓冲周期 SEI 消 息的话,消息必须是访问单元里第一个 SEI NAL 单元的第一个 SEI 消息载荷 c) 基本编码图像应该在冗余编码图像之前,冗余编码图像的顺序按照 redundant_pic_cnt 升序排列 d) 序列参数集扩展 NAL 单元必须紧接着出现在相同 seq_parameter_set_id 的序列参数集 NAL 之后(如果有) e) 辅助编码图像的不分区编码片 NAL 单元必须出现在基本编码图像和 所有冗余编码图像之后(如果有) f) 码流结束 NAL 单元出现的话,它就是最后一个 NAL 单元

g) nal_unit_type=0, 20-31 不应出现在基本编码图像的第一个 VCL 12, NAL 单元之前 h) 如果出现 nal_unit_type=7,8,它们可以不在当前访问单元里被引 用而是被后续的编码图像的访问单元引用

11)

基本编码图像的第一个 VCL NAL 单元

区分当前和之前访问单元不同编码片 NAL 和编码片分区 A NAL 的方法

frame_num 不同(在片头中会详述其意义,只有它不能区分时,以下情况才用到) pic_parameter_set_id 不同 field_pic_flag 不同 bottom_field_flag 都出现且不同 nal_ref_idc 不同且有一个为 0 两者 pic_order_cnt_type=0 且 pic_order_cnt_lsb 或 delta_pic_order_cnt_bottom 不同 两者 pic_order_cnt_type=1 且 delta_pic_order_cnt[0]或 delta_pic_order_cnt[1]不同

IdrPicFlag 不同 IdrPicFlag 都=1 且 idr_pic_id 不同

12)

VCL NAL 单元的顺序

IDR ----允许任意片顺序 允许任意片顺序: 允许任意片顺序 NAL 单元可以任何顺序 ----不允许任意片顺序 不允许任意片顺序: 不允许任意片顺序

非 IDR ----允许任意片顺序 允许任意片顺序: 允许任意片顺序 非 IDR 编码片和编码片分区 A 的 NAL 单 元可以任意顺序

但是同一 slice_Id 的片分区 NAL,A 在 separate_colour_plane_flag = 0 时, B 之前,A 在 C 之前,B 在 C 之前(如果 不同片组之间的 IDR 图像编码片 NAL 单 有) 元不可交织;同一片组内的 IDR 图像编 码片 NAL 单元按照片内第一个宏块地址 ----不允许任意片顺序 不允许任意片顺序: 不允许任意片顺序 递增顺序排列 separate_colour_plane_flag = 0 时, 不同片组之间的非 IDR 图像编码片 NAL 单元/编码片分割 A 的 NAL 单元不可交 separate_colour_plane_flag =1 时, 织; 同一片组内的非 IDR 图像编码片 NAL 相同 color_plane_id 的不同片组之间 单元/编码片分割 A 的 NAL 单元按照片内 的 IDR 图像编码片 NAL 单元不可交织; 第一个宏块地址递增顺序排列;同一 相同 color_plane_id 的同一片组内的 slice_Id 的片分区 NAL,A 在 B 之前,A IDR 图像编码片 NAL 单元按照片内第一 在 C 之前,B 在 C 之前(如果有) 个宏块地址递增顺序排列。不同 color_plane_id 的编码片之间顺序没有 separate_colour_plane_flag =1 时, 限制 相同 color_plane_id 的不同片组之间 的非 IDR 图像编码片 NAL 单元/编码片分 割 A 的 NAL 单元不可交织;相同 color_plane_id 的同一片组内的非 IDR 图像编码片 NAL 单元/编码片分割 A 的 NAL 单元按照片内第一个宏块地址递增 顺序排列;相同 slice_Id 和 color_plane_id 的片分区 NAL,A 在 B 之前,A 在 C 之前,B 在 C 之前(如果有)
nal_unit_type=12 的 NAL 单元不可出现在访问单元中基本编码图像第一个 VCL NAL 单元之前

nal_unit_type=0,24~31(未定义)的 NAL 单元同上 nal_unit_type=20~23(保留)同上

6.

序列参数集层句法
CDescript or profile 0 u(8) 0 u(1) 0 u(1) 0 u(1) 0 u(1) 0 u(1) 0 u(1) 0 u(2) 0 u(8) [0-31] 0 ue(v) level profile_idc constraint_set0_flag constraint_set1_flag constraint_set2_flag constraint_set3_flag constraint_set4_flag constraint_set5_flag reserved_zero_2bits /* equal to 0 */ level_idc seq_parameter_set_id

seq_parameter_set_rbsp( ) {

if( profile_idc = = 100 | | profile_idc = = 110 | | profile_idc = = 122 | | profile_idc = = 244 | | profile_idc = = 44 | | profile_idc = = 83 | | profile_idc = = 86 | | profile_idc = = 118 | | profile_idc = = 128 ) { chroma_format_idc 色度取样格式, ~ 色度取样格式,0~3 0 ue(v)

一起使用, 与 separate_colour_plane_flag 一起使用,不指定则为 1(4:2:0) if( chroma_format_idc = = 3 ) separate_colour_plane_flag 指示 4:4:4 时是否单独编码色度分量 不给定时默认 0 每个基本编码图像包含三个单色编码分量, 每个基本编码图像包含三个单色编码分量,用 color_plane_id 区别 含三个单色编码分量 为 0 时:ChromaArrayType = chroma_format_idc 为 1 时,ChromaArrayType=0 bit_depth_luma_minus8 [0-6] 未给定为 0 0 ue(v) 0 u(1)

BitDepthy=8+bit_depth_luma_minus8 量化参数范围偏移 QpBdOffsety=6* bit_depth_luma_minus8 bit_depth_chroma_minus8 [0-6] 未给定为 0 BitDepthc=8+bit_depth_chroma_minus8 量化参数范围偏移 QpBdOffsetc=6* bit_depth_chroma_minus8 当 ChromaArrayType=0 未使用它 同时当 separate_colour_plane_flag=1 时三个分量都使用 luma 的 bit_depth RawMbBits = 16×16×BitDepthy + 2×MbWidthC×MbHeightC×BitDepthc qpprime_y_zero_transform_bypass_flag 为 1 时:QP′Y 时应用 transform bypass (标准 8.5) 标准 默认): 为 0(默认 :正常 transform 操作 默认 seq_scaling_matrix_present_flag 为 1 时:使用不平坦伸缩 由 seq_scaling_list_present_flag[ i ] , i=0-6/0-11 指定 默认)时 为 0(默认 时:使用平坦伸缩 默认 if( seq_scaling_matrix_present_flag ) for( i = 0; i < ( ( chroma_format_idc != 3 ) ? 8 : 12 ); i++ ) { seq_scaling_list_present_flag[ i ] if( seq_scaling_list_present_flag[ i ] ) if( i < 6 ) scaling_list( 16, x4Flag[ i ]) else 64, –6]) } } log2_max_frame_num_minus4 [0-12] 0 ue(v) scaling_list( ScalingList8x8[ i–6 ], 0 UseDefaultScalingMatrix8x8Flag[ i ScalingList4x4[ i ], 0 UseDefaultScalingMatrix4 0 u(1) 0 u(1) 0 u(1) 0 ue(v)

frame_num 跟解码顺序有关 跟解码顺序有关

pic_order_cnt_type

POC 编码方法 [0-2] POC 标识图像播放顺序 [0-12]

0 ue(v) 0 ue(v)

if( pic_order_cnt_type = = 0 ) log2_max_pic_order_cnt_lsb_minus4

else if( pic_order_cnt_type = = 1 ) { 0 u(1) 为 1 时 delta_pic_order_cnt[0]=0 和 delta_pic_order_cnt[1]=0 且不出现在片头中 为 0 时,delta_pic_order_cnt[0]出现在片头中 出现在片头中 delta_pic_order_cnt[1]可能出现在片头中 可能出现在片头中 offset_for_non_ref_pic 计算非参考帧 POC 0 se(v)

[ offset_for_top_to_bottom_field 计算底场 POC 0 se(v)

[ num_ref_frames_in_pic_order_cnt_cyclePOC 解码过程 [0,255] for( i = 0; i < num_ref_frames_in_pic_order_cnt_cycle; i++ ) offset_for_ref_frame[ i ] POC 解码指定偏移 0 se(v) 0 ue(v)

[ } max_num_ref_frames [0 to MaxDpbFrames] gaps_in_frame_num_value_allowed_flag 为 1 时允许 frame_num 不连续 pic_width_in_mbs_minus1 frame_mbs_only_flag 图像宽度(单位为 图像宽度 单位为 MB) 1:帧,0:帧/场/MBAFF : : 场 0 ue(v) 0 ue(v) 0 u(1) pic_height_in_map_units_minus1 图像高度 单位为 map_unit) 图像高度(单位为 0 u(1) 最大参考帧数量(<=16) 最大参考帧数量 0 ue(v)

if( !frame_mbs_only_flag ) mb_adaptive_frame_field_flag 1:场/MBAFF 0:场/帧 : : 帧 direct_8x8_inference_flag B 片 direct(4*4,8*8)/skip MV 预测方法 当 frame_mbs_only_flag =0 时 direct_8x8_inference_flag =1 frame_cropping_flag if( frame_cropping_flag ) { 是否裁剪后输出 裁剪宽度 0 ue(v) 0 ue(v) 0 ue(v) 0 ue(v) 指示 vui 结构是否出现在码流中 0 u(1) 0 0 0 u(1) 0 u(1) 0 u(1)

frame_crop_left_offset frame_crop_right_offset frame_crop_top_offset frame_crop_bottom_offset } vui_parameters_present_flag if( vui_parameters_present_flag ) vui_parameters( ) rbsp_trailing_bits( ) }

1)

constraint_setX_flag 指相应的一些约束,为 1 时受到约束限制。

这些约束跟 profile,level 有关。4 和 5 跟 SVC,MVC 有关 2) 伸缩比例参数

(1)seq_scaling_matrix_present_flag = 0 时,使用平坦缩放参数 i=0-5 时 Flat_4×4_16[k] = 16 , k=0-15 k=0-63

i=6-11 时 Flat_8×8_16[k] = 16 ,

(2)seq_scaling_matrix_present_flag = 1 时,不使用平坦缩放参数 seq_scaling_list_present_flag[ i ]=1 表示序列参数集中给出了 scaling list i 也就是说使用对应序号 i 的 default scaling list
seq_scaling_list_present_flag[ i ]=0 表示 scaling list i 在 SPS 中未给定,而使用 Scaling list

fall-back rule set A 中的 scaling list 做为 index i 的 scaling list 下表中的 sequence-level scaling list 暂时不知道意思,猜是不进行 PPS 的修正 Value scaling index 0 1 2 3 4 5 6 7 8 of Mnemonic name Block list size Sl_4x4_Intra_Y Sl_4x4_Intra_Cb Sl_4x4_Intra_Cr Sl_4x4_Inter_Y Sl_4x4_Inter_Cb Sl_4x4_Inter_Cr Sl_8x8_Intra_Y Sl_8x8_Inter_Y Sl_8x8_Intra_Cb 4x4 4x4 4x4 4x4 4x4 4x4 8x8 8x8 8x8 MB Component Scaling prediction fall-back set A type Intra Intra Intra Inter Inter Inter Intra Inter Intra Y Cb Cr Y Cb Cr Y Y Cb default scaling list scaling list for i = 0 scaling list for i = 1 default scaling list scaling list for i = 3 scaling list for i = 4 default scaling list default scaling list scaling list for i = 6 9 Sl_8x8_Inter_Cb 8x8 Inter Cb scaling list for i = 7 10 Sl_8x8_Intra_Cr 8x8 Intra Cr scaling list for i = 8 11 Sl_8x8_Inter_Cr 8x8 Inter Cr scaling list for i = 9 list Scaling rule fall-back set B

list Default rule scaling lis

sequence-level scaling list scaling list for i = 0 scaling list for i = 1 sequence-level scaling list scaling list for i = 3 scaling list for i = 4 sequence-level scaling list sequence-level scaling list scaling list for i = 6 scaling list for i = 7 scaling list for i = 8 scaling list for i = 9

Default_4x

Default_4x

Default_4x

Default_4x

Default_4x

Default_4x

Default_8x

Default_8x

Default_

Default_8x

Default_8x

Default_8x

默认的 Default_4×4_Intra、Default_4×4_Inter、Default_8×8_Intra 和 Default_8×8_Inter 标准中 有表可查。[表 7-3,表 7-4]

3)

pic_order_cnt_type 在以下情况不能等于 2

一个非参考帧访问单元之后紧接着出现一个非参考图像的访问单元; 不管场的情况

4)

pic_order_cnt_type= 1 时

ExpectedDeltaPerPicOrderCntCycle = 0 for( i = 0; i < num_ref_frames_in_pic_order_cnt_cycle; i++ ) ExpectedDeltaPerPicOrderCntCycle += offset_for_ref_frame[ i ]

5)

PicWidthInMbs = pic_width_in_mbs_minus1 + 1

PicWidthInSamplesL = PicWidthInMbs * 16 PicWidthInSamplesC = PicWidthInMbs * MbWidthC

pic_height_in_map_units_minus1+1 定义了片组映射单元(slice group map units) 的高 PicHeightInMapUnits = pic_height_in_map_units_minus1 + 1 PicSizeInMapUnits = PicWidthInMbs * PicHeightInMapUnits

6)

frame_mbs_only_flag = 0:编码图像可以是编码帧或者编码场 pic_height_in_map_units_minus1+1 是以宏块为单位的场高度

frame_mbs_only_flag = 1:每个编码图像都是编码帧 pic_height_in_map_units_minus1+1 是以宏块为单位的帧高度 FrameHeightInMbs = ( 2 ? frame_mbs_only_flag ) * PicHeightInMapUnits

frame_mbs_only_flag mb_adaptive_frame_field_flag mapUnit 1 无效 宏块 0(场) 0 宏块 0(帧) 0 垂直宏块组 0 1 宏块对

mb_adaptive_frame_field_flag: =0:不允许一个图像内切换帧/场宏块(默认) =1:允许一个图像内切换帧/场宏块

7) 8)

frame_mbs_only_flag=0 时,direct_8×8_inference_flag=1 如果 frame_cropping_flag = 0,frame_crop_left_offset,

frame_crop_right_offset, frame_crop_top_offset, frame_crop_bottom_offset 都为 0 否则,从 RBSP 中读入
chroma_format_idc = 0 CropUnitX = 1 CropUnitY = 2 – frame_mbs_only_flag chroma_format_idc = 1/2/3 CropUnitX = SubWidthC CropUnitY = SubHeightC * ( 2 – frame_mbs_only_flag )

剪切后: 亮度水平坐标从 CropUnitX*frame_crop_left_offset 到 PicWidthInSamplesL ? ( CropUnitX * frame_crop_right_offset + 1 )
垂直坐标从 CropUnitY * frame_crop_top_offset 到 ( 16 * FrameHeightInMbs ) ?( CropUnitY * frame_crop_bottom_offset + 1 )

当 chroma_format_idc 不为 0 时,亮度坐标为(x,y),相应色度坐标为(x / SubWidthC, y /SubHeightC)

9)

vui_parameters_present_flag 等于 1 表示存在如 Annex E 提到的

vui_parameters( )

7.

图像参数集层句法
CDescript or 图像参数集序号 [0-255] 序列参数集序号[0-31] 序列参数集序号 熵编码模式 1-cabac,0-cavlc , 1 ue(v) 1 ue(v) 1 u(1) 1 u(1) pic_parameter_set_id seq_parameter_set_id entropy_coding_mode_flag

pic_parameter_set_rbsp( ) {

bottom_field_pic_order_in_frame_present_flag 计算 POC 时,除了需要 pic_order_cnt_type 还需要一些参数 1:给定那些参数 0:不给定 使用默认值 : : num_slice_groups_minus1 指明 slice group 个数 唯一能指明是否使用 slice group 模式的句法元素 if( num_slice_groups_minus1 > 0 ) {

1 ue(v)

slice_group_map_type

片组类型 [0-6]

1 ue(v)

if( slice_group_map_type = = 0 ) for(iGroup=0; iGroup<= num_slice_groups_minus1; iGroup++ ) run_length_minus1[ iGroup ] 每个片组连续 map_unit 个数 else if( slice_group_map_type = = 2 ) for(iGroup=0; iGroup < num_slice_groups_minus1; iGroup++) { top_left[ iGroup ] bottom_right[ iGroup ] } else if( slice_group_map_type = = 3 | | slice_group_map_type = = 4 | | slice_group_map_type = = 5 ) { slice_group_change_direction_flag 与 slice_group_change_rate_minus1 一起指明片组类型 slice_group_change_rate_minus1 指明 SliceGroupChangeRate,表明片组大小从一个图像到下一个改变的倍数, ,表明片组大小从一个图像到下一个改变的倍数, 单位 map_unit } else if( slice_group_map_type = = 6 ) { pic_size_in_map_units_minus1 图像的 map_unit 个数 for( i = 0; i <= pic_size_in_map_units_minus1; i++ ) slice_group_id[ i ] 每个 map_unit 的片组 1 u(v) 1 ue(v) 1 ue(v) 1 u(1) 左上区域 右下区域 1 ue(v) 1 ue(v) 1 ue(v)

Ceil( Log2( num_slice_groups_minus1 + 1 ) ) bits } } num_ref_idx_l0_default_active_minus1 list0 队列当前参考帧队列长度 队列当前参考帧队列长度[0-31] num_ref_idx_l1_default_active_minus1 list1 队列当前参考帧队列长度 队列当前参考帧队列长度[0-31] weighted_pred_flag weighted_bipred_idc 是否允许 P/SP 片加权预测 B 片:0 默认加权 1 显式加权 2 隐式加权 1 u(1) 1 u(2) 1 se(v) 1 ue(v) 1 ue(v)

pic_init_qp_minus26 /* relative to 26 */ 亮度分量量化参数初始值 [-26+QpBdOffsetY,+25]

pic_init_qs_minus26 /* relative to 26 */ 亮度分量量化参数初始值 [-26,25] 仅适用于 SP/SI chroma_qp_index_offset 分量量化参数用, 计算 Cb 分量量化参数用, [-12, +12] deblocking_filter_control_present_flag 0:解码器独立计算滤波强度 1:显式控制强度 : : constrained_intra_pred_flag 1:intra 宏块只能用 intra 宏块预测 : 0:无此限制,可以用 inter 宏块 :无此限制, redundant_pic_cnt_present_flag 指明是否出现 redundant_pic_cnt if( more_rbsp_data( ) ) { transform_8x8_mode_flag 1:可能使用 8×8 变换 0: 默认)不使用 8×8 变换 : (默认 : 默认) ( pic_scaling_matrix_present_flag 1:修正 SPS 中 scaling list 0: 默认)使用 SPS 中的,不修改 : (默认 中的, : 默认) ( if( pic_scaling_matrix_present_flag ) for( i = 0; i < 6 + ((chroma_format_idc!=3)?2 : 6 ) * transform_8x8_mode_flag; i++ ) { pic_scaling_list_present_flag[ i ] 1:scaling list 在 PPS 中给出 : 0:scaling list 在 PPS 中未给出,seq_scaling_matrix_present_flag=1, : 中未给出, , 就使用 Scaling list fall-back rule set B 中的 scaling list if( pic_scaling_list_present_flag[ i ] ) if( i < 6 ) scaling_list( 16, x4Flag[ i ] ) else 64, –6])

1 se(v)

1 se(v)

1 u(1)

1 u(1)

1 u(1) 1 u(1)

1 u(1)

1 u(1)

ScalingList4x4[ i ], 1 UseDefaultScalingMatrix4

scaling_list( ScalingList8x8[ i–6 ], 1 UseDefaultScalingMatrix8x8Flag[ i

} second_chroma_qp_index_offset 计算 Cr 分量量化参数用, [-12, +12] 分量量化参数用, } rbsp_trailing_bits( ) } 1 1 se(v)

1)

bottom_field_pic_order_in_frame_present_flag

1:pic_order_cnt_type=0 时,片头给定 delta_pic_order_cnt_bottom pic_order_cnt_type=1 时,片头给定 delta_pic_order_cnt[ 1 ] 0:都不给定 2) slice_group_map_type [0-6]

当 num_slice_groups_minus1 不是 1 时,slice_group_map_type 不能为 3,4,5; 3) redundant_pic_cnt_present_flag

1:redundant_pic_cnt 出现在片头、PPS 指明的 DP B 和 DP C 的 NAL 中 : 0:redundant_pic_cnt 不出现在片头、PPS 指明的 DP B 和 DP C 的 NAL 中 : 4) QPc second_chroma_qp_index_offset 用来与 QPy 和 QPs 做加法得到 Cr 色度分量的 QPc,如果它没给出,就默认等于 chroma_qp_index_offset 5) num_ref_idx_l0_default_active_minus1:当 chroma_qp_index_offset 用来与 QPy 和 QPs 做加法得到 Cb 色度分量的

num_ref_idx_active_override_flag=0 时代表 num_ref_idx_l0_active_minus1


相关文章:
H.264标准---句法与语义(一)_图文.doc
H.264标准---句法与语义(一) - 1. 一些约定 返回该当前字节是否到了
h.264的句法和语义h.264zhengwenwei.doc
h.264句法和语义 h.264zhengwenwei H.264句法和语义 H.264句法和语义 在编码器输出的码流中,数据的基本单位是句法元素,每个 句法元素由若干比特组成...
从Slice_Header学习H.264(一)--片头语法元素介绍.doc
从Slice_Header 学习 H.264(一)--片头语法元素介绍 从 Slice_Header 学习 H.264 写在前面: $ H.264 我是结合标准和毕厚杰的书一块学的。看句法语义时 最...
H.264标准_图文.ppt
简介一、MPEG-4概述 1.MPEG-4的特点 MPEG-4标准的主要特征是采用了基于对象(...H.264标准---句法与语义... 21页 免费 基于H.264标准的视频编解... 62...
H.264视频压缩标准_图文.pdf
H.264 是一个需要许可证才能使用的开放标准, 可支持最当今市场上最高效的视频...通过简单的句法规范简化实施 > 精确匹配解码, 严格规定了编码器和解码器如何进行...
试论现代汉语使动句的句法、语义和语用特征[1]_图文..doc
试论现代汉语使动句的句法语义和语用特征[1]_图文._幼儿读物_幼儿教育_...[17 ]Josep h H. Greenberg , 某些主要跟词序有关的语法 现象 [J ] . ...
H.264概述_图文.ppt
H.264标准概述 概况 基本概念 编解码基本过程及其中关键技术 H.264优势 H.264...宏块是基本的句法和处理单元, 同一像条中的宏块之间相互依赖; 宏块可以进一步...
自然语言处理-第9章 句法和语义的关系_图文.ppt
Chapter 9 句法和语义的关系 2000.04 这一章将讨论联系句子的逻辑
h264_图文.doc
它制定的标准有 H.261、H.263、H.263+等,另一 个是“国际标准化组织 (...的分层结构 H.264 编码器输出的 Bit 流中, 每个 Bit 都隶属于某个句法元素...
语义语法-邵敬敏_图文.ppt
? 由于这一研究取向特别重视语义句法的 决定性作用,是以语义解释作为其标志的, 我们不妨把它命名为“语义语法”。 ? 国内的汉语语法学家在大量的卓有成效的 ...
H.264并行软件解码算法的实现与优化_图文.pdf
一7 2.2.12.2.22.2.3 H.264标准简介………..7H.264编解码的关键技术….....8H.264的句法与语义………一9 2.3多线程并行技术………...
H264详解.pdf
1.引言 H.264 的主要目标: 1.高的视频压缩比 2...2.NAL 语法语义 NAL 层句法: 在编码器输出的码流...一个通用封装格式, 可以适用于有序字节流方式和 IP...
H264视频压缩编码标准_图文.ppt
变换与量化 SLIDE 2 H.264/AVC编解码器 H.264编解码器特点 H.264并不明确地规定一个编解码器如何实现, 而是规定了一个编码的视频比特流的句法, 该比特流...
H264_图文.pdf
H.264标准中,在帧间编码过程中不只使用一 个参考帧进行预测。编码器可以在多...对所有的句法元 素,除了量化系 数外,使用单一 无限扩展的码字 表。 ? 是有...
H.264讲解_图文.ppt
H.264/AVC编解码器 H.264编解码器特点 H.264并不明确地规定一个编解码器如何实现, 而是规定了一个编码的视频比特流的句法, 该比特流的解码方法,各个厂商...
句法语义接口问题_图文.pdf
H043 文献标识码:A 句法语义接口问题陆俭 明( 北京大学汉语语言学研究中心 /中文系,北京 100089)摘要:本文从自 然语言处理的角度探讨句法和语义的接口问 题,...
视频ITU-T H.261 H.263 H.264.doc
媒体存储等一系列应用,促使了许多视频编码标准的...ITU-T 的标准包括 H.261、H.263、H.264,...它在保证原 H.263 标准核心句法和语义不变的...
语法学基本问题之二句法结构关系和语义结构关系_图文.ppt
第四讲语法学基本问题之二句法结构关系和语义结构关系 ? ? 一、两种不同的结构关系句法结构关系、语义结构关系 先看下面的例句语义关系 施事与动作 受...
语义类型与语义选择_图文.ppt
语义类型与语义选择 语义类型 ? ? 奈达 :词语本身的意义可以分为所指意 义和...? ? ? 第一, 句法结构:在一些情况下,一个词使用时的语法特征决 定它的...
正反问句的句法特征及语义分析_图文.pdf
正反问句的句法特征及语义分析方玲玲( 广东工业大学 外事处, 广东 广州 510006 ) 中图分类号: H109. 4 文献标识码: A 文章编号: 1000 - 5455 ( 2010 ) ...
更多相关标签: