ref: 8795b52512b69193d91d27776513439fa96a9604
parent: ba420f10977bbaf5296a8d4d7423d4c293609f97
author: James Berry <jamesberry@google.com>
date: Fri May 27 10:57:25 EDT 2011
bug fix check frame buffer index before copy in onyx_if.c update_reference_frames() make sure that frame buffer indexes are not equal before preforming a buffer copy. If two frames share the same buffer the flags will already be set correctly. Change-Id: Ida9b5516d08e3435c90f131d2dc19d842cfb536e
--- a/vp8/encoder/onyx_if.c
+++ b/vp8/encoder/onyx_if.c
@@ -3105,15 +3105,21 @@
if (cm->copy_buffer_to_arf == 1)
{
- yv12_fb[cm->lst_fb_idx].flags |= VP8_ALT_FLAG;
- yv12_fb[cm->alt_fb_idx].flags &= ~VP8_ALT_FLAG;
- cm->alt_fb_idx = cm->lst_fb_idx;
+ if(cm->alt_fb_idx != cm->lst_fb_idx)
+ {
+ yv12_fb[cm->lst_fb_idx].flags |= VP8_ALT_FLAG;
+ yv12_fb[cm->alt_fb_idx].flags &= ~VP8_ALT_FLAG;
+ cm->alt_fb_idx = cm->lst_fb_idx;
+ }
}
else /* if (cm->copy_buffer_to_arf == 2) */
{
- yv12_fb[cm->gld_fb_idx].flags |= VP8_ALT_FLAG;
- yv12_fb[cm->alt_fb_idx].flags &= ~VP8_ALT_FLAG;
- cm->alt_fb_idx = cm->gld_fb_idx;
+ if(cm->alt_fb_idx != cm->gld_fb_idx)
+ {
+ yv12_fb[cm->gld_fb_idx].flags |= VP8_ALT_FLAG;
+ yv12_fb[cm->alt_fb_idx].flags &= ~VP8_ALT_FLAG;
+ cm->alt_fb_idx = cm->gld_fb_idx;
+ }
}
}
@@ -3131,15 +3137,21 @@
if (cm->copy_buffer_to_gf == 1)
{
- yv12_fb[cm->lst_fb_idx].flags |= VP8_GOLD_FLAG;
- yv12_fb[cm->gld_fb_idx].flags &= ~VP8_GOLD_FLAG;
- cm->gld_fb_idx = cm->lst_fb_idx;
+ if(cm->gld_fb_idx != cm->lst_fb_idx)
+ {
+ yv12_fb[cm->lst_fb_idx].flags |= VP8_GOLD_FLAG;
+ yv12_fb[cm->gld_fb_idx].flags &= ~VP8_GOLD_FLAG;
+ cm->gld_fb_idx = cm->lst_fb_idx;
+ }
}
else /* if (cm->copy_buffer_to_gf == 2) */
{
- yv12_fb[cm->alt_fb_idx].flags |= VP8_GOLD_FLAG;
- yv12_fb[cm->gld_fb_idx].flags &= ~VP8_GOLD_FLAG;
- cm->gld_fb_idx = cm->alt_fb_idx;
+ if(cm->alt_fb_idx != cm->gld_fb_idx)
+ {
+ yv12_fb[cm->alt_fb_idx].flags |= VP8_GOLD_FLAG;
+ yv12_fb[cm->gld_fb_idx].flags &= ~VP8_GOLD_FLAG;
+ cm->gld_fb_idx = cm->alt_fb_idx;
+ }
}
}
}