]> granicus.if.org Git - libvpx/commitdiff
Bug fix for second reference stats.
authorpaulwilkins <paulwilkins@google.com>
Mon, 4 Dec 2017 13:41:44 +0000 (13:41 +0000)
committerpaulwilkins <paulwilkins@google.com>
Fri, 8 Dec 2017 10:05:36 +0000 (10:05 +0000)
Immediately following a key frame the trailing second reference
error in the first pass stats will be based on a reference frame from
the prior key frame group and will thus usually be much larger.

This fix eliminates that effect (which typically triggers a short arf
group immediately after a key frame). It also changes the accounting
for the first frame in each new arf group.

This change gives large gains on a couple of clips that contain mid
sequence key frames (e.g. 6% on 1080P tennis). Overall there was
a net gain in PSNR and PSNR-HVS ~(0.05- 0.4%) and mixed results for
SSIM (+/- 0.2%).

Change-Id: I8e00538ac2c0b5c2e7e637903cac329ce5c2a375

vp9/encoder/vp9_firstpass.c

index b4c46014cbf470764be1da63424240d169d857b6..eefbdff51320eb7c91afd3f14f921c781e15d961 100644 (file)
@@ -2543,8 +2543,11 @@ static void define_gf_group(VP9_COMP *cpi, FIRSTPASS_STATS *this_frame) {
       // Update the accumulator for second ref error difference.
       // This is intended to give an indication of how much the coded error is
       // increasing over time.
-      sr_accumulator += (next_frame.sr_coded_error - next_frame.coded_error);
-      sr_accumulator = VPXMAX(0.0, sr_accumulator);
+      if (i == 1) {
+        sr_accumulator += next_frame.coded_error;
+      } else {
+        sr_accumulator += (next_frame.sr_coded_error - next_frame.coded_error);
+      }
     }
 
     // Break out conditions.