diff options
author | dalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-01 03:50:03 +0000 |
---|---|---|
committer | dalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-01 03:50:03 +0000 |
commit | 2fb4b740a8f6c79ae376c5f0257ed66ac3ef4246 (patch) | |
tree | de534a2cb59ad9c9323923095150f8ea8a08f1bc /media | |
parent | e8475f8ac4fa50edffd37396c0cb386e3e817879 (diff) | |
download | chromium_src-2fb4b740a8f6c79ae376c5f0257ed66ac3ef4246.zip chromium_src-2fb4b740a8f6c79ae376c5f0257ed66ac3ef4246.tar.gz chromium_src-2fb4b740a8f6c79ae376c5f0257ed66ac3ef4246.tar.bz2 |
Remove the last vestiges of audio_util.
- Removes GetHighLatencyOutputBufferSize() since we no longer
have any high latency users. Fallback uses a minimum 2048
buffer size in AudioOutputResampler.
- Moves NumberOfWaveOutBuffers() to AudioManagerWin. Documents
existing broken unit test edge case for Vista.
- Moves GetUserBufferSize() to AudioManagerBase as a protected
method.
BUG=120319
TEST=compiles
Review URL: https://codereview.chromium.org/25133002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@226131 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media')
34 files changed, 73 insertions, 206 deletions
diff --git a/media/audio/android/audio_manager_android.cc b/media/audio/android/audio_manager_android.cc index 04b226f..dc77a4c 100644 --- a/media/audio/android/audio_manager_android.cc +++ b/media/audio/android/audio_manager_android.cc @@ -10,7 +10,6 @@ #include "media/audio/android/opensles_output.h" #include "media/audio/audio_manager.h" #include "media/audio/audio_parameters.h" -#include "media/audio/audio_util.h" #include "media/audio/fake_audio_input_stream.h" #include "media/base/channel_layout.h" diff --git a/media/audio/audio_device_thread.cc b/media/audio/audio_device_thread.cc index d5c1bbc..6998890 100644 --- a/media/audio/audio_device_thread.cc +++ b/media/audio/audio_device_thread.cc @@ -12,7 +12,6 @@ #include "base/message_loop/message_loop.h" #include "base/threading/platform_thread.h" #include "base/threading/thread_restrictions.h" -#include "media/audio/audio_util.h" #include "media/base/audio_bus.h" using base::PlatformThread; diff --git a/media/audio/audio_input_volume_unittest.cc b/media/audio/audio_input_volume_unittest.cc index 570c045..be3cde8 100644 --- a/media/audio/audio_input_volume_unittest.cc +++ b/media/audio/audio_input_volume_unittest.cc @@ -8,7 +8,6 @@ #include "base/memory/scoped_ptr.h" #include "media/audio/audio_io.h" #include "media/audio/audio_manager_base.h" -#include "media/audio/audio_util.h" #include "testing/gtest/include/gtest/gtest.h" #if defined(OS_WIN) diff --git a/media/audio/audio_manager_base.cc b/media/audio/audio_manager_base.cc index 5b1f4b3..7843299 100644 --- a/media/audio/audio_manager_base.cc +++ b/media/audio/audio_manager_base.cc @@ -8,12 +8,12 @@ #include "base/bind_helpers.h" #include "base/command_line.h" #include "base/message_loop/message_loop_proxy.h" +#include "base/strings/string_number_conversions.h" #include "base/threading/thread.h" #include "build/build_config.h" #include "media/audio/audio_output_dispatcher_impl.h" #include "media/audio/audio_output_proxy.h" #include "media/audio/audio_output_resampler.h" -#include "media/audio/audio_util.h" #include "media/audio/fake_audio_input_stream.h" #include "media/audio/fake_audio_output_stream.h" #include "media/base/media_switches.h" @@ -423,4 +423,15 @@ std::string AudioManagerBase::GetDefaultOutputDeviceID() { return ""; } +int AudioManagerBase::GetUserBufferSize() { + const CommandLine* cmd_line = CommandLine::ForCurrentProcess(); + int buffer_size = 0; + std::string buffer_size_str(cmd_line->GetSwitchValueASCII( + switches::kAudioBufferSize)); + if (base::StringToInt(buffer_size_str, &buffer_size) && buffer_size > 0) + return buffer_size; + + return 0; +} + } // namespace media diff --git a/media/audio/audio_manager_base.h b/media/audio/audio_manager_base.h index cdf7d3a..8fbe977 100644 --- a/media/audio/audio_manager_base.h +++ b/media/audio/audio_manager_base.h @@ -122,7 +122,6 @@ class MEDIA_EXPORT AudioManagerBase : public AudioManager { protected: AudioManagerBase(); - // Shuts down the audio thread and releases all the audio output dispatchers // on the audio thread. All audio streams should be freed before Shutdown() // is called. This must be called in the destructor of every AudioManagerBase @@ -136,6 +135,10 @@ class MEDIA_EXPORT AudioManagerBase : public AudioManager { // thread. void NotifyAllOutputDeviceChangeListeners(); + // Returns user buffer size as specified on the command line or 0 if no buffer + // size has been specified. + int GetUserBufferSize(); + // Returns the preferred hardware audio output parameters for opening output // streams. If the users inject a valid |input_params|, each AudioManager // will decide if they should return the values from |input_params| or the diff --git a/media/audio/audio_output_controller.cc b/media/audio/audio_output_controller.cc index 649612c..81eaab9 100644 --- a/media/audio/audio_output_controller.cc +++ b/media/audio/audio_output_controller.cc @@ -11,7 +11,6 @@ #include "base/threading/platform_thread.h" #include "base/time/time.h" #include "build/build_config.h" -#include "media/audio/audio_util.h" #include "media/audio/shared_memory_util.h" #include "media/base/scoped_histogram_timer.h" diff --git a/media/audio/audio_output_device.cc b/media/audio/audio_output_device.cc index 0c406ca..a5b239e 100644 --- a/media/audio/audio_output_device.cc +++ b/media/audio/audio_output_device.cc @@ -10,7 +10,6 @@ #include "base/threading/thread_restrictions.h" #include "base/time/time.h" #include "media/audio/audio_output_controller.h" -#include "media/audio/audio_util.h" #include "media/audio/shared_memory_util.h" #include "media/base/limits.h" diff --git a/media/audio/audio_output_dispatcher_impl.cc b/media/audio/audio_output_dispatcher_impl.cc index bcdcd65..31bd11c 100644 --- a/media/audio/audio_output_dispatcher_impl.cc +++ b/media/audio/audio_output_dispatcher_impl.cc @@ -12,7 +12,6 @@ #include "base/time/time.h" #include "media/audio/audio_io.h" #include "media/audio/audio_output_proxy.h" -#include "media/audio/audio_util.h" namespace media { diff --git a/media/audio/audio_output_resampler.cc b/media/audio/audio_output_resampler.cc index da424ec..7a4ef1c 100644 --- a/media/audio/audio_output_resampler.cc +++ b/media/audio/audio_output_resampler.cc @@ -14,7 +14,6 @@ #include "media/audio/audio_io.h" #include "media/audio/audio_output_dispatcher_impl.h" #include "media/audio/audio_output_proxy.h" -#include "media/audio/audio_util.h" #include "media/audio/sample_rates.h" #include "media/base/audio_converter.h" #include "media/base/limits.h" @@ -132,10 +131,8 @@ static AudioParameters SetupFallbackParams( // mode. |kMinLowLatencyFrameSize| is arbitrarily based on Pepper Flash's // MAXIMUM frame size for low latency. static const int kMinLowLatencyFrameSize = 2048; - int frames_per_buffer = std::min( - std::max(input_params.frames_per_buffer(), kMinLowLatencyFrameSize), - static_cast<int>( - GetHighLatencyOutputBufferSize(input_params.sample_rate()))); + const int frames_per_buffer = + std::max(input_params.frames_per_buffer(), kMinLowLatencyFrameSize); return AudioParameters( AudioParameters::AUDIO_PCM_LINEAR, input_params.channel_layout(), diff --git a/media/audio/audio_util.cc b/media/audio/audio_util.cc deleted file mode 100644 index 42c6c91..0000000 --- a/media/audio/audio_util.cc +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Software adjust volume of samples, allows each audio stream its own -// volume without impacting master volume for chrome and other applications. - -// Implemented as templates to allow 8, 16 and 32 bit implementations. -// 8 bit is unsigned and biased by 128. - -// TODO(vrk): This file has been running pretty wild and free, and it's likely -// that a lot of the functions can be simplified and made more elegant. Revisit -// after other audio cleanup is done. (crbug.com/120319) - -#include "media/audio/audio_util.h" - -#include "base/command_line.h" -#include "base/strings/string_number_conversions.h" -#include "base/time/time.h" -#include "media/base/media_switches.h" - -#if defined(OS_WIN) -#include "base/win/windows_version.h" -#endif - -namespace media { - -// Returns user buffer size as specified on the command line or 0 if no buffer -// size has been specified. -int GetUserBufferSize() { - const CommandLine* cmd_line = CommandLine::ForCurrentProcess(); - int buffer_size = 0; - std::string buffer_size_str(cmd_line->GetSwitchValueASCII( - switches::kAudioBufferSize)); - if (base::StringToInt(buffer_size_str, &buffer_size) && buffer_size > 0) - return buffer_size; - - return 0; -} - -// Computes a buffer size based on the given |sample_rate|. Must be used in -// conjunction with AUDIO_PCM_LINEAR. -size_t GetHighLatencyOutputBufferSize(int sample_rate) { - int user_buffer_size = GetUserBufferSize(); - if (user_buffer_size) - return user_buffer_size; - - // TODO(vrk/crogers): The buffer sizes that this function computes is probably - // overly conservative. However, reducing the buffer size to 2048-8192 bytes - // caused crbug.com/108396. This computation should be revisited while making - // sure crbug.com/108396 doesn't happen again. - - // The minimum number of samples in a hardware packet. - // This value is selected so that we can handle down to 5khz sample rate. - static const size_t kMinSamplesPerHardwarePacket = 1024; - - // The maximum number of samples in a hardware packet. - // This value is selected so that we can handle up to 192khz sample rate. - static const size_t kMaxSamplesPerHardwarePacket = 64 * 1024; - - // This constant governs the hardware audio buffer size, this value should be - // chosen carefully. - // This value is selected so that we have 8192 samples for 48khz streams. - static const size_t kMillisecondsPerHardwarePacket = 170; - - // Select the number of samples that can provide at least - // |kMillisecondsPerHardwarePacket| worth of audio data. - size_t samples = kMinSamplesPerHardwarePacket; - while (samples <= kMaxSamplesPerHardwarePacket && - samples * base::Time::kMillisecondsPerSecond < - sample_rate * kMillisecondsPerHardwarePacket) { - samples *= 2; - } - return samples; -} - -#if defined(OS_WIN) - -int NumberOfWaveOutBuffers() { - // Use the user provided buffer count if provided. - int buffers = 0; - std::string buffers_str(CommandLine::ForCurrentProcess()->GetSwitchValueASCII( - switches::kWaveOutBuffers)); - if (base::StringToInt(buffers_str, &buffers) && buffers > 0) { - return buffers; - } - - // Use 4 buffers for Vista, 3 for everyone else: - // - The entire Windows audio stack was rewritten for Windows Vista and wave - // out performance was degraded compared to XP. - // - The regression was fixed in Windows 7 and most configurations will work - // with 2, but some (e.g., some Sound Blasters) still need 3. - // - Some XP configurations (even multi-processor ones) also need 3. - return (base::win::GetVersion() == base::win::VERSION_VISTA) ? 4 : 3; -} - -#endif - -} // namespace media diff --git a/media/audio/audio_util.h b/media/audio/audio_util.h deleted file mode 100644 index a11c327..0000000 --- a/media/audio/audio_util.h +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef MEDIA_AUDIO_AUDIO_UTIL_H_ -#define MEDIA_AUDIO_AUDIO_UTIL_H_ - -#include "base/basictypes.h" -#include "build/build_config.h" -#include "media/base/media_export.h" - -namespace media { - -// Returns user buffer size as specified on the command line or 0 if no buffer -// size has been specified. -MEDIA_EXPORT int GetUserBufferSize(); - -// Computes a buffer size based on the given |sample_rate|. Must be used in -// conjunction with AUDIO_PCM_LINEAR. -MEDIA_EXPORT size_t GetHighLatencyOutputBufferSize(int sample_rate); - -#if defined(OS_WIN) - -// Returns number of buffers to be used by wave out. -MEDIA_EXPORT int NumberOfWaveOutBuffers(); - -#endif // defined(OS_WIN) - -} // namespace media - -#endif // MEDIA_AUDIO_AUDIO_UTIL_H_ diff --git a/media/audio/cras/audio_manager_cras.cc b/media/audio/cras/audio_manager_cras.cc index 14a0c4e..4659328 100644 --- a/media/audio/cras/audio_manager_cras.cc +++ b/media/audio/cras/audio_manager_cras.cc @@ -9,7 +9,6 @@ #include "base/logging.h" #include "base/nix/xdg_util.h" #include "base/stl_util.h" -#include "media/audio/audio_util.h" #include "media/audio/cras/cras_input.h" #include "media/audio/cras/cras_unified.h" #include "media/base/channel_layout.h" diff --git a/media/audio/cras/cras_unified.cc b/media/audio/cras/cras_unified.cc index a774186..fe2c7b0 100644 --- a/media/audio/cras/cras_unified.cc +++ b/media/audio/cras/cras_unified.cc @@ -8,7 +8,6 @@ #include "base/command_line.h" #include "base/logging.h" -#include "media/audio/audio_util.h" #include "media/audio/cras/audio_manager_cras.h" #include "media/audio/linux/alsa_util.h" diff --git a/media/audio/linux/audio_manager_linux.cc b/media/audio/linux/audio_manager_linux.cc index 708e4f2..0d0f104 100644 --- a/media/audio/linux/audio_manager_linux.cc +++ b/media/audio/linux/audio_manager_linux.cc @@ -14,7 +14,6 @@ #include "base/stl_util.h" #include "media/audio/audio_output_dispatcher.h" #include "media/audio/audio_parameters.h" -#include "media/audio/audio_util.h" #if defined(USE_CRAS) #include "media/audio/cras/audio_manager_cras.h" #endif diff --git a/media/audio/mac/audio_auhal_mac.cc b/media/audio/mac/audio_auhal_mac.cc index 051b709..e180087 100644 --- a/media/audio/mac/audio_auhal_mac.cc +++ b/media/audio/mac/audio_auhal_mac.cc @@ -11,7 +11,6 @@ #include "base/debug/trace_event.h" #include "base/logging.h" #include "base/mac/mac_logging.h" -#include "media/audio/audio_util.h" #include "media/audio/mac/audio_manager_mac.h" #include "media/base/media_switches.h" diff --git a/media/audio/mac/audio_input_mac.cc b/media/audio/mac/audio_input_mac.cc index 7930567..4aee117 100644 --- a/media/audio/mac/audio_input_mac.cc +++ b/media/audio/mac/audio_input_mac.cc @@ -10,7 +10,6 @@ #include "base/logging.h" #include "base/mac/mac_logging.h" #include "media/audio/audio_manager_base.h" -#include "media/audio/audio_util.h" namespace media { diff --git a/media/audio/mac/audio_low_latency_input_mac.cc b/media/audio/mac/audio_low_latency_input_mac.cc index 9b0c9b21..67c4a5a 100644 --- a/media/audio/mac/audio_low_latency_input_mac.cc +++ b/media/audio/mac/audio_low_latency_input_mac.cc @@ -9,7 +9,6 @@ #include "base/basictypes.h" #include "base/logging.h" #include "base/mac/mac_logging.h" -#include "media/audio/audio_util.h" #include "media/audio/mac/audio_manager_mac.h" #include "media/base/data_buffer.h" diff --git a/media/audio/mac/audio_manager_mac.cc b/media/audio/mac/audio_manager_mac.cc index 8e4b969..8003ddc 100644 --- a/media/audio/mac/audio_manager_mac.cc +++ b/media/audio/mac/audio_manager_mac.cc @@ -13,7 +13,6 @@ #include "base/mac/scoped_cftyperef.h" #include "base/strings/sys_string_conversions.h" #include "media/audio/audio_parameters.h" -#include "media/audio/audio_util.h" #include "media/audio/mac/audio_auhal_mac.h" #include "media/audio/mac/audio_input_mac.h" #include "media/audio/mac/audio_low_latency_input_mac.h" @@ -36,23 +35,6 @@ static const int kDefaultLowLatencyBufferSize = 128; // Default sample-rate on most Apple hardware. static const int kFallbackSampleRate = 44100; -static int ChooseBufferSize(int output_sample_rate) { - int buffer_size = kDefaultLowLatencyBufferSize; - const int user_buffer_size = GetUserBufferSize(); - if (user_buffer_size) { - buffer_size = user_buffer_size; - } else if (output_sample_rate > 48000) { - // The default buffer size is too small for higher sample rates and may lead - // to glitching. Adjust upwards by multiples of the default size. - if (output_sample_rate <= 96000) - buffer_size = 2 * kDefaultLowLatencyBufferSize; - else if (output_sample_rate <= 192000) - buffer_size = 4 * kDefaultLowLatencyBufferSize; - } - - return buffer_size; -} - static bool HasAudioHardware(AudioObjectPropertySelector selector) { AudioDeviceID output_device_id = kAudioObjectUnknown; const AudioObjectPropertyAddress property_address = { @@ -722,6 +704,23 @@ void AudioManagerMac::HandleDeviceChanges() { NotifyAllOutputDeviceChangeListeners(); } +int AudioManagerMac::ChooseBufferSize(int output_sample_rate) { + int buffer_size = kDefaultLowLatencyBufferSize; + const int user_buffer_size = GetUserBufferSize(); + if (user_buffer_size) { + buffer_size = user_buffer_size; + } else if (output_sample_rate > 48000) { + // The default buffer size is too small for higher sample rates and may lead + // to glitching. Adjust upwards by multiples of the default size. + if (output_sample_rate <= 96000) + buffer_size = 2 * kDefaultLowLatencyBufferSize; + else if (output_sample_rate <= 192000) + buffer_size = 4 * kDefaultLowLatencyBufferSize; + } + + return buffer_size; +} + AudioManager* CreateAudioManager() { return new AudioManagerMac(); } diff --git a/media/audio/mac/audio_manager_mac.h b/media/audio/mac/audio_manager_mac.h index d162554..3ff1681 100644 --- a/media/audio/mac/audio_manager_mac.h +++ b/media/audio/mac/audio_manager_mac.h @@ -80,6 +80,8 @@ class MEDIA_EXPORT AudioManagerMac : public AudioManagerBase { void CreateDeviceListener(); void DestroyDeviceListener(); + int ChooseBufferSize(int output_sample_rate); + scoped_ptr<AudioDeviceListenerMac> output_device_listener_; // Track the output sample-rate and the default output device diff --git a/media/audio/mac/audio_synchronized_mac.cc b/media/audio/mac/audio_synchronized_mac.cc index a2484ca..a9bc88e 100644 --- a/media/audio/mac/audio_synchronized_mac.cc +++ b/media/audio/mac/audio_synchronized_mac.cc @@ -11,7 +11,6 @@ #include "base/debug/trace_event.h" #include "base/logging.h" #include "base/mac/mac_logging.h" -#include "media/audio/audio_util.h" #include "media/audio/mac/audio_manager_mac.h" #include "media/base/channel_mixer.h" diff --git a/media/audio/mac/audio_unified_mac.cc b/media/audio/mac/audio_unified_mac.cc index 67ec2fe..d1dc007 100644 --- a/media/audio/mac/audio_unified_mac.cc +++ b/media/audio/mac/audio_unified_mac.cc @@ -9,7 +9,6 @@ #include "base/basictypes.h" #include "base/logging.h" #include "base/mac/mac_logging.h" -#include "media/audio/audio_util.h" #include "media/audio/mac/audio_manager_mac.h" namespace media { diff --git a/media/audio/openbsd/audio_manager_openbsd.cc b/media/audio/openbsd/audio_manager_openbsd.cc index a97ea8f..e6508b0 100644 --- a/media/audio/openbsd/audio_manager_openbsd.cc +++ b/media/audio/openbsd/audio_manager_openbsd.cc @@ -11,7 +11,6 @@ #include "base/stl_util.h" #include "media/audio/audio_output_dispatcher.h" #include "media/audio/audio_parameters.h" -#include "media/audio/audio_util.h" #include "media/audio/pulse/pulse_output.h" #include "media/audio/pulse/pulse_stubs.h" #include "media/base/channel_layout.h" diff --git a/media/audio/pulse/audio_manager_pulse.cc b/media/audio/pulse/audio_manager_pulse.cc index 5c09f14..4aac9c5 100644 --- a/media/audio/pulse/audio_manager_pulse.cc +++ b/media/audio/pulse/audio_manager_pulse.cc @@ -11,7 +11,6 @@ #include "base/nix/xdg_util.h" #include "base/stl_util.h" #include "media/audio/audio_parameters.h" -#include "media/audio/audio_util.h" #include "media/audio/linux/audio_manager_linux.h" #include "media/audio/pulse/pulse_input.h" #include "media/audio/pulse/pulse_output.h" diff --git a/media/audio/simple_sources.cc b/media/audio/simple_sources.cc index 7aa74d6..275413a 100644 --- a/media/audio/simple_sources.cc +++ b/media/audio/simple_sources.cc @@ -10,7 +10,6 @@ #include <algorithm> #include "base/logging.h" -#include "media/audio/audio_util.h" namespace media { diff --git a/media/audio/win/audio_device_listener_win.cc b/media/audio/win/audio_device_listener_win.cc index 8734cf2..adbc9a8 100644 --- a/media/audio/win/audio_device_listener_win.cc +++ b/media/audio/win/audio_device_listener_win.cc @@ -11,7 +11,6 @@ #include "base/system_monitor/system_monitor.h" #include "base/win/scoped_co_mem.h" #include "base/win/windows_version.h" -#include "media/audio/audio_util.h" #include "media/audio/win/core_audio_util_win.h" using base::win::ScopedCoMem; diff --git a/media/audio/win/audio_low_latency_input_win.cc b/media/audio/win/audio_low_latency_input_win.cc index a174ea2..b16ef13 100644 --- a/media/audio/win/audio_low_latency_input_win.cc +++ b/media/audio/win/audio_low_latency_input_win.cc @@ -7,7 +7,6 @@ #include "base/logging.h" #include "base/memory/scoped_ptr.h" #include "base/strings/utf_string_conversions.h" -#include "media/audio/audio_util.h" #include "media/audio/win/audio_manager_win.h" #include "media/audio/win/avrt_wrapper_win.h" diff --git a/media/audio/win/audio_low_latency_output_win_unittest.cc b/media/audio/win/audio_low_latency_output_win_unittest.cc index 1f78fac..42fca4d 100644 --- a/media/audio/win/audio_low_latency_output_win_unittest.cc +++ b/media/audio/win/audio_low_latency_output_win_unittest.cc @@ -16,7 +16,6 @@ #include "base/win/scoped_com_initializer.h" #include "media/audio/audio_io.h" #include "media/audio/audio_manager.h" -#include "media/audio/audio_util.h" #include "media/audio/win/audio_low_latency_output_win.h" #include "media/audio/win/core_audio_util_win.h" #include "media/base/decoder_buffer.h" diff --git a/media/audio/win/audio_manager_win.cc b/media/audio/win/audio_manager_win.cc index 0352e66..71d9dd8 100644 --- a/media/audio/win/audio_manager_win.cc +++ b/media/audio/win/audio_manager_win.cc @@ -20,8 +20,8 @@ #include "base/process/launch.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" +#include "base/win/windows_version.h" #include "media/audio/audio_parameters.h" -#include "media/audio/audio_util.h" #include "media/audio/win/audio_device_listener_win.h" #include "media/audio/win/audio_low_latency_input_win.h" #include "media/audio/win/audio_low_latency_output_win.h" @@ -109,6 +109,24 @@ static string16 GetDeviceAndDriverInfo(HDEVINFO device_info, return device_and_driver_info; } +static int NumberOfWaveOutBuffers() { + // Use the user provided buffer count if provided. + int buffers = 0; + std::string buffers_str(CommandLine::ForCurrentProcess()->GetSwitchValueASCII( + switches::kWaveOutBuffers)); + if (base::StringToInt(buffers_str, &buffers) && buffers > 0) { + return buffers; + } + + // Use 4 buffers for Vista, 3 for everyone else: + // - The entire Windows audio stack was rewritten for Windows Vista and wave + // out performance was degraded compared to XP. + // - The regression was fixed in Windows 7 and most configurations will work + // with 2, but some (e.g., some Sound Blasters) still need 3. + // - Some XP configurations (even multi-processor ones) also need 3. + return (base::win::GetVersion() == base::win::VERSION_VISTA) ? 4 : 3; +} + AudioManagerWin::AudioManagerWin() { if (!CoreAudioUtil::IsSupported()) { // Use the Wave API for device enumeration if XP or lower. diff --git a/media/audio/win/audio_output_win_unittest.cc b/media/audio/win/audio_output_win_unittest.cc index 7ce146b..e9040e7f 100644 --- a/media/audio/win/audio_output_win_unittest.cc +++ b/media/audio/win/audio_output_win_unittest.cc @@ -14,7 +14,6 @@ #include "base/win/windows_version.h" #include "media/base/limits.h" #include "media/audio/audio_io.h" -#include "media/audio/audio_util.h" #include "media/audio/audio_manager.h" #include "media/audio/simple_sources.h" #include "testing/gmock/include/gmock/gmock.h" @@ -539,28 +538,22 @@ TEST(WinAudioTest, PCMWaveStreamPendingBytes) { EXPECT_CALL(source, OnMoreData(NotNull(), Field(&AudioBuffersState::pending_bytes, 0))) .WillOnce(Invoke(MockAudioSource::ClearData)); - switch (NumberOfWaveOutBuffers()) { - case 2: - break; // Calls are the same as at end of 3-buffer scheme. - case 3: - EXPECT_CALL(source, OnMoreData(NotNull(), - Field(&AudioBuffersState::pending_bytes, - bytes_100_ms))) - .WillOnce(Invoke(MockAudioSource::ClearData)); - EXPECT_CALL(source, OnMoreData(NotNull(), - Field(&AudioBuffersState::pending_bytes, - 2 * bytes_100_ms))) - .WillOnce(Invoke(MockAudioSource::ClearData)); - EXPECT_CALL(source, OnMoreData(NotNull(), - Field(&AudioBuffersState::pending_bytes, - 2 * bytes_100_ms))) - .Times(AnyNumber()) - .WillRepeatedly(Return(0)); - break; - default: - ASSERT_TRUE(false) - << "Unexpected number of buffers: " << NumberOfWaveOutBuffers(); - } + + // Note: If AudioManagerWin::NumberOfWaveOutBuffers() ever changes, or if this + // test is run on Vista, these expectations will fail. + EXPECT_CALL(source, OnMoreData(NotNull(), + Field(&AudioBuffersState::pending_bytes, + bytes_100_ms))) + .WillOnce(Invoke(MockAudioSource::ClearData)); + EXPECT_CALL(source, OnMoreData(NotNull(), + Field(&AudioBuffersState::pending_bytes, + 2 * bytes_100_ms))) + .WillOnce(Invoke(MockAudioSource::ClearData)); + EXPECT_CALL(source, OnMoreData(NotNull(), + Field(&AudioBuffersState::pending_bytes, + 2 * bytes_100_ms))) + .Times(AnyNumber()) + .WillRepeatedly(Return(0)); EXPECT_CALL(source, OnMoreData(NotNull(), Field(&AudioBuffersState::pending_bytes, bytes_100_ms))) diff --git a/media/audio/win/audio_unified_win_unittest.cc b/media/audio/win/audio_unified_win_unittest.cc index 011c363..dabf4ee 100644 --- a/media/audio/win/audio_unified_win_unittest.cc +++ b/media/audio/win/audio_unified_win_unittest.cc @@ -12,7 +12,6 @@ #include "base/win/scoped_com_initializer.h" #include "media/audio/audio_io.h" #include "media/audio/audio_manager.h" -#include "media/audio/audio_util.h" #include "media/audio/win/audio_unified_win.h" #include "media/audio/win/core_audio_util_win.h" #include "media/base/channel_mixer.h" diff --git a/media/audio/win/wavein_input_win.cc b/media/audio/win/wavein_input_win.cc index 3c41477..0577125 100644 --- a/media/audio/win/wavein_input_win.cc +++ b/media/audio/win/wavein_input_win.cc @@ -8,7 +8,6 @@ #include "base/logging.h" #include "media/audio/audio_io.h" -#include "media/audio/audio_util.h" #include "media/audio/win/audio_manager_win.h" #include "media/audio/win/device_enumeration_win.h" diff --git a/media/filters/audio_renderer_algorithm.cc b/media/filters/audio_renderer_algorithm.cc index 572e2630..19db663 100644 --- a/media/filters/audio_renderer_algorithm.cc +++ b/media/filters/audio_renderer_algorithm.cc @@ -9,7 +9,6 @@ #include "base/logging.h" #include "base/memory/scoped_ptr.h" -#include "media/audio/audio_util.h" #include "media/base/audio_buffer.h" #include "media/base/audio_bus.h" #include "media/filters/wsola_internals.h" diff --git a/media/filters/audio_renderer_impl.cc b/media/filters/audio_renderer_impl.cc index bcf3cb7..199a227 100644 --- a/media/filters/audio_renderer_impl.cc +++ b/media/filters/audio_renderer_impl.cc @@ -14,7 +14,6 @@ #include "base/logging.h" #include "base/message_loop/message_loop_proxy.h" #include "base/metrics/histogram.h" -#include "media/audio/audio_util.h" #include "media/base/audio_buffer.h" #include "media/base/audio_splicer.h" #include "media/base/bind_to_loop.h" diff --git a/media/media.gyp b/media/media.gyp index a0d655c..36a1bdd 100644 --- a/media/media.gyp +++ b/media/media.gyp @@ -104,8 +104,6 @@ 'audio/audio_power_monitor.cc', 'audio/audio_power_monitor.h', 'audio/audio_source_diverter.h', - 'audio/audio_util.cc', - 'audio/audio_util.h', 'audio/clockless_audio_sink.cc', 'audio/clockless_audio_sink.h', 'audio/cras/audio_manager_cras.cc', @@ -1475,7 +1473,7 @@ 'template_deps': ['video/capture/android/imageformat_list.h'], }, 'includes': [ '../build/android/java_cpp_template.gypi' ], - }, + }, ], }], ['media_use_ffmpeg==1', { |