| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "media/audio/audio_input_controller.h" | 5 #include "media/audio/audio_input_controller.h" |
| 6 | 6 |
| 7 namespace { | 7 namespace { |
| 8 | 8 |
| 9 const int kMaxSampleRate = 192000; | 9 const int kMaxSampleRate = 192000; |
| 10 const int kMaxBitsPerSample = 64; | 10 const int kMaxBitsPerSample = 64; |
| 11 const int kMaxInputChannels = 2; | 11 const int kMaxInputChannels = 2; |
| 12 const int kMaxSamplesPerPacket = kMaxSampleRate; | 12 const int kMaxSamplesPerPacket = kMaxSampleRate; |
| 13 | 13 |
| 14 } // namespace | 14 } // namespace |
| 15 | 15 |
| 16 namespace media { | 16 namespace media { |
| 17 | 17 |
| 18 // static |
| 19 AudioInputController::Factory* AudioInputController::factory_ = NULL; |
| 20 |
| 18 AudioInputController::AudioInputController(EventHandler* handler) | 21 AudioInputController::AudioInputController(EventHandler* handler) |
| 19 : handler_(handler), | 22 : handler_(handler), |
| 20 stream_(NULL), | 23 stream_(NULL), |
| 21 state_(kEmpty), | 24 state_(kEmpty), |
| 22 thread_("AudioInputControllerThread") { | 25 thread_("AudioInputControllerThread") { |
| 23 } | 26 } |
| 24 | 27 |
| 25 AudioInputController::~AudioInputController() { | 28 AudioInputController::~AudioInputController() { |
| 26 DCHECK(kClosed == state_ || kCreated == state_ || kEmpty == state_); | 29 DCHECK(kClosed == state_ || kCreated == state_ || kEmpty == state_); |
| 27 } | 30 } |
| 28 | 31 |
| 29 // static | 32 // static |
| 30 scoped_refptr<AudioInputController> AudioInputController::Create( | 33 scoped_refptr<AudioInputController> AudioInputController::Create( |
| 31 EventHandler* event_handler, | 34 EventHandler* event_handler, |
| 32 AudioManager::Format format, | 35 AudioManager::Format format, |
| 33 int channels, | 36 int channels, |
| 34 int sample_rate, | 37 int sample_rate, |
| 35 int bits_per_sample, | 38 int bits_per_sample, |
| 36 int samples_per_packet) { | 39 int samples_per_packet) { |
| 37 if ((channels > kMaxInputChannels) || (channels <= 0) || | 40 if ((channels > kMaxInputChannels) || (channels <= 0) || |
| 38 (sample_rate > kMaxSampleRate) || (sample_rate <= 0) || | 41 (sample_rate > kMaxSampleRate) || (sample_rate <= 0) || |
| 39 (bits_per_sample > kMaxBitsPerSample) || (bits_per_sample <= 0) || | 42 (bits_per_sample > kMaxBitsPerSample) || (bits_per_sample <= 0) || |
| 40 (samples_per_packet > kMaxSamplesPerPacket) || (samples_per_packet < 0)) | 43 (samples_per_packet > kMaxSamplesPerPacket) || (samples_per_packet < 0)) |
| 41 return NULL; | 44 return NULL; |
| 42 | 45 |
| 46 if (factory_) { |
| 47 return factory_->Create(event_handler, format, channels, sample_rate, |
| 48 bits_per_sample, samples_per_packet); |
| 49 } |
| 50 |
| 43 scoped_refptr<AudioInputController> controller = new AudioInputController( | 51 scoped_refptr<AudioInputController> controller = new AudioInputController( |
| 44 event_handler); | 52 event_handler); |
| 45 | 53 |
| 46 // Start the thread and post a task to create the audio input stream. | 54 // Start the thread and post a task to create the audio input stream. |
| 47 controller->thread_.Start(); | 55 controller->thread_.Start(); |
| 48 controller->thread_.message_loop()->PostTask( | 56 controller->thread_.message_loop()->PostTask( |
| 49 FROM_HERE, | 57 FROM_HERE, |
| 50 NewRunnableMethod(controller.get(), &AudioInputController::DoCreate, | 58 NewRunnableMethod(controller.get(), &AudioInputController::DoCreate, |
| 51 format, channels, sample_rate, bits_per_sample, | 59 format, channels, sample_rate, bits_per_sample, |
| 52 samples_per_packet)); | 60 samples_per_packet)); |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 149 } | 157 } |
| 150 | 158 |
| 151 void AudioInputController::OnError(AudioInputStream* stream, int code) { | 159 void AudioInputController::OnError(AudioInputStream* stream, int code) { |
| 152 // Handle error on the audio controller thread. | 160 // Handle error on the audio controller thread. |
| 153 thread_.message_loop()->PostTask( | 161 thread_.message_loop()->PostTask( |
| 154 FROM_HERE, | 162 FROM_HERE, |
| 155 NewRunnableMethod(this, &AudioInputController::DoReportError, code)); | 163 NewRunnableMethod(this, &AudioInputController::DoReportError, code)); |
| 156 } | 164 } |
| 157 | 165 |
| 158 } // namespace media | 166 } // namespace media |
| OLD | NEW |