dec_ref_pic_marking( ) {
if( nal_unit_type = = 5 ) {
// no_output_of_prior_pics_flag 僅在目前圖像是 IDR 圖像時出現這個句法元素,指明是否要将前面已解碼的圖像全部輸出。
no_output_of_prior_pics_flag
// long_term_reference_flag 與上個圖像一樣,僅在目前圖像是 IDR 圖像時出現這一句法元素。這個句法元素指明是否使用長期參考這個機制。如果取值為 1,表明使用長期參考,并且每個 IDR 圖像被解碼後自動成為長期參考幀,否則(取值為 0),IDR 圖像被解碼後自動成為短期參考幀。
long_term_reference_flag
} else {
// adaptive_ref_pic_marking_mode_flag 指明标記(marking)操作的模式,
adaptive_ref_pic_marking_mode_flag 标記(marking)模式
0 先入先出(FIFO):使用滑動窗的機制,先入先出,在這種模式
下沒有辦法對長期參考幀進行操作。
1 自适應标記(marking):後續碼流中會有一系列句法元素顯式指
明操作的步驟。自适應是指編碼器可根據情況随機靈活地作出決策。
adaptive_ref_pic_marking_mode_flag if( adaptive_ref_pic_marking_mode_flag )
do {
/* memory_management_control_operation 在自适應标記(marking)模式中,指明本次操作的具體内容
memory_management_control_operation 标記(marking)操作
0 結束循環,退出标記(marding)操作。
1 将一個短期參考圖像标記為非參考圖像,也
即将一個短期參考圖像移出參考幀隊列。
2 将一個長期參考圖像标記為非參考圖像,也
即将一個長期參考圖像移出參考幀隊列。
3 将一個短期參考圖像轉為長期參考圖像。
4 指明長期參考幀的最大數目。
5 清空參考幀隊列,将所有參考圖像移出參考
幀隊列,并禁用長期參考機制
6 将目前圖像存為一個長期參考幀。 */
memory_management_control_operation if( memory_management_control_operation = = 1 | |
memory_management_control_operation = = 3 )
// difference_of_pic_nums_minus1 當 memory_management_control_operation 等于 3 或 1 時,由 這個
句法元素可以計算得到需要操作的圖像在短期參考隊列中的序号。參考幀隊列中必須存在這個圖像。
difference_of_pic_nums_minus1 if(memory_management_control_operation = = 2 )
// long_term_pic_num 當 memory_management_control_operation 等于 2 時, 從此句法元素得到所要
操作的長期參考圖像的序号。
long_term_pic_num
if( memory_management_control_operation = = 3 | |
memory_management_control_operation = = 6 )
// long_term_frame_idx 當 memory_management_control_operation 等于 3 或 6 ,配置設定一個長期參考
幀的序号給一個圖像。
long_term_frame_idx if( memory_management_control_operation = = 4 )
// max_long_term_frame_idx_plus1 此句法元素減1, 指明長期參考隊列的最大數目 。max_long_term_frame_idx_plus1 值的範圍 0 to num_ref_frames。
max_long_term_frame_idx_plus1 } while( memory_management_control_operation != 0 )
}
}