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/test/denoiser_test.cc b/webrtc/modules/video_processing/test/denoiser_test.cc
index 325efbe..b5e0352 100644
--- a/webrtc/modules/video_processing/test/denoiser_test.cc
+++ b/webrtc/modules/video_processing/test/denoiser_test.cc
@@ -12,7 +12,7 @@
#include <memory>
-#include "webrtc/common_video/include/video_frame_buffer.h"
+#include "webrtc/common_video/include/i420_buffer_pool.h"
#include "webrtc/modules/video_processing/video_denoiser.h"
#include "webrtc/test/gtest.h"
#include "webrtc/test/frame_utils.h"
@@ -135,16 +135,10 @@
ASSERT_TRUE(source_file != nullptr)
<< "Cannot open source file: " << video_file;
- // Used in swap buffer.
- int denoised_frame_toggle = 0;
// Create pure C denoiser.
VideoDenoiser denoiser_c(false);
// Create SSE or NEON denoiser.
VideoDenoiser denoiser_sse_neon(true);
- rtc::scoped_refptr<I420Buffer> denoised_frame_c;
- rtc::scoped_refptr<I420Buffer> denoised_frame_prev_c;
- rtc::scoped_refptr<I420Buffer> denoised_frame_sse_neon;
- rtc::scoped_refptr<I420Buffer> denoised_frame_prev_sse_neon;
for (;;) {
rtc::scoped_refptr<VideoFrameBuffer> video_frame_buffer(
@@ -152,29 +146,14 @@
if (!video_frame_buffer)
break;
- rtc::scoped_refptr<I420Buffer>* p_denoised_c = &denoised_frame_c;
- rtc::scoped_refptr<I420Buffer>* p_denoised_prev_c = &denoised_frame_prev_c;
- rtc::scoped_refptr<I420Buffer>* p_denoised_sse_neon =
- &denoised_frame_sse_neon;
- rtc::scoped_refptr<I420Buffer>* p_denoised_prev_sse_neon =
- &denoised_frame_prev_sse_neon;
- // Swap the buffer to save one memcpy in DenoiseFrame.
- if (denoised_frame_toggle) {
- p_denoised_c = &denoised_frame_prev_c;
- p_denoised_prev_c = &denoised_frame_c;
- p_denoised_sse_neon = &denoised_frame_prev_sse_neon;
- p_denoised_prev_sse_neon = &denoised_frame_sse_neon;
- }
- denoiser_c.DenoiseFrame(video_frame_buffer,
- p_denoised_c, p_denoised_prev_c,
- false);
- denoiser_sse_neon.DenoiseFrame(video_frame_buffer,
- p_denoised_sse_neon,
- p_denoised_prev_sse_neon, false);
- // Invert the flag.
- denoised_frame_toggle ^= 1;
+ rtc::scoped_refptr<VideoFrameBuffer> denoised_frame_c(
+ denoiser_c.DenoiseFrame(video_frame_buffer, false));
+ rtc::scoped_refptr<VideoFrameBuffer> denoised_frame_sse_neon(
+ denoiser_sse_neon.DenoiseFrame(video_frame_buffer, false));
+
// Denoising results should be the same for C and SSE/NEON denoiser.
- ASSERT_TRUE(test::FrameBufsEqual(*p_denoised_c, *p_denoised_sse_neon));
+ ASSERT_TRUE(
+ test::FrameBufsEqual(denoised_frame_c, denoised_frame_sse_neon));
}
ASSERT_NE(0, feof(source_file)) << "Error reading source file";
}