# HG changeset patch # User michael # Date 1106452176 0 # Node ID 0237bb5ca0f0f3783de5c3b1400e66401634ea68 # Parent 7dc7f1a9f5d64ec9c69f27f3b993344f12830934 simplify reference list 1 swaping fix? seems its not used by any samples i found though diff -r 7dc7f1a9f5d6 -r 0237bb5ca0f0 h264.c --- a/h264.c Sat Jan 22 18:00:36 2005 +0000 +++ b/h264.c Sun Jan 23 03:49:36 2005 +0000 @@ -2886,32 +2886,17 @@ // find the largest poc for(list=0; list<2; list++){ int index = 0; - int swap_first_L1 = 0; - - if (0 == list) { - for(i=smallest_poc_greater_than_current-1; i>=0 && index < h->ref_count[list]; i--) { - if(sorted_short_ref[i].reference != 3) continue; - h->default_ref_list[list][index ]= sorted_short_ref[i]; - h->default_ref_list[list][index++].pic_id= sorted_short_ref[i].frame_num; - } - for(i=smallest_poc_greater_than_current; ishort_ref_count && index < h->ref_count[list]; i++) { - if(sorted_short_ref[i].reference != 3) continue; - h->default_ref_list[list][index ]= sorted_short_ref[i]; - h->default_ref_list[list][index++].pic_id= sorted_short_ref[i].frame_num; + int j= -99; + int step= list ? -1 : 1; + + for(i=0; ishort_ref_count && index < h->ref_count[list]; i++, j+=step) { + while(j<0 || j>= h->short_ref_count){ + step = -step; + j= smallest_poc_greater_than_current + (step>>1); } - } else { - for(i=smallest_poc_greater_than_current; ishort_ref_count && index < h->ref_count[list]; i++) { - if(sorted_short_ref[i].reference != 3) continue; - swap_first_L1 |= 1; - h->default_ref_list[list][index ]= sorted_short_ref[i]; - h->default_ref_list[list][index++].pic_id= sorted_short_ref[i].frame_num; - } - for(i=smallest_poc_greater_than_current-1; i>=0 && index < h->ref_count[list]; i--) { - if(sorted_short_ref[i].reference != 3) continue; - swap_first_L1 |= 2; - h->default_ref_list[list][index ]= sorted_short_ref[i]; - h->default_ref_list[list][index++].pic_id= sorted_short_ref[i].frame_num; - } + if(sorted_short_ref[j].reference != 3) continue; + h->default_ref_list[list][index ]= sorted_short_ref[j]; + h->default_ref_list[list][index++].pic_id= sorted_short_ref[j].frame_num; } for(i = 0; i < 16 && index < h->ref_count[ list ]; i++){ @@ -2922,7 +2907,7 @@ h->default_ref_list[ list ][index++].pic_id= i;; } - if(list && (3 == swap_first_L1) && (1 < index)){ + if(list && (smallest_poc_greater_than_current<=0 || smallest_poc_greater_than_current>=h->short_ref_count) && (1 < index)){ // swap the two first elements of L1 when // L0 and L1 are identical Picture temp= h->default_ref_list[1][0];