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 "media/audio/audio_manager_base.h" | 5 #include "media/audio/audio_manager_base.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/macros.h" | 10 #include "base/macros.h" |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 AudioOutputStream* stream; | 129 AudioOutputStream* stream; |
130 switch (params.format()) { | 130 switch (params.format()) { |
131 case AudioParameters::AUDIO_PCM_LINEAR: | 131 case AudioParameters::AUDIO_PCM_LINEAR: |
132 DCHECK(AudioDeviceDescription::IsDefaultDevice(device_id)) | 132 DCHECK(AudioDeviceDescription::IsDefaultDevice(device_id)) |
133 << "AUDIO_PCM_LINEAR supports only the default device."; | 133 << "AUDIO_PCM_LINEAR supports only the default device."; |
134 stream = MakeLinearOutputStream(params, log_callback); | 134 stream = MakeLinearOutputStream(params, log_callback); |
135 break; | 135 break; |
136 case AudioParameters::AUDIO_PCM_LOW_LATENCY: | 136 case AudioParameters::AUDIO_PCM_LOW_LATENCY: |
137 stream = MakeLowLatencyOutputStream(params, device_id, log_callback); | 137 stream = MakeLowLatencyOutputStream(params, device_id, log_callback); |
138 break; | 138 break; |
| 139 case AudioParameters::AUDIO_RAW_AC3: |
| 140 case AudioParameters::AUDIO_RAW_EAC3: |
| 141 stream = MakeRawOutputStream(params, device_id, log_callback); |
| 142 break; |
139 case AudioParameters::AUDIO_FAKE: | 143 case AudioParameters::AUDIO_FAKE: |
140 stream = FakeAudioOutputStream::MakeFakeStream(this, params); | 144 stream = FakeAudioOutputStream::MakeFakeStream(this, params); |
141 break; | 145 break; |
142 default: | 146 default: |
143 stream = NULL; | 147 stream = NULL; |
144 break; | 148 break; |
145 } | 149 } |
146 | 150 |
147 if (stream) { | 151 if (stream) { |
148 ++num_output_streams_; | 152 ++num_output_streams_; |
149 } | 153 } |
150 | 154 |
151 return stream; | 155 return stream; |
152 } | 156 } |
153 | 157 |
| 158 AudioOutputStream* AudioManagerBase::MakeRawOutputStream( |
| 159 const AudioParameters& params, |
| 160 const std::string& device_id, |
| 161 const LogCallback& log_callback) { |
| 162 return nullptr; |
| 163 } |
| 164 |
154 AudioInputStream* AudioManagerBase::MakeAudioInputStream( | 165 AudioInputStream* AudioManagerBase::MakeAudioInputStream( |
155 const AudioParameters& params, | 166 const AudioParameters& params, |
156 const std::string& device_id, | 167 const std::string& device_id, |
157 const LogCallback& log_callback) { | 168 const LogCallback& log_callback) { |
158 DCHECK(GetTaskRunner()->BelongsToCurrentThread()); | 169 DCHECK(GetTaskRunner()->BelongsToCurrentThread()); |
159 | 170 |
160 if (!params.IsValid() || (params.channels() > kMaxInputChannels) || | 171 if (!params.IsValid() || (params.channels() > kMaxInputChannels) || |
161 device_id.empty()) { | 172 device_id.empty()) { |
162 DLOG(ERROR) << "Audio parameters are invalid for device " << device_id; | 173 DLOG(ERROR) << "Audio parameters are invalid for device " << device_id; |
163 return NULL; | 174 return NULL; |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
247 std::find_if(output_dispatchers_.begin(), output_dispatchers_.end(), | 258 std::find_if(output_dispatchers_.begin(), output_dispatchers_.end(), |
248 CompareByParams(dispatcher_params)); | 259 CompareByParams(dispatcher_params)); |
249 if (it != output_dispatchers_.end()) { | 260 if (it != output_dispatchers_.end()) { |
250 delete dispatcher_params; | 261 delete dispatcher_params; |
251 return new AudioOutputProxy((*it)->dispatcher.get()); | 262 return new AudioOutputProxy((*it)->dispatcher.get()); |
252 } | 263 } |
253 | 264 |
254 const base::TimeDelta kCloseDelay = | 265 const base::TimeDelta kCloseDelay = |
255 base::TimeDelta::FromSeconds(kStreamCloseDelaySeconds); | 266 base::TimeDelta::FromSeconds(kStreamCloseDelaySeconds); |
256 scoped_refptr<AudioOutputDispatcher> dispatcher; | 267 scoped_refptr<AudioOutputDispatcher> dispatcher; |
257 if (output_params.format() != AudioParameters::AUDIO_FAKE) { | 268 if (output_params.format() != AudioParameters::AUDIO_FAKE && |
| 269 !output_params.IsRawFormat()) { |
258 dispatcher = new AudioOutputResampler(this, params, output_params, | 270 dispatcher = new AudioOutputResampler(this, params, output_params, |
259 output_device_id, | 271 output_device_id, |
260 kCloseDelay); | 272 kCloseDelay); |
261 } else { | 273 } else { |
262 dispatcher = new AudioOutputDispatcherImpl(this, output_params, | 274 dispatcher = new AudioOutputDispatcherImpl(this, output_params, |
263 output_device_id, | 275 output_device_id, |
264 kCloseDelay); | 276 kCloseDelay); |
265 } | 277 } |
266 | 278 |
267 dispatcher_params->dispatcher = dispatcher; | 279 dispatcher_params->dispatcher = dispatcher; |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
382 | 394 |
383 return 0; | 395 return 0; |
384 } | 396 } |
385 | 397 |
386 std::unique_ptr<AudioLog> AudioManagerBase::CreateAudioLog( | 398 std::unique_ptr<AudioLog> AudioManagerBase::CreateAudioLog( |
387 AudioLogFactory::AudioComponent component) { | 399 AudioLogFactory::AudioComponent component) { |
388 return audio_log_factory_->CreateAudioLog(component); | 400 return audio_log_factory_->CreateAudioLog(component); |
389 } | 401 } |
390 | 402 |
391 } // namespace media | 403 } // namespace media |
OLD | NEW |