Index: media/audio/win/audio_manager_win.cc |
diff --git a/media/audio/win/audio_manager_win.cc b/media/audio/win/audio_manager_win.cc |
index 2fe74d97b038d616007cac509cbae100f3020037..38e1c60ee9fdbb9974ac6b17baba9c89bff1ee9a 100644 |
--- a/media/audio/win/audio_manager_win.cc |
+++ b/media/audio/win/audio_manager_win.cc |
@@ -367,6 +367,8 @@ AudioParameters AudioManagerWin::GetPreferredOutputStreamParameters( |
// which corresponds to an output delay of ~5.33ms. |
sample_rate = 48000; |
buffer_size = 256; |
+ if (input_params.IsValid()) |
+ channel_layout = input_params.channel_layout(); |
} else if (!use_input_params) { |
// Hardware sample-rate on Windows can be configured, so we must query. |
// TODO(henrika): improve possibility to specify an audio endpoint. |
@@ -390,14 +392,21 @@ AudioParameters AudioManagerWin::GetPreferredOutputStreamParameters( |
} |
if (input_params.IsValid()) { |
- if (CoreAudioUtil::IsSupported() && |
- CoreAudioUtil::IsChannelLayoutSupported(eRender, eConsole, |
- input_params.channel_layout())) { |
- // Open up using the same channel layout as the source if it is |
- // supported by the hardware. |
- channel_layout = input_params.channel_layout(); |
- VLOG(1) << "Hardware channel layout is not used; using same " |
- << "layout as the source instead (" << channel_layout << ")"; |
+ if (CoreAudioUtil::IsSupported()) { |
+ // Check if it is possible to open up at the specified input channel |
+ // layout but avoid checking if the specified layout is the same as the |
+ // hardware (preferred) layout. We do this extra check to avoid the |
+ // CoreAudioUtil::IsChannelLayoutSupported() overhead in most cases. |
+ if (input_params.channel_layout() != channel_layout) { |
+ if (CoreAudioUtil::IsChannelLayoutSupported( |
+ eRender, eConsole, input_params.channel_layout())) { |
+ // Open up using the same channel layout as the source if it is |
+ // supported by the hardware. |
+ channel_layout = input_params.channel_layout(); |
+ VLOG(1) << "Hardware channel layout is not used; using same layout" |
+ << " as the source instead (" << channel_layout << ")"; |
+ } |
+ } |
} |
input_channels = input_params.input_channels(); |
if (use_input_params) { |