]> granicus.if.org Git - libvpx/commitdiff
vp9: Reduce frame loopfilter-level for 1 pass cbr.
authorMarco <marpan@google.com>
Mon, 26 Sep 2016 16:57:49 +0000 (09:57 -0700)
committerMarco <marpan@google.com>
Mon, 26 Sep 2016 17:12:43 +0000 (10:12 -0700)
Reduce the filt_guess for 1 pass cbr on inter-frames.
This reduces visual artifact seen in rtc clip (jimred.vga),
and improves metrics on rtc set.

Metrics on rtc set for cbr mode overall positive, most clips are up:
Speed 7 rtc: avgPSNR/SSIM up by: ~2.6/3.9%
Speed 8 rtc: avgPSNR/SSIM up by: ~1.3/2.5%

Change-Id: Ia4eccea1c19d65b583516df28823cd756c49464f

vp9/encoder/vp9_picklpf.c

index 1583cc8abcd99461faf0d5d0db829681502907b8..6fc7cd1e3cf3edd67a67850ee25a87c181728514 100644 (file)
@@ -180,6 +180,10 @@ void vp9_pick_filter_level(const YV12_BUFFER_CONFIG *sd, VP9_COMP *cpi,
     }
 #else
     int filt_guess = ROUND_POWER_OF_TWO(q * 20723 + 1015158, 18);
+    if (cpi->oxcf.pass == 0 && cpi->oxcf.rc_mode == VPX_CBR &&
+        cpi->oxcf.content != VP9E_CONTENT_SCREEN && cm->frame_type != KEY_FRAME)
+      filt_guess = 5 * filt_guess >> 3;
+
 #endif  // CONFIG_VP9_HIGHBITDEPTH
     if (cm->frame_type == KEY_FRAME) filt_guess -= 4;
     lf->filter_level = clamp(filt_guess, min_filter_level, max_filter_level);