| 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_AUDIO_INPUT_CONTROLLER_H_ | 5 #ifndef MEDIA_AUDIO_AUDIO_INPUT_CONTROLLER_H_ |
| 6 #define MEDIA_AUDIO_AUDIO_INPUT_CONTROLLER_H_ | 6 #define MEDIA_AUDIO_AUDIO_INPUT_CONTROLLER_H_ |
| 7 | 7 |
| 8 #include <string> | 8 #include <string> |
| 9 #include "base/atomicops.h" | 9 #include "base/atomicops.h" |
| 10 #include "base/callback.h" | 10 #include "base/callback.h" |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 181 // The audio device will be created on the audio thread, and when that is | 181 // The audio device will be created on the audio thread, and when that is |
| 182 // done, the event handler will receive an OnCreated() call from that same | 182 // done, the event handler will receive an OnCreated() call from that same |
| 183 // thread. |user_input_monitor| is used for typing detection and can be NULL. | 183 // thread. |user_input_monitor| is used for typing detection and can be NULL. |
| 184 static scoped_refptr<AudioInputController> CreateLowLatency( | 184 static scoped_refptr<AudioInputController> CreateLowLatency( |
| 185 AudioManager* audio_manager, | 185 AudioManager* audio_manager, |
| 186 EventHandler* event_handler, | 186 EventHandler* event_handler, |
| 187 const AudioParameters& params, | 187 const AudioParameters& params, |
| 188 const std::string& device_id, | 188 const std::string& device_id, |
| 189 // External synchronous writer for audio controller. | 189 // External synchronous writer for audio controller. |
| 190 SyncWriter* sync_writer, | 190 SyncWriter* sync_writer, |
| 191 UserInputMonitor* user_input_monitor); | 191 UserInputMonitor* user_input_monitor, |
| 192 const bool agc_is_enabled); |
| 192 | 193 |
| 193 // Factory method for creating an AudioInputController with an existing | 194 // Factory method for creating an AudioInputController with an existing |
| 194 // |stream| for low-latency mode, taking ownership of |stream|. The stream | 195 // |stream| for low-latency mode, taking ownership of |stream|. The stream |
| 195 // will be opened on the audio thread, and when that is done, the event | 196 // will be opened on the audio thread, and when that is done, the event |
| 196 // handler will receive an OnCreated() call from that same thread. | 197 // handler will receive an OnCreated() call from that same thread. |
| 197 // |user_input_monitor| is used for typing detection and can be NULL. | 198 // |user_input_monitor| is used for typing detection and can be NULL. |
| 198 static scoped_refptr<AudioInputController> CreateForStream( | 199 static scoped_refptr<AudioInputController> CreateForStream( |
| 199 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, | 200 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, |
| 200 EventHandler* event_handler, | 201 EventHandler* event_handler, |
| 201 AudioInputStream* stream, | 202 AudioInputStream* stream, |
| (...skipping 12 matching lines...) Expand all Loading... |
| 214 // is called. | 215 // is called. |
| 215 // It is safe to call this method more than once. Calls after the first one | 216 // It is safe to call this method more than once. Calls after the first one |
| 216 // will have no effect. | 217 // will have no effect. |
| 217 // This method trampolines to the audio thread. | 218 // This method trampolines to the audio thread. |
| 218 virtual void Close(const base::Closure& closed_task); | 219 virtual void Close(const base::Closure& closed_task); |
| 219 | 220 |
| 220 // Sets the capture volume of the input stream. The value 0.0 corresponds | 221 // Sets the capture volume of the input stream. The value 0.0 corresponds |
| 221 // to muted and 1.0 to maximum volume. | 222 // to muted and 1.0 to maximum volume. |
| 222 virtual void SetVolume(double volume); | 223 virtual void SetVolume(double volume); |
| 223 | 224 |
| 224 // Sets the Automatic Gain Control (AGC) state of the input stream. | |
| 225 // Changing the AGC state is not supported while recording is active. | |
| 226 virtual void SetAutomaticGainControl(bool enabled); | |
| 227 | |
| 228 // AudioInputCallback implementation. Threading details depends on the | 225 // AudioInputCallback implementation. Threading details depends on the |
| 229 // device-specific implementation. | 226 // device-specific implementation. |
| 230 virtual void OnData(AudioInputStream* stream, | 227 virtual void OnData(AudioInputStream* stream, |
| 231 const AudioBus* source, | 228 const AudioBus* source, |
| 232 uint32 hardware_delay_bytes, | 229 uint32 hardware_delay_bytes, |
| 233 double volume) override; | 230 double volume) override; |
| 234 virtual void OnError(AudioInputStream* stream) override; | 231 virtual void OnError(AudioInputStream* stream) override; |
| 235 | 232 |
| 236 bool SharedMemoryAndSyncSocketMode() const { return sync_writer_ != NULL; } | 233 bool SharedMemoryAndSyncSocketMode() const { return sync_writer_ != NULL; } |
| 237 | 234 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 260 SILENCE_STATE_NO_MEASUREMENT = 0, | 257 SILENCE_STATE_NO_MEASUREMENT = 0, |
| 261 SILENCE_STATE_ONLY_AUDIO = 1, | 258 SILENCE_STATE_ONLY_AUDIO = 1, |
| 262 SILENCE_STATE_ONLY_SILENCE = 2, | 259 SILENCE_STATE_ONLY_SILENCE = 2, |
| 263 SILENCE_STATE_AUDIO_AND_SILENCE = 3, | 260 SILENCE_STATE_AUDIO_AND_SILENCE = 3, |
| 264 SILENCE_STATE_MAX = SILENCE_STATE_AUDIO_AND_SILENCE | 261 SILENCE_STATE_MAX = SILENCE_STATE_AUDIO_AND_SILENCE |
| 265 }; | 262 }; |
| 266 #endif | 263 #endif |
| 267 | 264 |
| 268 AudioInputController(EventHandler* handler, | 265 AudioInputController(EventHandler* handler, |
| 269 SyncWriter* sync_writer, | 266 SyncWriter* sync_writer, |
| 270 UserInputMonitor* user_input_monitor); | 267 UserInputMonitor* user_input_monitor, |
| 268 const bool agc_is_enabled); |
| 271 virtual ~AudioInputController(); | 269 virtual ~AudioInputController(); |
| 272 | 270 |
| 273 // Methods called on the audio thread (owned by the AudioManager). | 271 // Methods called on the audio thread (owned by the AudioManager). |
| 274 void DoCreate(AudioManager* audio_manager, | 272 void DoCreate(AudioManager* audio_manager, |
| 275 const AudioParameters& params, | 273 const AudioParameters& params, |
| 276 const std::string& device_id); | 274 const std::string& device_id); |
| 277 void DoCreateForLowLatency(AudioManager* audio_manager, | 275 void DoCreateForLowLatency(AudioManager* audio_manager, |
| 278 const AudioParameters& params, | 276 const AudioParameters& params, |
| 279 const std::string& device_id); | 277 const std::string& device_id); |
| 280 void DoCreateForStream(AudioInputStream* stream_to_control); | 278 void DoCreateForStream(AudioInputStream* stream_to_control); |
| 281 void DoRecord(); | 279 void DoRecord(); |
| 282 void DoClose(); | 280 void DoClose(); |
| 283 void DoReportError(); | 281 void DoReportError(); |
| 284 void DoSetVolume(double volume); | 282 void DoSetVolume(double volume); |
| 285 void DoSetAutomaticGainControl(bool enabled); | |
| 286 void DoOnData(scoped_ptr<AudioBus> data); | 283 void DoOnData(scoped_ptr<AudioBus> data); |
| 287 void DoLogAudioLevels(float level_dbfs, int microphone_volume_percent); | 284 void DoLogAudioLevels(float level_dbfs, int microphone_volume_percent); |
| 288 | 285 |
| 289 // Method to check if we get recorded data after a stream was started, | 286 // Method to check if we get recorded data after a stream was started, |
| 290 // and log the result to UMA. | 287 // and log the result to UMA. |
| 291 void FirstCheckForNoData(); | 288 void FirstCheckForNoData(); |
| 292 | 289 |
| 293 // Method which ensures that OnError() is triggered when data recording | 290 // Method which ensures that OnError() is triggered when data recording |
| 294 // times out. Called on the audio thread. | 291 // times out. Called on the audio thread. |
| 295 void DoCheckForNoData(); | 292 void DoCheckForNoData(); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 344 | 341 |
| 345 // SyncWriter is used only in low-latency mode for synchronous writing. | 342 // SyncWriter is used only in low-latency mode for synchronous writing. |
| 346 SyncWriter* sync_writer_; | 343 SyncWriter* sync_writer_; |
| 347 | 344 |
| 348 static Factory* factory_; | 345 static Factory* factory_; |
| 349 | 346 |
| 350 double max_volume_; | 347 double max_volume_; |
| 351 | 348 |
| 352 UserInputMonitor* user_input_monitor_; | 349 UserInputMonitor* user_input_monitor_; |
| 353 | 350 |
| 351 const bool agc_is_enabled_; |
| 352 |
| 354 #if defined(AUDIO_POWER_MONITORING) | 353 #if defined(AUDIO_POWER_MONITORING) |
| 355 // Enabled in DoCrete() but not in DoCreateForStream(). | 354 // Enabled in DoCrete() but not in DoCreateForStream(). |
| 356 bool power_measurement_is_enabled_; | 355 bool power_measurement_is_enabled_; |
| 357 | 356 |
| 358 // Updated each time a power measurement is performed. | 357 // Updated each time a power measurement is performed. |
| 359 base::TimeTicks last_audio_level_log_time_; | 358 base::TimeTicks last_audio_level_log_time_; |
| 360 | 359 |
| 361 // Whether the silence state should sent as UMA stat. | 360 // Whether the silence state should sent as UMA stat. |
| 362 bool log_silence_state_; | 361 bool log_silence_state_; |
| 363 | 362 |
| 364 // The silence report sent as UMA stat at the end of a session. | 363 // The silence report sent as UMA stat at the end of a session. |
| 365 SilenceState silence_state_; | 364 SilenceState silence_state_; |
| 366 #endif | 365 #endif |
| 367 | 366 |
| 368 size_t prev_key_down_count_; | 367 size_t prev_key_down_count_; |
| 369 | 368 |
| 370 // Time when a low-latency stream is created. | 369 // Time when a low-latency stream is created. |
| 371 base::TimeTicks low_latency_create_time_; | 370 base::TimeTicks low_latency_create_time_; |
| 372 | 371 |
| 373 DISALLOW_COPY_AND_ASSIGN(AudioInputController); | 372 DISALLOW_COPY_AND_ASSIGN(AudioInputController); |
| 374 }; | 373 }; |
| 375 | 374 |
| 376 } // namespace media | 375 } // namespace media |
| 377 | 376 |
| 378 #endif // MEDIA_AUDIO_AUDIO_INPUT_CONTROLLER_H_ | 377 #endif // MEDIA_AUDIO_AUDIO_INPUT_CONTROLLER_H_ |
| OLD | NEW |