| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2  *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 
| 3  * | 3  * | 
| 4  *  Use of this source code is governed by a BSD-style license | 4  *  Use of this source code is governed by a BSD-style license | 
| 5  *  that can be found in the LICENSE file in the root of the source | 5  *  that can be found in the LICENSE file in the root of the source | 
| 6  *  tree. An additional intellectual property rights grant can be found | 6  *  tree. An additional intellectual property rights grant can be found | 
| 7  *  in the file PATENTS.  All contributing project authors may | 7  *  in the file PATENTS.  All contributing project authors may | 
| 8  *  be found in the AUTHORS file in the root of the source tree. | 8  *  be found in the AUTHORS file in the root of the source tree. | 
| 9  */ | 9  */ | 
| 10 | 10 | 
| 11 #include "webrtc/tools/agc/test_utils.h" | 11 #include "webrtc/tools/agc/test_utils.h" | 
| 12 | 12 | 
| 13 #include <cmath> | 13 #include <cmath> | 
| 14 | 14 | 
| 15 #include <algorithm> | 15 #include <algorithm> | 
| 16 | 16 | 
| 17 #include "webrtc/modules/interface/module_common_types.h" | 17 #include "webrtc/modules/interface/module_common_types.h" | 
| 18 | 18 | 
| 19 namespace webrtc { | 19 namespace webrtc { | 
| 20 | 20 | 
| 21 float MicLevel2Gain(int gain_range_db, int level) { | 21 float MicLevel2Gain(int gain_range_db, int level) { | 
| 22   return (level - 127.0f) / 128.0f * gain_range_db / 2; | 22   return (level - 127.0f) / 128.0f * gain_range_db / 2; | 
| 23 } | 23 } | 
| 24 | 24 | 
| 25 float Db2Linear(float db) { | 25 float Db2Linear(float db) { | 
| 26   return powf(10.0f, db / 20.0f); | 26   return powf(10.0f, db / 20.0f); | 
| 27 } | 27 } | 
| 28 | 28 | 
| 29 void ApplyGainLinear(float gain, float last_gain, AudioFrame* frame) { | 29 void ApplyGainLinear(float gain, float last_gain, AudioFrame* frame) { | 
| 30   const int frame_length = frame->samples_per_channel_ * frame->num_channels_; | 30   const size_t frame_length = | 
|  | 31       frame->samples_per_channel_ * frame->num_channels_; | 
| 31   // Smooth the transition between gain levels across the frame. | 32   // Smooth the transition between gain levels across the frame. | 
| 32   float smoothed_gain = last_gain; | 33   float smoothed_gain = last_gain; | 
| 33   float gain_step = (gain - last_gain) / (frame_length - 1); | 34   float gain_step = (gain - last_gain) / (frame_length - 1); | 
| 34   for (int i = 0; i < frame_length; ++i) { | 35   for (size_t i = 0; i < frame_length; ++i) { | 
| 35     smoothed_gain += gain_step; | 36     smoothed_gain += gain_step; | 
| 36     float sample = std::floor(frame->data_[i] * smoothed_gain + 0.5); | 37     float sample = std::floor(frame->data_[i] * smoothed_gain + 0.5); | 
| 37     sample = std::max(std::min(32767.0f, sample), -32768.0f); | 38     sample = std::max(std::min(32767.0f, sample), -32768.0f); | 
| 38     frame->data_[i] = static_cast<int16_t>(sample); | 39     frame->data_[i] = static_cast<int16_t>(sample); | 
| 39   } | 40   } | 
| 40 } | 41 } | 
| 41 | 42 | 
| 42 void ApplyGain(float gain_db, float last_gain_db, AudioFrame* frame) { | 43 void ApplyGain(float gain_db, float last_gain_db, AudioFrame* frame) { | 
| 43   ApplyGainLinear(Db2Linear(gain_db), Db2Linear(last_gain_db), frame); | 44   ApplyGainLinear(Db2Linear(gain_db), Db2Linear(last_gain_db), frame); | 
| 44 } | 45 } | 
| 45 | 46 | 
| 46 void SimulateMic(int gain_range_db, int mic_level, int last_mic_level, | 47 void SimulateMic(int gain_range_db, int mic_level, int last_mic_level, | 
| 47                  AudioFrame* frame) { | 48                  AudioFrame* frame) { | 
| 48   assert(mic_level >= 0 && mic_level <= 255); | 49   assert(mic_level >= 0 && mic_level <= 255); | 
| 49   assert(last_mic_level >= 0 && last_mic_level <= 255); | 50   assert(last_mic_level >= 0 && last_mic_level <= 255); | 
| 50   ApplyGain(MicLevel2Gain(gain_range_db, mic_level), | 51   ApplyGain(MicLevel2Gain(gain_range_db, mic_level), | 
| 51             MicLevel2Gain(gain_range_db, last_mic_level), | 52             MicLevel2Gain(gain_range_db, last_mic_level), | 
| 52             frame); | 53             frame); | 
| 53 } | 54 } | 
| 54 | 55 | 
| 55 void SimulateMic(int gain_map[255], int mic_level, int last_mic_level, | 56 void SimulateMic(int gain_map[255], int mic_level, int last_mic_level, | 
| 56                  AudioFrame* frame) { | 57                  AudioFrame* frame) { | 
| 57   assert(mic_level >= 0 && mic_level <= 255); | 58   assert(mic_level >= 0 && mic_level <= 255); | 
| 58   assert(last_mic_level >= 0 && last_mic_level <= 255); | 59   assert(last_mic_level >= 0 && last_mic_level <= 255); | 
| 59   ApplyGain(gain_map[mic_level], gain_map[last_mic_level], frame); | 60   ApplyGain(gain_map[mic_level], gain_map[last_mic_level], frame); | 
| 60 } | 61 } | 
| 61 | 62 | 
| 62 }  // namespace webrtc | 63 }  // namespace webrtc | 
| 63 | 64 | 
| OLD | NEW | 
|---|