天天看点

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

继续阅读