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 =