Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(883)

Unified Diff: webrtc/modules/video_processing/frame_preprocessor.cc

Issue 1466763002: Standalone denoiser (off by default). (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/video_processing/frame_preprocessor.cc
diff --git a/webrtc/modules/video_processing/frame_preprocessor.cc b/webrtc/modules/video_processing/frame_preprocessor.cc
index a3ec3c8c1c617d57c41d5ff3a40952857e4445a4..36e1b9bbfd6d314e4c4f22d60e1ed9ffe0573040 100644
--- a/webrtc/modules/video_processing/frame_preprocessor.cc
+++ b/webrtc/modules/video_processing/frame_preprocessor.cc
@@ -13,26 +13,34 @@
namespace webrtc {
VPMFramePreprocessor::VPMFramePreprocessor()
- : content_metrics_(NULL),
+ : content_metrics_(nullptr),
resampled_frame_(),
enable_ca_(false),
+ enable_denoising_(false),
frame_cnt_(0) {
spatial_resampler_ = new VPMSimpleSpatialResampler();
ca_ = new VPMContentAnalysis(true);
vd_ = new VPMVideoDecimator();
+ if (enable_denoising_) {
mflodman 2015/11/26 10:50:00 This can later be changed to only be an input para
+ denoiser_ = new VideoDenoiser();
+ } else {
+ denoiser_ = nullptr;
+ }
}
VPMFramePreprocessor::~VPMFramePreprocessor() {
Reset();
- delete spatial_resampler_;
delete ca_;
delete vd_;
+ if (enable_denoising_)
+ delete denoiser_;
+ delete spatial_resampler_;
}
void VPMFramePreprocessor::Reset() {
ca_->Release();
vd_->Reset();
- content_metrics_ = NULL;
+ content_metrics_ = nullptr;
spatial_resampler_->Reset();
enable_ca_ = false;
frame_cnt_ = 0;
@@ -104,11 +112,22 @@ int32_t VPMFramePreprocessor::PreprocessFrame(const VideoFrame& frame,
return 1; // drop 1 frame
}
- // Resizing incoming frame if needed. Otherwise, remains NULL.
+ // Resizing incoming frame if needed. Otherwise, remains nullptr.
// We are not allowed to resample the input frame (must make a copy of it).
- *processed_frame = NULL;
+ *processed_frame = nullptr;
+ if (denoiser_ != nullptr) {
+ denoiser_->DenoiseFrame(frame, &denoised_frame_);
+ *processed_frame = &denoised_frame_;
+ }
+
if (spatial_resampler_->ApplyResample(frame.width(), frame.height())) {
- int32_t ret = spatial_resampler_->ResampleFrame(frame, &resampled_frame_);
+ int32_t ret;
+ if (enable_denoising_) {
mflodman 2015/11/26 10:50:00 Change to denoiser != nullptr here too.
+ ret = spatial_resampler_->ResampleFrame(denoised_frame_,
+ &resampled_frame_);
+ } else {
+ ret = spatial_resampler_->ResampleFrame(frame, &resampled_frame_);
+ }
if (ret != VPM_OK) return ret;
*processed_frame = &resampled_frame_;
}
@@ -118,14 +137,14 @@ int32_t VPMFramePreprocessor::PreprocessFrame(const VideoFrame& frame,
// Compute new metrics every |kSkipFramesCA| frames, starting with
// the first frame.
if (frame_cnt_ % kSkipFrameCA == 0) {
- if (*processed_frame == NULL) {
+ if (*processed_frame == nullptr) {
content_metrics_ = ca_->ComputeContentMetrics(frame);
} else {
- content_metrics_ = ca_->ComputeContentMetrics(resampled_frame_);
+ content_metrics_ = ca_->ComputeContentMetrics(**processed_frame);
}
}
- ++frame_cnt_;
}
+ ++frame_cnt_;
return VPM_OK;
}

Powered by Google App Engine
This is Rietveld 408576698