Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(208)

Side by Side Diff: webrtc/tools/agc/test_utils.cc

Issue 1227893002: Update audio code to use size_t more correctly, webrtc/ portion. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc@master
Patch Set: Review comment Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/tools/agc/agc_manager_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
OLDNEW
« no previous file with comments | « webrtc/tools/agc/agc_manager_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698