shithub: libvpx

Download patch

ref: 607e45f42027cde9cab7a017559ea02fd397fffd
parent: 8d471fcee21b0d33ec7b0980addedd4d38324c5a
author: paulwilkins <[email protected]>
date: Wed Nov 15 11:39:54 EST 2017

Add clause to alt ref group breakout.

Add a clause to the breakout test for alt ref groups that
examines the size of the accumulated second reference
frame error compared to the cost of intra coding.

This clause causes a reduction in the average group length for many
clips. Alongside the change to the group length the minimum
boost is increased.

On balance the results are positive for psnr and psnr-hvs
but is negative for ssim/fast ssim for the smaller image formats.

Strong gains on some harder clips (eg ducks take off (midres) ~20%,
husky (lowres) 6-17%. Most of the negative cases are lower motion
clips. Subsequent patch hopefully will help with those.

Change-Id: Ic1f5dbb9153d5089e58b1540470e799f91a65dc4

--- a/vp9/encoder/vp9_firstpass.c
+++ b/vp9/encoder/vp9_firstpass.c
@@ -2091,8 +2091,8 @@
   }
   arf_boost += (int)boost_score;
 
-  if (arf_boost < ((b_frames + f_frames) * 20))
-    arf_boost = ((b_frames + f_frames) * 20);
+  if (arf_boost < ((b_frames + f_frames) * 40))
+    arf_boost = ((b_frames + f_frames) * 40);
   arf_boost = VPXMAX(arf_boost, MIN_ARF_GF_BOOST);
 
   return arf_boost;
@@ -2562,7 +2562,6 @@
     }
 
     // Calculate a boost number for this frame.
-    sr_accumulator = 0.0;
     boost_score += decay_accumulator *
                    calc_frame_boost(cpi, &next_frame, &sr_accumulator,
                                     this_frame_mv_in_out, GF_MAX_BOOST);
@@ -2580,7 +2579,8 @@
             ((mv_ratio_accumulator > mv_ratio_accumulator_thresh) ||
              (abs_mv_in_out_accumulator > abs_mv_in_out_thresh) ||
              (mv_in_out_accumulator < -mv_in_out_thresh) ||
-             (decay_accumulator < ARF_DECAY_BREAKOUT)))) {
+             (decay_accumulator < ARF_DECAY_BREAKOUT) ||
+             (sr_accumulator > next_frame.intra_error)))) {
       boost_score = old_boost_score;
       break;
     }