OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "remoting/host/audio_silence_detector.h" | 5 #include "remoting/host/audio_silence_detector.h" |
6 | 6 |
7 #include <stdlib.h> | 7 #include <stdlib.h> |
8 | 8 |
9 namespace remoting { | 9 namespace remoting { |
10 | 10 |
(...skipping 16 matching lines...) Expand all Loading... |
27 AudioSilenceDetector::~AudioSilenceDetector() { | 27 AudioSilenceDetector::~AudioSilenceDetector() { |
28 } | 28 } |
29 | 29 |
30 void AudioSilenceDetector::Reset(int sampling_rate, int channels) { | 30 void AudioSilenceDetector::Reset(int sampling_rate, int channels) { |
31 DCHECK_GT(sampling_rate, 0); | 31 DCHECK_GT(sampling_rate, 0); |
32 silence_length_ = 0; | 32 silence_length_ = 0; |
33 silence_length_max_ = | 33 silence_length_max_ = |
34 sampling_rate * channels * kSilencePeriodThresholdSeconds; | 34 sampling_rate * channels * kSilencePeriodThresholdSeconds; |
35 } | 35 } |
36 | 36 |
37 bool AudioSilenceDetector::IsSilence(const int16* samples, | 37 bool AudioSilenceDetector::IsSilence(const int16_t* samples, |
38 size_t samples_count) { | 38 size_t samples_count) { |
39 bool silent_packet = true; | 39 bool silent_packet = true; |
40 // Potentially this loop can be optimized (e.g. using SSE or adding special | 40 // Potentially this loop can be optimized (e.g. using SSE or adding special |
41 // case for threshold_==0), but it's not worth worrying about because the | 41 // case for threshold_==0), but it's not worth worrying about because the |
42 // amount of data it processes is relaively small. | 42 // amount of data it processes is relaively small. |
43 for (size_t i = 0; i < samples_count; ++i) { | 43 for (size_t i = 0; i < samples_count; ++i) { |
44 if (abs(samples[i]) > threshold_) { | 44 if (abs(samples[i]) > threshold_) { |
45 silent_packet = false; | 45 silent_packet = false; |
46 break; | 46 break; |
47 } | 47 } |
48 } | 48 } |
49 | 49 |
50 if (!silent_packet) { | 50 if (!silent_packet) { |
51 silence_length_ = 0; | 51 silence_length_ = 0; |
52 return false; | 52 return false; |
53 } | 53 } |
54 | 54 |
55 silence_length_ += samples_count; | 55 silence_length_ += samples_count; |
56 return silence_length_ > silence_length_max_; | 56 return silence_length_ > silence_length_max_; |
57 } | 57 } |
58 | 58 |
59 } // namespace remoting | 59 } // namespace remoting |
OLD | NEW |