This reverts commit 3f87250a4f0e6c69002fbcdfb995b0dfcd7bf710. Reason for revert: Downstream is fixed Original change's description: > Revert "Remove RTC_DISALLOW_COPY_AND_ASSIGN usages completely" > > This reverts commit 5f0eb93d2a44cec2102fc8c3757d5bb814bd145f. > > Reason for revert: Breaks downstream project. I'm going to fix that one and create a reland of this CL after. > > Original change's description: > > Remove RTC_DISALLOW_COPY_AND_ASSIGN usages completely > > > > Bug: webrtc:13555, webrtc:13082 > > Change-Id: Iff2cda6f516739419e97e975e03f77a98f74be03 > > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/249260 > > Reviewed-by: Harald Alvestrand <hta@webrtc.org> > > Reviewed-by: Artem Titov <titovartem@webrtc.org> > > Commit-Queue: (Daniel.L) Byoungchan Lee <daniel.l@hpcnt.com> > > Cr-Commit-Position: refs/heads/main@{#35805} > > TBR=hta@webrtc.org,titovartem@webrtc.org,daniel.l@hpcnt.com,webrtc-scoped@luci-project-accounts.iam.gserviceaccount.com > > Change-Id: I33d497f1132adfe6d151023195a388d9b7d548f9 > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Bug: webrtc:13555, webrtc:13082 > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/249364 > Reviewed-by: Artem Titov <titovartem@webrtc.org> > Owners-Override: Artem Titov <titovartem@webrtc.org> > Reviewed-by: Andrey Logvin <landrey@webrtc.org> > Reviewed-by: Björn Terelius <terelius@webrtc.org> > Commit-Queue: Artem Titov <titovartem@webrtc.org> > Cr-Commit-Position: refs/heads/main@{#35807} # Not skipping CQ checks because this is a reland. Bug: webrtc:13555, webrtc:13082 Change-Id: I7ef1ef3b6e3c41b1a96014aa75f003c0fcf33949 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/249365 Reviewed-by: Harald Alvestrand <hta@webrtc.org> Commit-Queue: Artem Titov <titovartem@webrtc.org> Cr-Commit-Position: refs/heads/main@{#35814}
64 lines
2.0 KiB
C++
64 lines
2.0 KiB
C++
/*
|
|
* Copyright (c) 2018 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 MODULES_AUDIO_PROCESSING_AGC2_LIMITER_H_
|
|
#define MODULES_AUDIO_PROCESSING_AGC2_LIMITER_H_
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include "modules/audio_processing/agc2/fixed_digital_level_estimator.h"
|
|
#include "modules/audio_processing/agc2/interpolated_gain_curve.h"
|
|
#include "modules/audio_processing/include/audio_frame_view.h"
|
|
|
|
namespace webrtc {
|
|
class ApmDataDumper;
|
|
|
|
class Limiter {
|
|
public:
|
|
Limiter(int sample_rate_hz,
|
|
ApmDataDumper* apm_data_dumper,
|
|
const std::string& histogram_name_prefix);
|
|
Limiter(const Limiter& limiter) = delete;
|
|
Limiter& operator=(const Limiter& limiter) = delete;
|
|
~Limiter();
|
|
|
|
// Applies limiter and hard-clipping to `signal`.
|
|
void Process(AudioFrameView<float> signal);
|
|
InterpolatedGainCurve::Stats GetGainCurveStats() const;
|
|
|
|
// Supported rates must be
|
|
// * supported by FixedDigitalLevelEstimator
|
|
// * below kMaximalNumberOfSamplesPerChannel*1000/kFrameDurationMs
|
|
// so that samples_per_channel fit in the
|
|
// per_sample_scaling_factors_ array.
|
|
void SetSampleRate(int sample_rate_hz);
|
|
|
|
// Resets the internal state.
|
|
void Reset();
|
|
|
|
float LastAudioLevel() const;
|
|
|
|
private:
|
|
const InterpolatedGainCurve interp_gain_curve_;
|
|
FixedDigitalLevelEstimator level_estimator_;
|
|
ApmDataDumper* const apm_data_dumper_ = nullptr;
|
|
|
|
// Work array containing the sub-frame scaling factors to be interpolated.
|
|
std::array<float, kSubFramesInFrame + 1> scaling_factors_ = {};
|
|
std::array<float, kMaximalNumberOfSamplesPerChannel>
|
|
per_sample_scaling_factors_ = {};
|
|
float last_scaling_factor_ = 1.f;
|
|
};
|
|
|
|
} // namespace webrtc
|
|
|
|
#endif // MODULES_AUDIO_PROCESSING_AGC2_LIMITER_H_
|