| 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 eb05ca0547b19095cf97348ea5b78a443f324c20..1c183f7a12ca99611e006142d6688e952e7e5e28 100644
|
| --- a/media/audio/win/audio_manager_win.cc
|
| +++ b/media/audio/win/audio_manager_win.cc
|
| @@ -299,27 +299,50 @@ void AudioManagerWin::GetAudioOutputDeviceNames(
|
| GetAudioDeviceNamesImpl(false, device_names);
|
| }
|
|
|
| -AudioParameters AudioManagerWin::GetInputStreamParameters(
|
| - const std::string& device_id) {
|
| - AudioParameters parameters;
|
| - if (!core_audio_supported()) {
|
| - // Windows Wave implementation is being used.
|
| - parameters = AudioParameters(
|
| - AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_STEREO, 0, 48000,
|
| - 16, kFallbackBufferSize, AudioParameters::NO_EFFECTS);
|
| - } else {
|
| - parameters = WASAPIAudioInputStream::GetInputStreamParameters(device_id);
|
| +AudioParameters AudioManagerWin::GetPreferredInputStreamParameters(
|
| + const std::string& input_device_id,
|
| + const AudioParameters& input_params) {
|
| + // Default format used by the wave implementation.
|
| + AudioParameters::Format format = AUDIO_PCM_LINEAR;
|
| + ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO;
|
| + int buffer_size = kFallbackBufferSize;
|
| + int bits_per_sample = 16;
|
| + int input_channels = 0;
|
| + int sample_rate = 48000;
|
| + int effects = AudioParameters::NO_EFFECTS;
|
| +
|
| + if (core_audio_supported()) {
|
| + // When core audio is being used, we need to respect the native format
|
| + // of the device.
|
| + AudioParameters parameters =
|
| + WASAPIAudioInputStream::GetInputStreamParameters(device_id);
|
| + format = parameters.format();
|
| + channel_layout = parameters.channel_layout();
|
| + bits_per_sample = parameters.bits_per_sample();
|
| + input_channels = parameters.input_channels();
|
| + sample_rate = parameters.sample_rate();
|
| + effects |= parameters.effects();
|
| }
|
|
|
| - int user_buffer_size = GetUserBufferSize();
|
| - if (user_buffer_size) {
|
| - parameters.Reset(parameters.format(), parameters.channel_layout(),
|
| - parameters.channels(), parameters.input_channels(),
|
| - parameters.sample_rate(), parameters.bits_per_sample(),
|
| - user_buffer_size);
|
| + if (input_params.IsValid()) {
|
| + input_channels = input_params.input_channels();
|
| + effects |= input_params.effects();
|
| + bits_per_sample = input_params.bits_per_sample();
|
| + buffer_size = input_params.frames_per_buffer();
|
| + channel_layout = input_params.channel_layout();
|
| +
|
| + // When core audio is being used, we must use the device's native sample
|
| + // rate.
|
| + if (!core_audio_supported())
|
| + sample_rate = input_params.sample_rate();
|
| }
|
|
|
| - return parameters;
|
| + int user_buffer_size = GetUserBufferSize();
|
| + if (user_buffer_size)
|
| + buffer_size = user_buffer_size;
|
| +
|
| + return AudioParameters(format, channel_layout, input_channels,
|
| + sample_rate, bits_per_sample, buffer_size, effects);
|
| }
|
|
|
| std::string AudioManagerWin::GetAssociatedOutputDeviceID(
|
|
|