AGC2 size_t -> int
Bug: webrtc:7494 Change-Id: I5ecf242e83b509931c1764a37339d11506c5afc6 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/213341 Reviewed-by: Sam Zackrisson <saza@webrtc.org> Commit-Queue: Alessio Bazzica <alessiob@webrtc.org> Cr-Commit-Position: refs/heads/master@{#33600}
This commit is contained in:

committed by
Commit Bot

parent
2178d1ae69
commit
b995bb86df
@ -19,9 +19,9 @@ constexpr float kMinFloatS16Value = -32768.f;
|
|||||||
constexpr float kMaxFloatS16Value = 32767.f;
|
constexpr float kMaxFloatS16Value = 32767.f;
|
||||||
constexpr float kMaxAbsFloatS16Value = 32768.0f;
|
constexpr float kMaxAbsFloatS16Value = 32768.0f;
|
||||||
|
|
||||||
constexpr size_t kFrameDurationMs = 10;
|
constexpr int kFrameDurationMs = 10;
|
||||||
constexpr size_t kSubFramesInFrame = 20;
|
constexpr int kSubFramesInFrame = 20;
|
||||||
constexpr size_t kMaximalNumberOfSamplesPerChannel = 480;
|
constexpr int kMaximalNumberOfSamplesPerChannel = 480;
|
||||||
|
|
||||||
constexpr float kAttackFilterConstant = 0.f;
|
constexpr float kAttackFilterConstant = 0.f;
|
||||||
|
|
||||||
@ -38,7 +38,7 @@ constexpr float kLimiterThresholdForAgcGainDbfs = -kHeadroomDbfs;
|
|||||||
constexpr float kVadConfidenceThreshold = 0.9f;
|
constexpr float kVadConfidenceThreshold = 0.9f;
|
||||||
|
|
||||||
// The amount of 'memory' of the Level Estimator. Decides leak factors.
|
// The amount of 'memory' of the Level Estimator. Decides leak factors.
|
||||||
constexpr size_t kFullBufferSizeMs = 1200;
|
constexpr int kFullBufferSizeMs = 1200;
|
||||||
constexpr float kFullBufferLeakFactor = 1.f - 1.f / kFullBufferSizeMs;
|
constexpr float kFullBufferLeakFactor = 1.f - 1.f / kFullBufferSizeMs;
|
||||||
|
|
||||||
constexpr float kInitialSpeechLevelEstimateDbfs = -30.f;
|
constexpr float kInitialSpeechLevelEstimateDbfs = -30.f;
|
||||||
@ -51,12 +51,12 @@ constexpr int kDefaultLevelEstimatorAdjacentSpeechFramesThreshold = 1;
|
|||||||
constexpr float kDefaultInitialSaturationMarginDb = 20.f;
|
constexpr float kDefaultInitialSaturationMarginDb = 20.f;
|
||||||
constexpr float kDefaultExtraSaturationMarginDb = 2.f;
|
constexpr float kDefaultExtraSaturationMarginDb = 2.f;
|
||||||
|
|
||||||
constexpr size_t kPeakEnveloperSuperFrameLengthMs = 400;
|
constexpr int kPeakEnveloperSuperFrameLengthMs = 400;
|
||||||
static_assert(kFullBufferSizeMs % kPeakEnveloperSuperFrameLengthMs == 0,
|
static_assert(kFullBufferSizeMs % kPeakEnveloperSuperFrameLengthMs == 0,
|
||||||
"Full buffer size should be a multiple of super frame length for "
|
"Full buffer size should be a multiple of super frame length for "
|
||||||
"optimal Saturation Protector performance.");
|
"optimal Saturation Protector performance.");
|
||||||
|
|
||||||
constexpr size_t kPeakEnveloperBufferSize =
|
constexpr int kPeakEnveloperBufferSize =
|
||||||
kFullBufferSizeMs / kPeakEnveloperSuperFrameLengthMs + 1;
|
kFullBufferSizeMs / kPeakEnveloperSuperFrameLengthMs + 1;
|
||||||
|
|
||||||
// This value is 10 ** (-1/20 * frame_size_ms / satproc_attack_ms),
|
// This value is 10 ** (-1/20 * frame_size_ms / satproc_attack_ms),
|
||||||
@ -76,9 +76,9 @@ constexpr float kDecayFilterConstant = 0.9998848773724686f;
|
|||||||
// Number of interpolation points for each region of the limiter.
|
// Number of interpolation points for each region of the limiter.
|
||||||
// These values have been tuned to limit the interpolated gain curve error given
|
// These values have been tuned to limit the interpolated gain curve error given
|
||||||
// the limiter parameters and allowing a maximum error of +/- 32768^-1.
|
// the limiter parameters and allowing a maximum error of +/- 32768^-1.
|
||||||
constexpr size_t kInterpolatedGainCurveKneePoints = 22;
|
constexpr int kInterpolatedGainCurveKneePoints = 22;
|
||||||
constexpr size_t kInterpolatedGainCurveBeyondKneePoints = 10;
|
constexpr int kInterpolatedGainCurveBeyondKneePoints = 10;
|
||||||
constexpr size_t kInterpolatedGainCurveTotalPoints =
|
constexpr int kInterpolatedGainCurveTotalPoints =
|
||||||
kInterpolatedGainCurveKneePoints + kInterpolatedGainCurveBeyondKneePoints;
|
kInterpolatedGainCurveKneePoints + kInterpolatedGainCurveBeyondKneePoints;
|
||||||
|
|
||||||
} // namespace webrtc
|
} // namespace webrtc
|
||||||
|
@ -25,7 +25,7 @@ constexpr float kInitialFilterStateLevel = 0.f;
|
|||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
FixedDigitalLevelEstimator::FixedDigitalLevelEstimator(
|
FixedDigitalLevelEstimator::FixedDigitalLevelEstimator(
|
||||||
size_t sample_rate_hz,
|
int sample_rate_hz,
|
||||||
ApmDataDumper* apm_data_dumper)
|
ApmDataDumper* apm_data_dumper)
|
||||||
: apm_data_dumper_(apm_data_dumper),
|
: apm_data_dumper_(apm_data_dumper),
|
||||||
filter_state_level_(kInitialFilterStateLevel) {
|
filter_state_level_(kInitialFilterStateLevel) {
|
||||||
@ -52,8 +52,8 @@ std::array<float, kSubFramesInFrame> FixedDigitalLevelEstimator::ComputeLevel(
|
|||||||
for (size_t channel_idx = 0; channel_idx < float_frame.num_channels();
|
for (size_t channel_idx = 0; channel_idx < float_frame.num_channels();
|
||||||
++channel_idx) {
|
++channel_idx) {
|
||||||
const auto channel = float_frame.channel(channel_idx);
|
const auto channel = float_frame.channel(channel_idx);
|
||||||
for (size_t sub_frame = 0; sub_frame < kSubFramesInFrame; ++sub_frame) {
|
for (int sub_frame = 0; sub_frame < kSubFramesInFrame; ++sub_frame) {
|
||||||
for (size_t sample_in_sub_frame = 0;
|
for (int sample_in_sub_frame = 0;
|
||||||
sample_in_sub_frame < samples_in_sub_frame_; ++sample_in_sub_frame) {
|
sample_in_sub_frame < samples_in_sub_frame_; ++sample_in_sub_frame) {
|
||||||
envelope[sub_frame] =
|
envelope[sub_frame] =
|
||||||
std::max(envelope[sub_frame],
|
std::max(envelope[sub_frame],
|
||||||
@ -66,14 +66,14 @@ std::array<float, kSubFramesInFrame> FixedDigitalLevelEstimator::ComputeLevel(
|
|||||||
// Make sure envelope increases happen one step earlier so that the
|
// Make sure envelope increases happen one step earlier so that the
|
||||||
// corresponding *gain decrease* doesn't miss a sudden signal
|
// corresponding *gain decrease* doesn't miss a sudden signal
|
||||||
// increase due to interpolation.
|
// increase due to interpolation.
|
||||||
for (size_t sub_frame = 0; sub_frame < kSubFramesInFrame - 1; ++sub_frame) {
|
for (int sub_frame = 0; sub_frame < kSubFramesInFrame - 1; ++sub_frame) {
|
||||||
if (envelope[sub_frame] < envelope[sub_frame + 1]) {
|
if (envelope[sub_frame] < envelope[sub_frame + 1]) {
|
||||||
envelope[sub_frame] = envelope[sub_frame + 1];
|
envelope[sub_frame] = envelope[sub_frame + 1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add attack / decay smoothing.
|
// Add attack / decay smoothing.
|
||||||
for (size_t sub_frame = 0; sub_frame < kSubFramesInFrame; ++sub_frame) {
|
for (int sub_frame = 0; sub_frame < kSubFramesInFrame; ++sub_frame) {
|
||||||
const float envelope_value = envelope[sub_frame];
|
const float envelope_value = envelope[sub_frame];
|
||||||
if (envelope_value > filter_state_level_) {
|
if (envelope_value > filter_state_level_) {
|
||||||
envelope[sub_frame] = envelope_value * (1 - kAttackFilterConstant) +
|
envelope[sub_frame] = envelope_value * (1 - kAttackFilterConstant) +
|
||||||
@ -97,9 +97,9 @@ std::array<float, kSubFramesInFrame> FixedDigitalLevelEstimator::ComputeLevel(
|
|||||||
return envelope;
|
return envelope;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FixedDigitalLevelEstimator::SetSampleRate(size_t sample_rate_hz) {
|
void FixedDigitalLevelEstimator::SetSampleRate(int sample_rate_hz) {
|
||||||
samples_in_frame_ = rtc::CheckedDivExact(sample_rate_hz * kFrameDurationMs,
|
samples_in_frame_ =
|
||||||
static_cast<size_t>(1000));
|
rtc::CheckedDivExact(sample_rate_hz * kFrameDurationMs, 1000);
|
||||||
samples_in_sub_frame_ =
|
samples_in_sub_frame_ =
|
||||||
rtc::CheckedDivExact(samples_in_frame_, kSubFramesInFrame);
|
rtc::CheckedDivExact(samples_in_frame_, kSubFramesInFrame);
|
||||||
CheckParameterCombination();
|
CheckParameterCombination();
|
||||||
|
@ -31,7 +31,7 @@ class FixedDigitalLevelEstimator {
|
|||||||
// kSubFramesInSample. For kFrameDurationMs=10 and
|
// kSubFramesInSample. For kFrameDurationMs=10 and
|
||||||
// kSubFramesInSample=20, this means that sample_rate_hz has to be
|
// kSubFramesInSample=20, this means that sample_rate_hz has to be
|
||||||
// divisible by 2000.
|
// divisible by 2000.
|
||||||
FixedDigitalLevelEstimator(size_t sample_rate_hz,
|
FixedDigitalLevelEstimator(int sample_rate_hz,
|
||||||
ApmDataDumper* apm_data_dumper);
|
ApmDataDumper* apm_data_dumper);
|
||||||
|
|
||||||
// The input is assumed to be in FloatS16 format. Scaled input will
|
// The input is assumed to be in FloatS16 format. Scaled input will
|
||||||
@ -43,7 +43,7 @@ class FixedDigitalLevelEstimator {
|
|||||||
|
|
||||||
// Rate may be changed at any time (but not concurrently) from the
|
// Rate may be changed at any time (but not concurrently) from the
|
||||||
// value passed to the constructor. The class is not thread safe.
|
// value passed to the constructor. The class is not thread safe.
|
||||||
void SetSampleRate(size_t sample_rate_hz);
|
void SetSampleRate(int sample_rate_hz);
|
||||||
|
|
||||||
// Resets the level estimator internal state.
|
// Resets the level estimator internal state.
|
||||||
void Reset();
|
void Reset();
|
||||||
@ -55,8 +55,8 @@ class FixedDigitalLevelEstimator {
|
|||||||
|
|
||||||
ApmDataDumper* const apm_data_dumper_ = nullptr;
|
ApmDataDumper* const apm_data_dumper_ = nullptr;
|
||||||
float filter_state_level_;
|
float filter_state_level_;
|
||||||
size_t samples_in_frame_;
|
int samples_in_frame_;
|
||||||
size_t samples_in_sub_frame_;
|
int samples_in_sub_frame_;
|
||||||
|
|
||||||
RTC_DISALLOW_COPY_AND_ASSIGN(FixedDigitalLevelEstimator);
|
RTC_DISALLOW_COPY_AND_ASSIGN(FixedDigitalLevelEstimator);
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user