Index: media/audio/win/audio_low_latency_output_win.cc |
diff --git a/media/audio/win/audio_low_latency_output_win.cc b/media/audio/win/audio_low_latency_output_win.cc |
index b2098b02094c4864ba7f3f9d6fded9fe28bd253f..f2214707762f0fb0286f645e67decf9ad93f4bca 100644 |
--- a/media/audio/win/audio_low_latency_output_win.cc |
+++ b/media/audio/win/audio_low_latency_output_win.cc |
@@ -111,11 +111,22 @@ ChannelLayout WASAPIAudioOutputStream::HardwareChannelLayout() { |
} |
// static |
-int WASAPIAudioOutputStream::HardwareSampleRate() { |
+int WASAPIAudioOutputStream::HardwareSampleRate(const std::string& device_id) { |
WAVEFORMATPCMEX format; |
- return SUCCEEDED(CoreAudioUtil::GetDefaultSharedModeMixFormat( |
- eRender, eConsole, &format)) ? |
- static_cast<int>(format.Format.nSamplesPerSec) : 0; |
+ ScopedComPtr<IAudioClient> client; |
+ if (device_id.empty()) { |
+ client = CoreAudioUtil::CreateDefaultClient(eRender, eConsole); |
+ } else { |
+ ScopedComPtr<IMMDevice> device(CoreAudioUtil::CreateDevice(device_id)); |
+ if (!device) |
+ return 0; |
+ client = CoreAudioUtil::CreateClient(device); |
+ } |
+ |
+ if (!client || FAILED(CoreAudioUtil::GetSharedModeMixFormat(client, &format))) |
+ return 0; |
+ |
+ return static_cast<int>(format.Format.nSamplesPerSec); |
} |
WASAPIAudioOutputStream::WASAPIAudioOutputStream(AudioManagerWin* manager, |