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}
This commit is contained in:
@ -19,7 +19,6 @@ VPMFramePreprocessor::VPMFramePreprocessor()
|
||||
spatial_resampler_ = new VPMSimpleSpatialResampler();
|
||||
vd_ = new VPMVideoDecimator();
|
||||
EnableDenoising(false);
|
||||
denoised_frame_toggle_ = 0;
|
||||
}
|
||||
|
||||
VPMFramePreprocessor::~VPMFramePreprocessor() {
|
||||
@ -96,22 +95,10 @@ const VideoFrame* VPMFramePreprocessor::PreprocessFrame(
|
||||
|
||||
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_;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user