天天看點

H.264句法和文法總結(六)參考幀隊列重排序(reordering)句法

ref_pic_list_reordering( ) {   
     if( slice_type    !=    I    &&    slice_type    !=    SI ) {              
         // ref_pic_list_reordering_flag_l0   指明是否進行重排序操作,這個句法元素等于1 時表明緊跟着會有一系列句法元素用于參考幀隊列的重排序。 
       ref_pic_list_reordering_flag_l0   
         if( ref_pic_list_reordering_flag_l0 )           
             do {           
                 // reordering_of_pic_nums_idc      指明執行哪種重排序操作 
                    reordering_of_pic_nums_idc       操作 
                    0                                                  短期參考幀重排序,abs_diff_pic_num_minus1會出現在碼流中,
                                                                       從目前圖像的PicNum減去  (abs_diff_pic_num_minus1  +  1)  後
                                                                       指明需要重 排序的圖像。 
                    1                                                  短期參考幀重排序,abs_diff_pic_num_minus1會出現在碼流中,
                                                                       從當 前圖像的PicNum加上(abs_diff_pic_num_minus1  +  1)  後
                                                                        指明需要重排序的圖像。 
                    2                                                  長期參考幀重排序,long_term_pic_num會出現在碼流中,指明需要重排序的圖像。 
                    3                                                  結束循環,退出重排序操作。  
                reordering_of_pic_nums_idc  
                 if( reordering_of_pic_nums_idc    ==    0    | | 
                     reordering_of_pic_nums_idc    ==    1 )  
                     // abs_diff_pic_num_minus1   在對短期參考幀重排序時指明重排序圖像與目前的差 
                    abs_diff_pic_num_minus1   
                 else if( reordering_of_pic_nums_idc    = =    2 )         
                     // long_term_pic_num     在對長期參考幀重排序時指明重排序圖像   
                    long_term_pic_num  
             } while( reordering_of_pic_nums_idc    !=    3 )           
     }           
     if( slice_type    ==    B ) {           
        ref_pic_list_reordering_flag_l1   
         if( ref_pic_list_reordering_flag_l1 )           
             do {           
                 reordering_of_pic_nums_idc                   if( reordering_of_pic_nums_idc    = =    0    | | 
                     reordering_of_pic_nums_idc    = =    1 ) 
                    abs_diff_pic_num_minus1                   else if( reordering_of_pic_nums_idc    = =    2 )           
                     long_term_pic_num    
             } while( reordering_of_pic_nums_idc    !=    3 )           
     }           
 }      

繼續閱讀