| 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_io.h" | 5 #include "media/audio/audio_io.h" |
| 6 | 6 |
| 7 #include <windows.h> | 7 #include <windows.h> |
| 8 #include <objbase.h> // This has to be before initguid.h | 8 #include <objbase.h> // This has to be before initguid.h |
| 9 #include <initguid.h> | 9 #include <initguid.h> |
| 10 #include <mmsystem.h> | 10 #include <mmsystem.h> |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 210 command_line.AppendArg(argument); | 210 command_line.AppendArg(argument); |
| 211 base::LaunchProcess(command_line, base::LaunchOptions(), NULL); | 211 base::LaunchProcess(command_line, base::LaunchOptions(), NULL); |
| 212 } | 212 } |
| 213 | 213 |
| 214 void AudioManagerWin::GetAudioInputDeviceNames( | 214 void AudioManagerWin::GetAudioInputDeviceNames( |
| 215 media::AudioDeviceNames* device_names) { | 215 media::AudioDeviceNames* device_names) { |
| 216 DCHECK(enumeration_type() != kUninitializedEnumeration); | 216 DCHECK(enumeration_type() != kUninitializedEnumeration); |
| 217 // Enumerate all active audio-endpoint capture devices. | 217 // Enumerate all active audio-endpoint capture devices. |
| 218 if (enumeration_type() == kWaveEnumeration) { | 218 if (enumeration_type() == kWaveEnumeration) { |
| 219 // Utilize the Wave API for Windows XP. | 219 // Utilize the Wave API for Windows XP. |
| 220 GetInputDeviceNamesWinXP(device_names); | 220 media::GetInputDeviceNamesWinXP(device_names); |
| 221 } else { | 221 } else { |
| 222 // Utilize the MMDevice API (part of Core Audio) for Vista and higher. | 222 // Utilize the MMDevice API (part of Core Audio) for Vista and higher. |
| 223 GetInputDeviceNamesWin(device_names); | 223 media::GetInputDeviceNamesWin(device_names); |
| 224 } | 224 } |
| 225 | 225 |
| 226 // Always add default device parameters as first element. | 226 // Always add default device parameters as first element. |
| 227 if (!device_names->empty()) { | 227 if (!device_names->empty()) { |
| 228 media::AudioDeviceName name; | 228 media::AudioDeviceName name; |
| 229 name.device_name = AudioManagerBase::kDefaultDeviceName; | 229 name.device_name = AudioManagerBase::kDefaultDeviceName; |
| 230 name.unique_id = AudioManagerBase::kDefaultDeviceId; | 230 name.unique_id = AudioManagerBase::kDefaultDeviceId; |
| 231 device_names->push_front(name); | 231 device_names->push_front(name); |
| 232 } | 232 } |
| 233 } | 233 } |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 267 } | 267 } |
| 268 | 268 |
| 269 return stream; | 269 return stream; |
| 270 } | 270 } |
| 271 | 271 |
| 272 // Factory for the implementations of AudioInputStream for AUDIO_PCM_LINEAR | 272 // Factory for the implementations of AudioInputStream for AUDIO_PCM_LINEAR |
| 273 // mode. | 273 // mode. |
| 274 AudioInputStream* AudioManagerWin::MakeLinearInputStream( | 274 AudioInputStream* AudioManagerWin::MakeLinearInputStream( |
| 275 const AudioParameters& params, const std::string& device_id) { | 275 const AudioParameters& params, const std::string& device_id) { |
| 276 DCHECK_EQ(AudioParameters::AUDIO_PCM_LINEAR, params.format); | 276 DCHECK_EQ(AudioParameters::AUDIO_PCM_LINEAR, params.format); |
| 277 return new PCMWaveInAudioInputStream(this, params, kNumInputBuffers, | 277 return CreatePCMWaveInAudioInputStream(params, device_id); |
| 278 AudioManagerBase::kDefaultDeviceId); | |
| 279 } | 278 } |
| 280 | 279 |
| 281 // Factory for the implementations of AudioInputStream for | 280 // Factory for the implementations of AudioInputStream for |
| 282 // AUDIO_PCM_LOW_LATENCY mode. | 281 // AUDIO_PCM_LOW_LATENCY mode. |
| 283 AudioInputStream* AudioManagerWin::MakeLowLatencyInputStream( | 282 AudioInputStream* AudioManagerWin::MakeLowLatencyInputStream( |
| 284 const AudioParameters& params, const std::string& device_id) { | 283 const AudioParameters& params, const std::string& device_id) { |
| 285 DCHECK_EQ(AudioParameters::AUDIO_PCM_LOW_LATENCY, params.format); | 284 DCHECK_EQ(AudioParameters::AUDIO_PCM_LOW_LATENCY, params.format); |
| 286 AudioInputStream* stream = NULL; | 285 AudioInputStream* stream = NULL; |
| 287 if (!media::IsWASAPISupported()) { | 286 if (!media::IsWASAPISupported()) { |
| 288 // Fall back to Windows Wave implementation on Windows XP or lower. | 287 // Fall back to Windows Wave implementation on Windows XP or lower. |
| 289 DVLOG(1) << "Using WaveIn since WASAPI requires at least Vista."; | 288 DVLOG(1) << "Using WaveIn since WASAPI requires at least Vista."; |
| 290 stream = new PCMWaveInAudioInputStream(this, params, kNumInputBuffers, | 289 stream = CreatePCMWaveInAudioInputStream(params, device_id); |
| 291 device_id); | |
| 292 } else { | 290 } else { |
| 293 stream = new WASAPIAudioInputStream(this, params, device_id); | 291 stream = new WASAPIAudioInputStream(this, params, device_id); |
| 294 } | 292 } |
| 295 | 293 |
| 296 return stream; | 294 return stream; |
| 297 } | 295 } |
| 298 | 296 |
| 297 AudioInputStream* AudioManagerWin::CreatePCMWaveInAudioInputStream( |
| 298 const AudioParameters& params, |
| 299 const std::string& device_id) { |
| 300 std::string xp_device_id = device_id; |
| 301 if (device_id != AudioManagerBase::kDefaultDeviceId && |
| 302 enumeration_type_ == kMMDeviceEnumeration) { |
| 303 xp_device_id = media::ConvertToWinXPDeviceId(device_id); |
| 304 if (xp_device_id.empty()) { |
| 305 DLOG(ERROR) << "Cannot find a waveIn device which matches the device ID " |
| 306 << device_id; |
| 307 return NULL; |
| 308 } |
| 309 } |
| 310 |
| 311 return new PCMWaveInAudioInputStream(this, params, kNumInputBuffers, |
| 312 xp_device_id); |
| 313 } |
| 314 |
| 299 /// static | 315 /// static |
| 300 AudioManager* CreateAudioManager() { | 316 AudioManager* CreateAudioManager() { |
| 301 return new AudioManagerWin(); | 317 return new AudioManagerWin(); |
| 302 } | 318 } |
| OLD | NEW |