seq_parameter_set_rbsp( ) {
// profile_idc level_idc 指明所用 profile、level profile_idc // constraint_set0_flag 等于 1 時(shí)表示必須遵從附錄 A.2.1 所指明的所有制約條件。等于 0 時(shí)表示不必遵從所有條件。 constraint_set0_flag // constraint_set1_flag 等于 1 時(shí)表示必須遵從附錄 A.2.2 所指明的所有制約條件。等于 0 時(shí)表示不必遵從所有條件。 constraint_set1_flag // constraint_set2_flag 等于 1 時(shí)表示必須遵從附錄 A.2.3 所指明的所有制約條件。等于 0 時(shí)表示不必遵從所有條件。 constraint_set2_flag // reserved_zero_5bits 在目前的標(biāo)準(zhǔn)中本句法元素必須等于 0,其他的值保留做將來(lái)用,解碼器應(yīng)該忽略本句法元素的值。 reserved_zero_5bits /* equal to 0 */ level_idc // seq_parameter_set_id 指明本序列參數(shù)集的 id 號(hào),這個(gè) id 號(hào)將被 picture 參數(shù)集引用,本句法元素的值應(yīng)該在[0,31]。 seq_parameter_set_id // log2_max_frame_num_minus4 這個(gè)句法元素主要是為讀取另一個(gè)句法元素 frame_num 服務(wù)的,frame_num 是最重要的句法元素之一,它標(biāo)識(shí)所屬圖像的解碼順序 。這個(gè)句法元素同時(shí)也指明了 frame_num 的所能達(dá)到的最大值: MaxFrameNum = 2*exp( log2_max_frame_num_minus4 + 4 ) log2_max_frame_num_minus4 // pic_order_cnt_type 指明了 poc (picture order count) 的編碼方法,poc 標(biāo)識(shí)圖像的播放順序。由poc 可以由 frame-num 通過(guò)映射關(guān)系計(jì)算得來(lái),也可以索性由編碼器顯式地傳送。 pic_order_cnt_type if( pic_order_cnt_type == 0 ) // log2_max_pic_order_cnt_lsb_minus4 指明了變量 MaxPicOrderCntLsb 的值: MaxPicOrderCntLsb = pow(2, (log2_max_pic_order_cnt_lsb_minus4 + 4) ) log2_max_pic_order_cnt_lsb_minus4 else if( pic_order_cnt_type == 1 ) { // delta_pic_order_always_zero_flag 等于 1 時(shí),句法元素 delta_pic_order_cnt[0]和 delta_pic_order_cnt[1] 不在片頭出現(xiàn),并且它們的值默認(rèn)為 0; 本句法元素等于 0 時(shí),上述的兩個(gè)句法元素將在片頭出現(xiàn)。 delta_pic_order_always_zero_flag // offset_for_non_ref_pic 被用來(lái)計(jì)算非參考幀或場(chǎng)的 POC,本句法元素的值應(yīng)該在[pow(-2, 31) , pow(2, 31) – 1]。 offset_for_non_ref_pic // offset_for_top_to_bottom_field 被用來(lái)計(jì)算幀的底場(chǎng)的 POC, 本句法元素的值應(yīng)該在[pow(-2, 31) , pow(2, 31) – 1]。 offset_for_top_to_bottom_field // num_ref_frames_in_pic_order_cnt_cycle 被用來(lái)解碼POC, 本句法元素的值應(yīng)該在[0,255]。 num_ref_frames_in_pic_order_cnt_cycle // offset_for_ref__frame[i] 用于解碼 POC,本句法元素對(duì)循環(huán)num_ref_frames_in_pic_order_cycle 中的每一個(gè)元素指定一個(gè)偏移。 for( i = 0; i < num_ref_frames_in_pic_order_cnt_cycle; i++ ) offset_for_ref_frame[ i ] } // num_ref_frames 指定參考幀隊(duì)列可能達(dá)到的最大長(zhǎng)度,解碼器依照這個(gè)句法元素的值開(kāi)辟存儲(chǔ)區(qū),這個(gè)存儲(chǔ)區(qū)用于存放已解碼的參考幀,H.264 規(guī)定最多可用 16 個(gè)參考幀,本句法元素的值最大為 16。值得注意的是這個(gè)長(zhǎng)度以幀為單位,如果在場(chǎng)模式下,應(yīng)該相應(yīng)地?cái)U(kuò)展一倍。 num_ref_frames // gaps_in_frame_num_value_allowed_flag 這個(gè)句法元素等于 1 時(shí),表示允許句法元素 frame_num 可以不連續(xù)。當(dāng)傳輸信道堵塞嚴(yán)重時(shí),編碼器來(lái)不及將編碼后的圖像全部發(fā)出,這時(shí)允許丟棄若干幀圖像。 gaps_in_frame_num_value_allowed_flag // pic_width_in_mbs_minus1 本句法元素加 1 后指明圖像寬度,以宏塊為單位: PicWidthInMbs = pic_width_in_mbs_minus1 + 1 通過(guò)這個(gè)句法元素解碼器可以計(jì)算得到亮度分量以像素為單位的圖像寬度: PicWidthInSamplesL = PicWidthInMbs * 16 pic_width_in_mbs_minus1 // pic_height_in_map_units_minus1 本句法元素加 1 后指明圖像高度: PicHeightInMapUnits = pic_height_in_map_units_minus1 + 1 pic_height_in_map_units_minus1 // frame_mbs_only_flag 本句法元素等于 0 時(shí)表示本序列中所有圖像的編碼模式都是幀,沒(méi)有其他編碼模式存在;本句法元素等于 1 時(shí) ,表示本序列中圖像的編碼模式可能是幀,也可能是場(chǎng)或幀場(chǎng)自適應(yīng),某個(gè)圖像具體是哪一種要由其他句法元素決定。 frame_mbs_only_flag // mb_adaptive_frame_field_flag 指明本序列是否屬于幀場(chǎng)自適應(yīng)模式。mb_adaptive_frame_field_flag等于1時(shí)表明在本序列中的圖像如果不是場(chǎng)模式就是幀場(chǎng)自適應(yīng)模式,等于0時(shí)表示本序列中的圖像如果不是場(chǎng)模式就是幀模式。。表 列舉了一個(gè)序列中可能出現(xiàn)的編碼模式: if( !frame_mbs_only_flag ) mb_adaptive_frame_field_flag // direct_8x8_inference_flag 用于指明 B 片的直接和 skip 模式下運(yùn)動(dòng)矢量的預(yù)測(cè)方法。 direct_8x8_inference_flag // frame_cropping_flag 用于指明解碼器是否要將圖像裁剪后輸出,如果是的話(huà),后面緊跟著的四個(gè)句法元素分別指出左右、上下裁剪的寬度。 frame_cropping_flag if( frame_cropping_flag ) { frame_crop_left_offset frame_crop_right_offset frame_crop_top_offset frame_crop_bottom_offset } // vui_parameters_present_flag 指明 vui 子結(jié)構(gòu)是否出現(xiàn)在碼流中,vui 用以表征視頻格式等額外信息。 vui_parameters_present_flag if( vui_parameters_present_flag ) vui_parameters( ) rbsp_trailing_bits( ) } |
|
來(lái)自: 開(kāi)花結(jié)果 > 《H264》