shithub: libvpx

Download patch

ref: 39ea3d72f5751ff09f7ac0e7b9dfe61b247ddeae
parent: f67b2b8929e2edd242c68a3aeac555f1e79587ab
parent: ce9e52b13c9f1d1e356d3061877e661b5ab1f4da
author: Marco Paniconi <[email protected]>
date: Tue Apr 2 14:01:26 EDT 2019

Merge "vp9-rtc: Move noise estimation to after scene change detection"

--- a/vp9/encoder/vp9_encoder.c
+++ b/vp9/encoder/vp9_encoder.c
@@ -3839,7 +3839,6 @@
   if (cpi->oxcf.noise_sensitivity > 0 && cpi->use_svc)
     vp9_denoiser_reset_on_first_frame(cpi);
 #endif
-  vp9_update_noise_estimate(cpi);
 
   // Scene detection is always used for VBR mode or screen-content case.
   // For other cases (e.g., CBR mode) use it for 5 <= speed < 8 for now
@@ -3870,6 +3869,8 @@
       cpi->rc.high_source_sad = tmp_high_source_sad;
     }
   }
+
+  vp9_update_noise_estimate(cpi);
 
   // For 1 pass CBR, check if we are dropping this frame.
   // Never drop on key frame, if base layer is key for svc,
--- a/vp9/encoder/vp9_noise_estimate.c
+++ b/vp9/encoder/vp9_noise_estimate.c
@@ -209,8 +209,11 @@
           // Only consider blocks that are likely steady background. i.e, have
           // been encoded as zero/low motion x (= thresh_consec_zeromv) frames
           // in a row. consec_zero_mv[] defined for 8x8 blocks, so consider all
-          // 4 sub-blocks for 16x16 block. Also, avoid skin blocks.
-          if (frame_low_motion && consec_zeromv > thresh_consec_zeromv) {
+          // 4 sub-blocks for 16x16 block. And exclude this frame if
+          // high_source_sad is true (i.e., scene/content change).
+          if (frame_low_motion && consec_zeromv > thresh_consec_zeromv &&
+              !cpi->rc.high_source_sad &&
+              !cpi->svc.high_source_sad_superframe) {
             int is_skin = 0;
             if (cpi->use_skin_detection) {
               is_skin =