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

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

Issue 1482913003: Initial VideoProcessing refactoring. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Based on pbos review Created 5 years 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 36e1b9bbfd6d314e4c4f22d60e1ed9ffe0573040..af7dbb21811adb97f7adf15587736293bdaca394 100644
--- a/webrtc/modules/video_processing/frame_preprocessor.cc
+++ b/webrtc/modules/video_processing/frame_preprocessor.cc
@@ -10,30 +10,24 @@
#include "webrtc/modules/video_processing/frame_preprocessor.h"
+#include "webrtc/modules/video_processing/video_denoiser.h"
+
namespace webrtc {
VPMFramePreprocessor::VPMFramePreprocessor()
: 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_) {
- denoiser_ = new VideoDenoiser();
- } else {
- denoiser_ = nullptr;
- }
}
VPMFramePreprocessor::~VPMFramePreprocessor() {
Reset();
delete ca_;
delete vd_;
- if (enable_denoising_)
- delete denoiser_;
delete spatial_resampler_;
}
@@ -61,7 +55,7 @@ void VPMFramePreprocessor::SetInputFrameResampleMode(
int32_t VPMFramePreprocessor::SetTargetResolution(
uint32_t width, uint32_t height, uint32_t frame_rate) {
- if ( (width == 0) || (height == 0) || (frame_rate == 0)) {
+ if ((width == 0) || (height == 0) || (frame_rate == 0)) {
return VPM_PARAMETER_ERROR;
}
int32_t ret_val = 0;
@@ -86,70 +80,62 @@ void VPMFramePreprocessor::UpdateIncomingframe_rate() {
vd_->UpdateIncomingframe_rate();
}
-uint32_t VPMFramePreprocessor::Decimatedframe_rate() {
- return vd_->Decimatedframe_rate();
+uint32_t VPMFramePreprocessor::GetDecimatedFrameRate() {
+ return vd_->GetDecimatedFrameRate();
}
-uint32_t VPMFramePreprocessor::DecimatedWidth() const {
+uint32_t VPMFramePreprocessor::GetDecimatedWidth() const {
return spatial_resampler_->TargetWidth();
}
-uint32_t VPMFramePreprocessor::DecimatedHeight() const {
+uint32_t VPMFramePreprocessor::GetDecimatedHeight() const {
return spatial_resampler_->TargetHeight();
}
-int32_t VPMFramePreprocessor::PreprocessFrame(const VideoFrame& frame,
- VideoFrame** processed_frame) {
+void VPMFramePreprocessor::EnableDenosing(bool enable) {
+ denoiser_.reset(new VideoDenoiser());
+}
+
+const VideoFrame* VPMFramePreprocessor::PreprocessFrame(
+ const VideoFrame& frame) {
if (frame.IsZeroSize()) {
- return VPM_PARAMETER_ERROR;
+ return nullptr;
}
vd_->UpdateIncomingframe_rate();
-
if (vd_->DropFrame()) {
- return 1; // drop 1 frame
+ return nullptr;
}
- // 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 = nullptr;
- if (denoiser_ != nullptr) {
- denoiser_->DenoiseFrame(frame, &denoised_frame_);
- *processed_frame = &denoised_frame_;
+ const VideoFrame* current_frame = &frame;
+ if (denoiser_) {
+ denoiser_->DenoiseFrame(*current_frame, &denoised_frame_);
+ current_frame = &denoised_frame_;
}
- if (spatial_resampler_->ApplyResample(frame.width(), frame.height())) {
- int32_t ret;
- if (enable_denoising_) {
- ret = spatial_resampler_->ResampleFrame(denoised_frame_,
- &resampled_frame_);
- } else {
- ret = spatial_resampler_->ResampleFrame(frame, &resampled_frame_);
+ if (spatial_resampler_->ApplyResample(current_frame->width(),
+ current_frame->height())) {
+ if (spatial_resampler_->ResampleFrame(*current_frame, &resampled_frame_) !=
+ VPM_OK) {
+ return nullptr;
}
- if (ret != VPM_OK) return ret;
- *processed_frame = &resampled_frame_;
+ current_frame = &resampled_frame_;
}
// Perform content analysis on the frame to be encoded.
- if (enable_ca_) {
+ if (enable_ca_ && frame_cnt_ % kSkipFrameCA == 0) {
// Compute new metrics every |kSkipFramesCA| frames, starting with
// the first frame.
- if (frame_cnt_ % kSkipFrameCA == 0) {
- if (*processed_frame == nullptr) {
- content_metrics_ = ca_->ComputeContentMetrics(frame);
- } else {
- content_metrics_ = ca_->ComputeContentMetrics(**processed_frame);
- }
- }
+ content_metrics_ = ca_->ComputeContentMetrics(*current_frame);
}
++frame_cnt_;
- return VPM_OK;
+ return current_frame;
}
-VideoContentMetrics* VPMFramePreprocessor::ContentMetrics() const {
+VideoContentMetrics* VPMFramePreprocessor::GetContentMetrics() const {
return content_metrics_;
}
-} // namespace
+} // namespace webrtc

Powered by Google App Engine
This is Rietveld 408576698