]> granicus.if.org Git - libvpx/commitdiff
Dynamic resize for 1 pass: update of golden frame.
authorMarco <marpan@chromium.org>
Thu, 16 Jul 2015 01:00:03 +0000 (18:00 -0700)
committerMarco <marpan@chromium.org>
Thu, 16 Jul 2015 16:27:20 +0000 (09:27 -0700)
In aq-mode=3 under a resizing action (i.e., resize_pending != 0),
force an update of the golden reference frame.

Change-Id: I14806f6db71b5f8c827678cc5e1fc913c138a9a4

vp9/encoder/vp9_aq_cyclicrefresh.c

index 6270bf452932f953db2397b4b346c90aaf8a494e..b61906388b8807b286fdabfc7af951bafe8dd9c2 100644 (file)
@@ -347,7 +347,10 @@ void vp9_cyclic_refresh_check_golden_update(VP9_COMP *const cpi) {
   // For video conference clips, if the background has high motion in current
   // frame because of the camera movement, set this frame as the golden frame.
   // Use 70% and 5% as the thresholds for golden frame refreshing.
-  if (cnt1 * 10 > (70 * rows * cols) && cnt2 * 20 < cnt1) {
+  // Also, force this frame as a golden update frame if this frame will change
+  // the resolution (resize_pending != 0).
+  if (cpi->resize_pending != 0 ||
+     (cnt1 * 10 > (70 * rows * cols) && cnt2 * 20 < cnt1)) {
     vp9_cyclic_refresh_set_golden_update(cpi);
     rc->frames_till_gf_update_due = rc->baseline_gf_interval;
 
@@ -562,4 +565,5 @@ void vp9_cyclic_refresh_reset_resize(VP9_COMP *const cpi) {
   CYCLIC_REFRESH *const cr = cpi->cyclic_refresh;
   memset(cr->map, 0, cm->mi_rows * cm->mi_cols);
   cr->sb_index = 0;
+  cpi->refresh_golden_frame = 1;
 }