shithub: libvpx

Download patch

ref: 19272d866bde3a8c3f9c8395ba38e8ff3b42bb5a
parent: 394d6c122a5f1d66da21c97edd97bf5092a20d72
author: JackyChen <[email protected]>
date: Mon Nov 9 14:18:29 EST 2015

VP9 noise estimate: no noise estimate if frame size change.

Change-Id: I521f7b53c143d562a88fe7de330aa3f0ef09f414

--- a/vp9/encoder/vp9_noise_estimate.c
+++ b/vp9/encoder/vp9_noise_estimate.c
@@ -29,6 +29,8 @@
   ne->value = 0;
   ne->count = 0;
   ne->thresh = 90;
+  ne->last_w = 0;
+  ne->last_h = 0;
   if (width * height >= 1920 * 1080) {
     ne->thresh = 200;
   } else if (width * height >= 1280 * 720) {
@@ -100,11 +102,17 @@
   ne->enabled = enable_noise_estimation(cpi);
   if (!ne->enabled ||
       cm->current_video_frame % frame_period != 0 ||
-      last_source == NULL) {
+      last_source == NULL ||
+      ne->last_w != cm->width ||
+      ne->last_h != cm->height) {
 #if CONFIG_VP9_TEMPORAL_DENOISING
   if (cpi->oxcf.noise_sensitivity > 0)
     copy_frame(&cpi->denoiser.last_source, cpi->Source);
 #endif
+    if (last_source != NULL) {
+      ne->last_w = cm->width;
+      ne->last_h = cm->height;
+    }
     return;
   } else {
     int num_samples = 0;
@@ -185,6 +193,8 @@
       src_u += (src_uvstride << 2) - (cm->mi_cols << 2);
       src_v += (src_uvstride << 2) - (cm->mi_cols << 2);
     }
+    ne->last_w = cm->width;
+    ne->last_h = cm->height;
     // Update noise estimate if we have at a minimum number of block samples,
     // and avg_est > 0 (avg_est == 0 can happen if the application inputs
     // duplicate frames).
--- a/vp9/encoder/vp9_noise_estimate.h
+++ b/vp9/encoder/vp9_noise_estimate.h
@@ -35,6 +35,8 @@
   int value;
   int thresh;
   int count;
+  int last_w;
+  int last_h;
 } NOISE_ESTIMATE;
 
 struct VP9_COMP;