| 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 #ifndef MEDIA_AUDIO_AGC_AUDIO_STREAM_H_ | 5 #ifndef MEDIA_AUDIO_AGC_AUDIO_STREAM_H_ |
| 6 #define MEDIA_AUDIO_AGC_AUDIO_STREAM_H_ | 6 #define MEDIA_AUDIO_AGC_AUDIO_STREAM_H_ |
| 7 | 7 |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 10 #include "base/synchronization/lock.h" | 10 #include "base/synchronization/lock.h" |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 66 namespace media { | 66 namespace media { |
| 67 | 67 |
| 68 template <typename AudioInterface> | 68 template <typename AudioInterface> |
| 69 class MEDIA_EXPORT AgcAudioStream : public AudioInterface { | 69 class MEDIA_EXPORT AgcAudioStream : public AudioInterface { |
| 70 public: | 70 public: |
| 71 // Time between two successive timer events. | 71 // Time between two successive timer events. |
| 72 static const int kIntervalBetweenVolumeUpdatesMs = 1000; | 72 static const int kIntervalBetweenVolumeUpdatesMs = 1000; |
| 73 | 73 |
| 74 AgcAudioStream() | 74 AgcAudioStream() |
| 75 : agc_is_enabled_(false), max_volume_(0.0), normalized_volume_(0.0) { | 75 : agc_is_enabled_(false), max_volume_(0.0), normalized_volume_(0.0) { |
| 76 DVLOG(1) << __FUNCTION__; | |
| 77 } | 76 } |
| 78 | 77 |
| 79 virtual ~AgcAudioStream() { | 78 virtual ~AgcAudioStream() { |
| 80 DCHECK(thread_checker_.CalledOnValidThread()); | 79 DCHECK(thread_checker_.CalledOnValidThread()); |
| 81 DVLOG(1) << __FUNCTION__; | |
| 82 } | 80 } |
| 83 | 81 |
| 84 protected: | 82 protected: |
| 85 // Starts the periodic timer which periodically checks and updates the | 83 // Starts the periodic timer which periodically checks and updates the |
| 86 // current microphone volume level. | 84 // current microphone volume level. |
| 87 // The timer is only started if AGC mode is first enabled using the | 85 // The timer is only started if AGC mode is first enabled using the |
| 88 // SetAutomaticGainControl() method. | 86 // SetAutomaticGainControl() method. |
| 89 void StartAgc() { | 87 void StartAgc() { |
| 90 DVLOG(1) << "StartAgc()"; | |
| 91 DCHECK(thread_checker_.CalledOnValidThread()); | 88 DCHECK(thread_checker_.CalledOnValidThread()); |
| 92 if (!agc_is_enabled_ || timer_.IsRunning()) | 89 if (!agc_is_enabled_ || timer_.IsRunning()) |
| 93 return; | 90 return; |
| 94 | 91 |
| 95 // Query and cache the volume to avoid sending 0 as volume to AGC at the | 92 // Query and cache the volume to avoid sending 0 as volume to AGC at the |
| 96 // beginning of the audio stream, otherwise AGC will try to raise the | 93 // beginning of the audio stream, otherwise AGC will try to raise the |
| 97 // volume from 0. | 94 // volume from 0. |
| 98 QueryAndStoreNewMicrophoneVolume(); | 95 QueryAndStoreNewMicrophoneVolume(); |
| 99 | 96 |
| 100 timer_.Start(FROM_HERE, | 97 timer_.Start(FROM_HERE, |
| 101 base::TimeDelta::FromMilliseconds(kIntervalBetweenVolumeUpdatesMs), | 98 base::TimeDelta::FromMilliseconds(kIntervalBetweenVolumeUpdatesMs), |
| 102 this, &AgcAudioStream::QueryAndStoreNewMicrophoneVolume); | 99 this, &AgcAudioStream::QueryAndStoreNewMicrophoneVolume); |
| 103 } | 100 } |
| 104 | 101 |
| 105 // Stops the periodic timer which periodically checks and updates the | 102 // Stops the periodic timer which periodically checks and updates the |
| 106 // current microphone volume level. | 103 // current microphone volume level. |
| 107 void StopAgc() { | 104 void StopAgc() { |
| 108 DVLOG(1) << "StopAgc()"; | |
| 109 DCHECK(thread_checker_.CalledOnValidThread()); | 105 DCHECK(thread_checker_.CalledOnValidThread()); |
| 110 if (timer_.IsRunning()) | 106 if (timer_.IsRunning()) |
| 111 timer_.Stop(); | 107 timer_.Stop(); |
| 112 } | 108 } |
| 113 | 109 |
| 114 // Stores a new microphone volume level by checking the audio input device. | 110 // Stores a new microphone volume level by checking the audio input device. |
| 115 // Called on the audio manager thread. | 111 // Called on the audio manager thread. |
| 116 void UpdateAgcVolume() { | 112 void UpdateAgcVolume() { |
| 117 DCHECK(thread_checker_.CalledOnValidThread()); | 113 DCHECK(thread_checker_.CalledOnValidThread()); |
| 118 | 114 |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 199 | 195 |
| 200 // Protects |normalized_volume_| . | 196 // Protects |normalized_volume_| . |
| 201 base::Lock lock_; | 197 base::Lock lock_; |
| 202 | 198 |
| 203 DISALLOW_COPY_AND_ASSIGN(AgcAudioStream<AudioInterface>); | 199 DISALLOW_COPY_AND_ASSIGN(AgcAudioStream<AudioInterface>); |
| 204 }; | 200 }; |
| 205 | 201 |
| 206 } // namespace media | 202 } // namespace media |
| 207 | 203 |
| 208 #endif // MEDIA_AUDIO_AGC_AUDIO_STREAM_H_ | 204 #endif // MEDIA_AUDIO_AGC_AUDIO_STREAM_H_ |
| OLD | NEW |