]> granicus.if.org Git - libvpx/commitdiff
Fix to frames considered in arf boost calculation.
authorpaulwilkins <paulwilkins@google.com>
Wed, 1 Nov 2017 14:21:39 +0000 (14:21 +0000)
committerpaulwilkins <paulwilkins@google.com>
Thu, 9 Nov 2017 10:46:10 +0000 (10:46 +0000)
For a chosen interval "i" the existing arf boost calculation examined frames
+/- (i-1) frames from the current location in the second pass.

This change checks to make sure that the forward search does not extend
beyond the next key frame in the event that the distance to the next key
frame is < (i - 1).

Small metrics gains on all our  test sets but these are localized to a few clips
(e.g. midres set psnr-hvs sintel -2.59% but overall average was only -0.185%)

Change-Id: I26fc9ce582b6d58fa1113a238395e12ad3123cf6

vp9/encoder/vp9_firstpass.c

index f9494dc5186eecf30540f5fb5d992688270731d3..e68fbe6e6cc703d74cfba5b37d8c977e80127b52 100644 (file)
@@ -2604,9 +2604,13 @@ static void define_gf_group(VP9_COMP *cpi, FIRSTPASS_STATS *this_frame) {
   // Should we use the alternate reference frame.
   if (allow_alt_ref && (i < cpi->oxcf.lag_in_frames) &&
       (i >= rc->min_gf_interval)) {
+    const int forward_frames = (rc->frames_to_key - i >= i - 1)
+                                   ? i - 1
+                                   : VPXMAX(0, rc->frames_to_key - i);
+
     // Calculate the boost for alt ref.
     rc->gfu_boost =
-        calc_arf_boost(cpi, 0, (i - 1), (i - 1), &f_boost, &b_boost);
+        calc_arf_boost(cpi, 0, forward_frames, i - 1, &f_boost, &b_boost);
     rc->source_alt_ref_pending = 1;
 
     // Test to see if multi arf is appropriate.