slice_header( )
if(nal_unit_type== 5 )
// idr_pic_id idr 影象的標識。不同的 idr 影象有不同的 idr_pic_id 值。值得注意的是,idr 影象有不等價於 i 影象,只有在作為 idr 影象的 i 幀才有這個句法元素,在場模式下,idr 幀的兩個場有相同的 idr_pic_id 值。idr_pic_id 的取值範圍是 [0,65535],和 frame_num 類似,當它的值超出這個範圍時,它會以迴圈的方式重新開始計數。
idr_pic_id
if(pic_order_cnt_type== 0 )
if(pic_order_cnt_type= = 1 && !delta_pic_order_always_zero_flag)
if(redundant_pic_cnt_present_flag)
// redundant_pic_cnt 冗餘片的 id 號。
redundant_pic_cnt
if(slice_type== b )
// direct_spatial_mv_pred_flag 指出在b影象的直接**的模式下,用時間**還是用空間**。1:空間**;0:時間**。
direct_spatial_mv_pred_flag
if(slice_type= = p | |slice_type= = sp | |slice_type= = b )
}
// 參考幀佇列重排序(reordering)句法
ref_pic_list_reordering( )
if( (weighted_pred_flag&& (slice_type== p | |slice_type== sp ) ) | |
(weighted_bipred_idc== 1 &&slice_type== b ) )
// 加權**句法
pred_weight_table( )
if(nal_ref_idc!= 0 )
// 參考幀佇列標記(marking)句法
dec_ref_pic_marking( )
if( entropy_coding_mode_flag && slice_type != i && slice_type != si )
// cabac_init_idc 給出 cabac 初始化時**的選擇,範圍 0 到 2。
cabac_init_idc
// slice_qp_delta 指出在用於當前片的所有巨集塊的量化引數的初始值。sliceqpy = 26+ pic_init_qp_minus26 + slice_qp_delta 範圍是 0 to 51。 h.264 中量化引數是分影象引數集、片頭、巨集塊頭三層給出的,前兩層各自給出乙個偏移值,這個句法元素就是片層的偏移。
slice_qp_delta
if(slice_type= = sp | |slice_type= = si )
if(deblocking_filter_control_present_flag)
}
if(num_slice_groups_minus1> 0 &&
slice_group_map_type>= 3 &&slice_group_map_type<= 5)
// slice_group_change_cycle 當片組的型別是 3, 4, 5,由句法元素可獲得片組中 對映單元的數目:
slice_group_change_cycle
}
H264句法和語法總結(二)NAL層語法
如下圖 2 如何判斷幀型別 是影象參考幀還是i p幀等 nalu型別是我們判斷幀型別的利器,從官方文件中得出如下圖 我們還是接著看最上面圖的碼流對應的資料來層層分析,以00 00 00 01分割之後的下乙個位元組就是nalu型別,將其轉為二進位制資料後,解讀順序為從左往右算,如下 長度 1byte ...
H264的句法和語義 二
1.2 句法元素的分層結構 1.2.1 句法元素與變數 編碼器將資料編碼為句法元素然後依次傳送。在解碼器端,通常要將句法元素作求值計算,得出一些中間資料,這些中間資料就是h.264定義的變數。圖1 從句法元素解出變數 pic width in mbs minus1 是解碼器直接從碼流中提取的句法元素...
H 264學習筆記之二(片及片頭語法)
1片層句法 不分割槽 句法 c desc slice layer without partitioning rbsp while reordering of pic nums idc 3 if slice type b while reordering of pic nums idc 3 表13re...