summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLoren Merritt <lorenm@u.washington.edu>2008-02-02 10:54:20 +0000
committerLoren Merritt <lorenm@u.washington.edu>2008-02-02 10:54:20 +0000
commitffbc5e04cee17ffb449cf7ccb2fa93b1160c3c17 (patch)
tree769ef986e9527dcb108e50c32896b324c190543d
parent02f7695b0b61c06c497da20e29316ab286c16dd1 (diff)
"swap first two elements of L1 if L0 and L1 are identical" applies after splitting the lists into fields
Originally committed as revision 11808 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavcodec/h264.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/libavcodec/h264.c b/libavcodec/h264.c
index 74e4820d85..41e4348452 100644
--- a/libavcodec/h264.c
+++ b/libavcodec/h264.c
@@ -2922,15 +2922,6 @@ static int fill_default_ref_list(H264Context *h){
frame_list[ list ][index++].pic_id= i;;
}
len[list] = 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= frame_list[1][0];
- frame_list[1][0] = frame_list[1][1];
- frame_list[1][1] = temp;
- }
-
}
for(list=0; list<2; list++){
@@ -2942,6 +2933,14 @@ static int fill_default_ref_list(H264Context *h){
s->picture_structure,
short_len[list]);
+ // swap the two first elements of L1 when L0 and L1 are identical
+ if(list && len[0] > 1 && len[0] == len[1])
+ for(i=0; h->default_ref_list[0][i].data[0] == h->default_ref_list[1][i].data[0]; i++)
+ if(i == len[0]){
+ FFSWAP(Picture, h->default_ref_list[1][0], h->default_ref_list[1][1]);
+ break;
+ }
+
if(len[list] < h->ref_count[ list ])
memset(&h->default_ref_list[list][len[list]], 0, sizeof(Picture)*(h->ref_count[ list ] - len[list]));
}
@@ -2982,7 +2981,7 @@ static int fill_default_ref_list(H264Context *h){
}
if(h->slice_type==B_TYPE){
for (i=0; i<h->ref_count[1]; i++) {
- tprintf(h->s.avctx, "List1: %s fn:%d 0x%p\n", (h->default_ref_list[1][i].long_ref ? "LT" : "ST"), h->default_ref_list[1][i].pic_id, h->default_ref_list[0][i].data[0]);
+ tprintf(h->s.avctx, "List1: %s fn:%d 0x%p\n", (h->default_ref_list[1][i].long_ref ? "LT" : "ST"), h->default_ref_list[1][i].pic_id, h->default_ref_list[1][i].data[0]);
}
}
#endif