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