 Chromium Code Reviews
 Chromium Code Reviews Issue 2776113002:
  Send data from mixer to APM limiter more often.  (Closed)
    
  
    Issue 2776113002:
  Send data from mixer to APM limiter more often.  (Closed) 
  | Index: webrtc/modules/audio_mixer/gain_change_calculator.cc | 
| diff --git a/webrtc/modules/audio_mixer/gain_change_calculator.cc b/webrtc/modules/audio_mixer/gain_change_calculator.cc | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..f8bdf1d3de1fed0c01873460c154c14a60a4a8ed | 
| --- /dev/null | 
| +++ b/webrtc/modules/audio_mixer/gain_change_calculator.cc | 
| @@ -0,0 +1,56 @@ | 
| +/* | 
| + * Copyright (c) 2017 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. | 
| + */ | 
| + | 
| +#include "webrtc/modules/audio_mixer/gain_change_calculator.h" | 
| + | 
| +#include <cmath> | 
| 
hlundin-webrtc
2017/03/29 07:22:56
math.h
We tend to use the C-version of a header th
 
aleloi
2017/03/29 10:56:11
Done. Consequence: cmath seems to put a 'fabs' in
 | 
| +#include <vector> | 
| + | 
| +namespace webrtc { | 
| + | 
| +namespace { | 
| +constexpr int16_t kReliabilityThreshold = 100; | 
| +} // namespace | 
| + | 
| +float GainChangeCalculator::CalculateGainChange( | 
| + rtc::ArrayView<const int16_t> in, | 
| + rtc::ArrayView<const int16_t> out) { | 
| + RTC_DCHECK_EQ(in.size(), out.size()); | 
| + | 
| + std::vector<float> gain(in.size()); | 
| + auto gain_view = rtc::ArrayView<float>(gain.data(), gain.size()); | 
| + CalculateGain(in, out, gain_view); | 
| 
hlundin-webrtc
2017/03/29 07:22:56
std::vector should implicitly convert to rtc::Arra
 
aleloi
2017/03/29 10:56:11
Done.
 | 
| + return CalculateDifferences(gain_view); | 
| 
hlundin-webrtc
2017/03/29 07:22:55
... and here.
 
aleloi
2017/03/29 10:56:11
Done.
 | 
| +} | 
| + | 
| +void GainChangeCalculator::CalculateGain(rtc::ArrayView<const int16_t> in, | 
| + rtc::ArrayView<const int16_t> out, | 
| + rtc::ArrayView<float> gain) { | 
| + RTC_DCHECK_EQ(in.size(), out.size()); | 
| + RTC_DCHECK_EQ(in.size(), gain.size()); | 
| + | 
| + for (size_t i = 0; i < in.size(); ++i) { | 
| + if (std::abs(in[i]) >= kReliabilityThreshold) { | 
| + last_reliable_gain_ = out[i] / static_cast<float>(in[i]); | 
| + } | 
| + gain[i] = last_reliable_gain_; | 
| + } | 
| +} | 
| + | 
| +float GainChangeCalculator::CalculateDifferences( | 
| + rtc::ArrayView<const float> values) { | 
| + float res = 0; | 
| + for (float f : values) { | 
| + res += std::fabs(f - last_value_); | 
| + last_value_ = f; | 
| + } | 
| + return res; | 
| +} | 
| +} // namespace webrtc |