Refactor VideoDenoiser to use a buffer pool, replacing explicit double buffering.
Also improve denoiser to not assume identical stride of all involved
frames, and delete the no longer needed function I420Buffer::CopyKeepStride.
BUG=None
Review-Url: https://codereview.webrtc.org/2469763002
Cr-Commit-Position: refs/heads/master@{#14940}
diff --git a/webrtc/modules/video_processing/frame_preprocessor.cc b/webrtc/modules/video_processing/frame_preprocessor.cc
index e86bbbb..8d6d8bb 100644
--- a/webrtc/modules/video_processing/frame_preprocessor.cc
+++ b/webrtc/modules/video_processing/frame_preprocessor.cc
@@ -19,7 +19,6 @@
spatial_resampler_ = new VPMSimpleSpatialResampler();
vd_ = new VPMVideoDecimator();
EnableDenoising(false);
- denoised_frame_toggle_ = 0;
}
VPMFramePreprocessor::~VPMFramePreprocessor() {
@@ -96,22 +95,10 @@
const VideoFrame* current_frame = &frame;
if (denoiser_) {
- rtc::scoped_refptr<I420Buffer>* denoised_buffer = &denoised_buffer_[0];
- rtc::scoped_refptr<I420Buffer>* denoised_buffer_prev = &denoised_buffer_[1];
- // Swap the buffer to save one memcpy in DenoiseFrame.
- if (denoised_frame_toggle_) {
- denoised_buffer = &denoised_buffer_[1];
- denoised_buffer_prev = &denoised_buffer_[0];
- }
- // Invert the flag.
- denoised_frame_toggle_ ^= 1;
- denoiser_->DenoiseFrame(current_frame->video_frame_buffer(),
- denoised_buffer,
- denoised_buffer_prev, true);
- denoised_frame_ = VideoFrame(*denoised_buffer,
- current_frame->timestamp(),
- current_frame->render_time_ms(),
- current_frame->rotation());
+ denoised_frame_ = VideoFrame(
+ denoiser_->DenoiseFrame(current_frame->video_frame_buffer(), true),
+ current_frame->timestamp(), current_frame->render_time_ms(),
+ current_frame->rotation());
current_frame = &denoised_frame_;
}