External VNR speed improvement.
Improved visual quality with 3x times speed-up.
Change list:
1. Remove second chance filter in temporal denoising filter to mitigate trailing artifact.
2. Add swap buffer to save one whole-frame memcpy.
3. Do noise estimation on every N blocks.
4. Adopt a faster moving object detection algorithm (change the structure).
5. Refactor the for loops and PositionCheck().
6. Refactor the function ReduceFalseDetection (RFD).
7. Fix a bug in TrailingBlock() which causes a mismatch.
8. Change unit test to support swap buffer test.
9. Remove CopyMem8x8, use memcpy to copy U/V plane which can be optimized future.
10. Remove DenoiseMetrics.
Review URL: https://codereview.webrtc.org/1871853003
Cr-Commit-Position: refs/heads/master@{#12340}
diff --git a/webrtc/modules/video_processing/frame_preprocessor.cc b/webrtc/modules/video_processing/frame_preprocessor.cc
index fd0d0ef..c204214 100644
--- a/webrtc/modules/video_processing/frame_preprocessor.cc
+++ b/webrtc/modules/video_processing/frame_preprocessor.cc
@@ -23,6 +23,7 @@
ca_ = new VPMContentAnalysis(true);
vd_ = new VPMVideoDecimator();
EnableDenosing(false);
+ denoised_frame_toggle_ = 0;
}
VPMFramePreprocessor::~VPMFramePreprocessor() {
@@ -116,9 +117,18 @@
const VideoFrame* current_frame = &frame;
if (denoiser_) {
- denoiser_->DenoiseFrame(*current_frame, &denoised_frame_,
- &denoised_frame_prev_, 0);
- current_frame = &denoised_frame_;
+ VideoFrame* denoised_frame = &denoised_frame_[0];
+ VideoFrame* denoised_frame_prev = &denoised_frame_[1];
+ // Swap the buffer to save one memcpy in DenoiseFrame.
+ if (denoised_frame_toggle_) {
+ denoised_frame = &denoised_frame_[1];
+ denoised_frame_prev = &denoised_frame_[0];
+ }
+ // Invert the flag.
+ denoised_frame_toggle_ ^= 1;
+ denoiser_->DenoiseFrame(*current_frame, denoised_frame, denoised_frame_prev,
+ true);
+ current_frame = denoised_frame;
}
if (spatial_resampler_->ApplyResample(current_frame->width(),