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_;
   }