一幅圖像可以劃分爲一個或多個SS,同一幅圖像中所有SS都用同一個圖像參數集(Picture Parameter Set,PPS)。PPS中存在一些和SPS相同的參數,PPS會覆蓋SPS中相應的值,即SS會使用PPS中的這些參數進行解碼。在解碼開始時所有PPS都處於非活動狀態,而且在解碼的任意時刻最多隻有一個PPS處於激活狀態。當某幅圖像解碼過程中引用了某個PPS,該PPS就處於激活狀態直到該圖像解碼結束。
PPS的語法元素可以分爲以下幾個部分:
-
編碼工具的可用性標誌。指明片頭中一些工具是否可用。這些編碼工具主要包括符號位隱藏、幀內預測受限、去方塊濾波、P/B圖像的加權預測、環路濾波跨越片邊界或Tile邊界、Transform skip模式和transform bypass模式。
-
量化過程相關句法元素。包括每個slice中QP初始值及計算每個CU的QP時所需的參數。此外,還有亮度量化參數的偏移量和由它導出的色度量化參數的偏移量等。
-
Tile相關句法元素。包括Tile劃分模式的可用性標誌,以及在使用Tile劃分模式時的一些參數,例如Tile的劃分形式,總行數、總列數及第幾行、第幾列的標識等。
-
去方塊濾波相關句法元素。包括去方塊濾波的可用性標誌以及使用去方塊濾波時的一些控制信息和參數,如去方塊濾波的默認補償值beta和tC。
-
片頭的控制信息。包括當前片是否爲依賴片、片頭中是否有額外的slice頭比特、圖像解碼順序與輸出順序的先後關係以及CABAC中確定上下文變量初始化表格時使用的方法等。
-
其他編碼一幅圖像時公用的信息。包括ID標識符、參考圖像數目和並行產生merge候選列表的能力等。其中ID標識符用於標識當前活動的參數集,主要是當前活動的PPS的ID和其引用的SPS的ID。此外,PPS中還包括變換矩陣信息是否存在的標誌位,這一變換矩陣若存在便會對SPS中的該信息進行覆蓋。
pps_pic_parameter_set_id:PPS標識符,取值爲0~63。
pps_seq_parameter_set_id:表示當前PPS激活的SPS的ID值sps_seq_parameter_set_id。取值爲0~15。
dependent_slice_segments_enabled_flag:表示slice segment headers中是否存在dependent_slice_segment_flag 語法元素。用於判斷當前SS(slice segment)是否有依賴片。
output_flag_present_flag:表示slice headers中是否存在pic_output_flag語法元素。影響解碼圖像的輸出和移除過程。
num_extra_slice_header_bits:表示slice頭的RBSP中額外slice頭比特數,取值爲0~2。其他值留將來使用。
sign_data_hiding_enabled_flag:表示是否允許使用符號位隱藏技術。
cabac_init_present_flag:表示slice headers中是否存在cabac_init_flag語法元素。用於判斷CABAC中使用何種方法確定上下文變量的初始值。
num_ref_idx_l0_default_active_minus1:當 num_ref_idx_active_override_flag =0時,表示P slice和B slice的num_ref_idx_l0_active_minus1的默認值。取值爲0~14。
num_ref_idx_l1_default_active_minus1 :當 num_ref_idx_active_override_flag =0時,表示P slice和B slice的num_ref_idx_l1_active_minus1的默認值。取值爲0~14。
init_qp_minus26:指定slice亮度分量的QP的初始值。取值爲-(26+QpBdOffsety)~25。
constrained_intra_pred_flag:表示幀內預測是否受限,即是否允許採用幀間預測模式的鄰近塊的信息進行幀內預測。
transform_skip_enabled_flag:表示在殘差編碼語法中是否存在transform_skip_flag,transform_skip_flag用於表示殘差編碼是否是transform skip模式。
cu_qp_delta_enabled_flag:其值爲1表示在PPS中存在 diff_cu_qp_delta_depth語法元素,在變換單元和調色板語法中可能存在 cu_qp_delta_abs。其值爲0表示兩個語法元素都不存在。
diff_cu_qp_delta_depth :表示在傳輸cu_qp_delta_abs和cu_qp_delta_sign_flag的編碼單元中亮度CTB尺寸和最小亮度CB尺寸的差值。取值在0~log2_diff_max_min_luma_coding_block_size間。
Log2MinCuQpDeltaSize = CtbLog2SizeY − diff_cu_qp_delta_depth
pps_cb_qp_offset和 pps_cr_qp_offset:表示色度分量Cb和Cr的量化參數分別相對於亮度分量量化參數的偏移量,取值爲-12~12。
pps_slice_chroma_qp_offsets_present_flag:表示slice header中是否存在slice_cb_qp_offset和 slice_cr_qp_offset語法元素。
weighted_pred_flag:表示P slice是否使用加權預測。
weighted_bipred_flag:表示B slice是否使用加權預測。
transquant_bypass_enabled_flag:表示是否存在cu_transquant_bypass_flag語法元素。cu_transquant_bypass_flag用於判斷是否爲transquant bypass模式,即是否跳過伸縮變換和環路濾波過程。
tiles_enabled_flag:等於1表示參考該PPS的所有圖像都劃分爲多個tile;等於0表示參考該PPS的圖像都只包含1個tile。
爲了保持碼流一致性同一個CVS內的所有PPS的tiles_enabled_flag值應該相同。
entropy_coding_sync_enabled_flag:表示是否使用熵編碼同步機制。
num_tile_columns_minus1:該圖像劃分的tile總列數,取值0~PicWidthInCtbsY − 1間。
num_tile_rows_minus1:該圖像劃分的tile總行數,取值0~PicHeightInCtbsY− 1間。
uniform_spacing_flag:表示圖像的tile列邊界和行邊界分佈是否一致。
column_width_minus1[ i ]:表示第i個tile列的寬度(以CTB爲單位)。
row_height_minus1[ i ]:表示第i個tile行的高度(以CTB爲單位)。
loop_filter_across_tiles_enabled_flag:表示是否允許環路濾波操作跨越tile邊界。
pps_loop_filter_across_slices_enabled_flag:表示是否允許環路濾波操作跨越slice的左邊界和上邊界。
deblocking_filter_control_present_flag:表示PPS中是否存在去方塊濾波的控制信息。
deblocking_filter_override_enabled_flag:表示slice headers中是否存在deblocking_filter_override_flag語法元素。
pps_deblocking_filter_disabled_flag:表示當PPS在不存在slice_deblocking_filter_disabled_flag語法元素時slice是否使用去方塊濾波操作。
pps_beta_offset_div2和pps_tc_offset_div2:給出去方塊濾波默認參數beta和tC(除以2)的偏移值。取值都在-6~6間。
pps_scaling_list_data_present_flag:表示當前PPS是否存在縮放矩陣的信息,若存在則覆蓋SPS中相應信息。
lists_modification_present_flag:表示SS header中是否存在ref_pic_lists_modification( )語法結構。
log2_parallel_merge_level_minus2:給出變量 Log2ParMrgLevel的值。 Log2ParMrgLevel用於merge模式下亮度分量MV的產生。取值爲0~ CtbLog2SizeY − 2。
Log2ParMrgLevel = log2_parallel_merge_level_minus2 + 2
slice_segment_header_extension_present_flag:表示SS header擴展語法元素是否存在。
pps_extension_present_flag:表示語法元素pps_range_extension_flag,pps_multilayer_extension_flag, pps_3d_extension_flag, pps_scc_extension_flag和 pps_extension_4bits是否存在。
pps_range_extension_flag:表示在PPS RBSP中是否存在語法結構 pps_range_extension( )。
pps_multilayer_extension_flag:表示在PPS RBSP中是否存在語法結構 pps_multilayer_extension( ) 。
pps_3d_extension_flag:表示在PPS RBSP中是否存在語法結構pps_3d_extension( )。
pps_scc_extension_flag:表示在PPS RBSP中是否存在語法結構 pps_scc_extension( ) 。
pps_extension_4bits:表示在PPS RBSP中是否存在語法元素pps_extension_data_flag。
pps_extension_data_flag:可以是任意值。該語法元素不影響解碼器。解碼過程忽略該字段。
感興趣的請關注微信公衆號Video Coding