Index: webrtc/modules/video_processing/util/noise_estimation.cc |
diff --git a/webrtc/modules/video_processing/util/noise_estimation.cc b/webrtc/modules/video_processing/util/noise_estimation.cc |
index 87beac38ae582e265fe35c0541aaf2c15b729179..a0ae2c474a3819c7ad9bb589c2eb40559c4a36a8 100644 |
--- a/webrtc/modules/video_processing/util/noise_estimation.cc |
+++ b/webrtc/modules/video_processing/util/noise_estimation.cc |
@@ -27,10 +27,10 @@ void NoiseEstimation::GetNoise(int mb_index, uint32_t var, uint32_t luma) { |
consec_low_var_[mb_index]++; |
num_static_block_++; |
if (consec_low_var_[mb_index] >= kConsecLowVarFrame && |
- (luma >> 8) < kAverageLumaMax && (luma >> 8) > kAverageLumaMin) { |
+ (luma >> 6) < kAverageLumaMax && (luma >> 6) > kAverageLumaMin) { |
// Normalized var by the average luma value, this gives more weight to |
// darker blocks. |
- int nor_var = var / (luma >> 12); |
+ int nor_var = var / (luma >> 10); |
noise_var_ += |
nor_var > kBlockSelectionVarMax ? kBlockSelectionVarMax : nor_var; |
num_noisy_block_++; |
@@ -46,25 +46,28 @@ void NoiseEstimation::UpdateNoiseLevel() { |
// condition more reasonable. |
// No enough samples implies the motion of the camera or too many moving |
// objects in the frame. |
- if (num_static_block_ < (0.65 * mb_cols_ * mb_rows_) || !num_noisy_block_) { |
+ if (num_static_block_ < |
+ (0.65 * mb_cols_ * mb_rows_ / NOISE_SUBSAMPLE_INTERVAL) || |
+ !num_noisy_block_) { |
+#if DISPLAY |
+ printf("Not enough samples. %d \n", num_static_block_); |
+#endif |
noise_var_ = 0; |
noise_var_accum_ = 0; |
- num_static_block_ = 0; |
num_noisy_block_ = 0; |
-#if DISPLAY |
- printf("Not enough samples.\n"); |
-#endif |
+ num_static_block_ = 0; |
return; |
} else { |
- // Normalized by the number of noisy blocks. |
- noise_var_ /= num_noisy_block_; |
- // Get the percentage of static blocks. |
- percent_static_block_ = |
- static_cast<double>(num_static_block_) / (mb_cols_ * mb_rows_); |
#if DISPLAY |
- printf("%d %d fraction = %.3f\n", num_static_block_, mb_cols_ * mb_rows_, |
+ printf("%d %d fraction = %.3f\n", num_static_block_, |
+ mb_cols_ * mb_rows_ / NOISE_SUBSAMPLE_INTERVAL, |
percent_static_block_); |
#endif |
+ // Normalized by the number of noisy blocks. |
+ noise_var_ /= num_noisy_block_; |
+ // Get the percentage of static blocks. |
+ percent_static_block_ = static_cast<double>(num_static_block_) / |
+ (mb_cols_ * mb_rows_ / NOISE_SUBSAMPLE_INTERVAL); |
num_noisy_block_ = 0; |
num_static_block_ = 0; |
} |
@@ -75,12 +78,12 @@ void NoiseEstimation::UpdateNoiseLevel() { |
} else { |
noise_var_accum_ = (noise_var_accum_ * 15 + noise_var_) / 16; |
} |
- // Reset noise_var_ for the next frame. |
- noise_var_ = 0; |
#if DISPLAY |
printf("noise_var_accum_ = %.1f, noise_var_ = %d.\n", noise_var_accum_, |
noise_var_); |
#endif |
+ // Reset noise_var_ for the next frame. |
+ noise_var_ = 0; |
} |
uint8_t NoiseEstimation::GetNoiseLevel() { |