Files
platform-external-webrtc/webrtc/modules/video_processing/util/noise_estimation.h
nisse 13d38fbe90 Delete all of the video_processing module but the denoiser code.
It is unused since cl https://codereview.webrtc.org/2386573002.

The new denoiser implementation and its tests are kept for now. This
code is also unused, but there are some plans to take this code into
use in the not too distant future.

BUG=None

Review-Url: https://codereview.webrtc.org/2496153002
Cr-Commit-Position: refs/heads/master@{#15338}
2016-11-30 15:44:59 +00:00

64 lines
1.9 KiB
C++

/*
* Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#ifndef WEBRTC_MODULES_VIDEO_PROCESSING_UTIL_NOISE_ESTIMATION_H_
#define WEBRTC_MODULES_VIDEO_PROCESSING_UTIL_NOISE_ESTIMATION_H_
#include <memory>
#include "webrtc/modules/include/module_common_types.h"
#include "webrtc/modules/video_processing/util/denoiser_filter.h"
namespace webrtc {
#define DISPLAY 0 // Rectangle diagnostics
#define DISPLAYNEON 0 // Rectangle diagnostics on NEON
const int kNoiseThreshold = 150;
const int kNoiseThresholdNeon = 70;
const int kConsecLowVarFrame = 6;
const int kAverageLumaMin = 20;
const int kAverageLumaMax = 220;
const int kBlockSelectionVarMax = kNoiseThreshold << 1;
// TODO(jackychen): To test different sampling strategy.
// Collect noise data every NOISE_SUBSAMPLE_INTERVAL blocks.
#define NOISE_SUBSAMPLE_INTERVAL 41
class NoiseEstimation {
public:
void Init(int width, int height, CpuType cpu_type);
// Collect noise data from one qualified block.
void GetNoise(int mb_index, uint32_t var, uint32_t luma);
// Reset the counter for consecutive low-var blocks.
void ResetConsecLowVar(int mb_index);
// Update noise level for current frame.
void UpdateNoiseLevel();
// 0: low noise, 1: high noise
uint8_t GetNoiseLevel();
private:
int width_;
int height_;
int mb_rows_;
int mb_cols_;
int num_noisy_block_;
int num_static_block_;
CpuType cpu_type_;
uint32_t noise_var_;
double noise_var_accum_;
double percent_static_block_;
std::unique_ptr<uint32_t[]> consec_low_var_;
};
} // namespace webrtc
#endif // WEBRTC_MODULES_VIDEO_PROCESSING_UTIL_NOISE_ESTIMATION_H_