Index: webrtc/modules/video_processing/util/denoiser_filter_neon.cc |
diff --git a/webrtc/modules/video_processing/util/denoiser_filter_neon.cc b/webrtc/modules/video_processing/util/denoiser_filter_neon.cc |
index b522bf002b0273d2ef769fca2946e79df8445569..2920305f71bd23a70927e3639dace7fc26d20baa 100644 |
--- a/webrtc/modules/video_processing/util/denoiser_filter_neon.cc |
+++ b/webrtc/modules/video_processing/util/denoiser_filter_neon.cc |
@@ -106,13 +106,15 @@ DenoiserDecision DenoiserFilterNEON::MbDenoise(uint8_t* mc_running_avg_y, |
const uint8_t* sig, |
int sig_stride, |
uint8_t motion_magnitude, |
- int increase_denoising) { |
+ int increase_denoising, |
+ bool denoise_always) { |
// If motion_magnitude is small, making the denoiser more aggressive by |
// increasing the adjustment for each level, level1 adjustment is |
// increased, the deltas stay the same. |
int shift_inc = |
(increase_denoising && motion_magnitude <= kMotionMagnitudeThreshold) ? 1 |
: 0; |
+ int sum_diff_thresh = 0; |
const uint8x16_t v_level1_adjustment = vmovq_n_u8( |
(motion_magnitude <= kMotionMagnitudeThreshold) ? 4 + shift_inc : 3); |
const uint8x16_t v_delta_level_1_and_2 = vdupq_n_u8(1); |
@@ -192,10 +194,12 @@ DenoiserDecision DenoiserFilterNEON::MbDenoise(uint8_t* mc_running_avg_y, |
int64x1_t x = vqadd_s64(vget_high_s64(v_sum_diff_total), |
vget_low_s64(v_sum_diff_total)); |
int sum_diff = vget_lane_s32(vabs_s32(vreinterpret_s32_s64(x)), 0); |
- int sum_diff_thresh = kSumDiffThreshold; |
- |
- if (increase_denoising) |
+ if (denoise_always) |
+ sum_diff_thresh = INT_MAX; |
+ else if (increase_denoising) |
sum_diff_thresh = kSumDiffThresholdHigh; |
+ else |
+ sum_diff_thresh = kSumDiffThreshold; |
if (sum_diff > sum_diff_thresh) { |
// Before returning to copy the block (i.e., apply no denoising), |
// checK if we can still apply some (weaker) temporal filtering to |