天天看點

H.264句法和文法總結(八)參考圖像序列标記 (marking)操作的語義

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 )           
     }           
 }