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/win/audio_low_latency_output_win.h" | 5 #include "media/audio/win/audio_low_latency_output_win.h" |
6 | 6 |
7 #include <Functiondiscoverykeys_devpkey.h> | 7 #include <Functiondiscoverykeys_devpkey.h> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 eRender, eConsole, &format)) ? | 104 eRender, eConsole, &format)) ? |
105 static_cast<int>(format.Format.nChannels) : 0; | 105 static_cast<int>(format.Format.nChannels) : 0; |
106 } | 106 } |
107 | 107 |
108 // static | 108 // static |
109 ChannelLayout WASAPIAudioOutputStream::HardwareChannelLayout() { | 109 ChannelLayout WASAPIAudioOutputStream::HardwareChannelLayout() { |
110 return ChannelConfigToChannelLayout(GetChannelConfig()); | 110 return ChannelConfigToChannelLayout(GetChannelConfig()); |
111 } | 111 } |
112 | 112 |
113 // static | 113 // static |
114 int WASAPIAudioOutputStream::HardwareSampleRate() { | 114 int WASAPIAudioOutputStream::HardwareSampleRate(const std::string& device_id) { |
115 WAVEFORMATPCMEX format; | 115 WAVEFORMATPCMEX format; |
116 return SUCCEEDED(CoreAudioUtil::GetDefaultSharedModeMixFormat( | 116 ScopedComPtr<IAudioClient> client; |
117 eRender, eConsole, &format)) ? | 117 if (device_id.empty()) { |
118 static_cast<int>(format.Format.nSamplesPerSec) : 0; | 118 client = CoreAudioUtil::CreateDefaultClient(eRender, eConsole); |
| 119 } else { |
| 120 ScopedComPtr<IMMDevice> device(CoreAudioUtil::CreateDevice(device_id)); |
| 121 if (!device) |
| 122 return 0; |
| 123 client = CoreAudioUtil::CreateClient(device); |
| 124 } |
| 125 |
| 126 if (!client || FAILED(CoreAudioUtil::GetSharedModeMixFormat(client, &format))) |
| 127 return 0; |
| 128 |
| 129 return static_cast<int>(format.Format.nSamplesPerSec); |
119 } | 130 } |
120 | 131 |
121 WASAPIAudioOutputStream::WASAPIAudioOutputStream(AudioManagerWin* manager, | 132 WASAPIAudioOutputStream::WASAPIAudioOutputStream(AudioManagerWin* manager, |
122 const AudioParameters& params, | 133 const AudioParameters& params, |
123 ERole device_role) | 134 ERole device_role) |
124 : creating_thread_id_(base::PlatformThread::CurrentId()), | 135 : creating_thread_id_(base::PlatformThread::CurrentId()), |
125 manager_(manager), | 136 manager_(manager), |
126 opened_(false), | 137 opened_(false), |
127 audio_parameters_are_valid_(false), | 138 audio_parameters_are_valid_(false), |
128 volume_(1.0), | 139 volume_(1.0), |
(...skipping 547 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
676 VLOG(1) << "IAudioClient::GetBufferSize: " << std::hex << hr; | 687 VLOG(1) << "IAudioClient::GetBufferSize: " << std::hex << hr; |
677 return hr; | 688 return hr; |
678 } | 689 } |
679 | 690 |
680 *endpoint_buffer_size = buffer_size_in_frames; | 691 *endpoint_buffer_size = buffer_size_in_frames; |
681 VLOG(2) << "endpoint buffer size: " << buffer_size_in_frames; | 692 VLOG(2) << "endpoint buffer size: " << buffer_size_in_frames; |
682 return hr; | 693 return hr; |
683 } | 694 } |
684 | 695 |
685 } // namespace media | 696 } // namespace media |
OLD | NEW |