diff options
author | xians@chromium.org <xians@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-19 09:26:48 +0000 |
---|---|---|
committer | xians@chromium.org <xians@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-19 09:26:48 +0000 |
commit | 3d783275af588a122715d3c9d33ca291704888cd (patch) | |
tree | 2342ec7b54ad5053e36ad6d848c967c950e38029 /media | |
parent | 9b105e953c894527510337c6bb8d8a8989f3bcbc (diff) | |
download | chromium_src-3d783275af588a122715d3c9d33ca291704888cd.zip chromium_src-3d783275af588a122715d3c9d33ca291704888cd.tar.gz chromium_src-3d783275af588a122715d3c9d33ca291704888cd.tar.bz2 |
Pass through small buffer sizes without FIFO on Linux.
TBR=dalecurtis@chromium.org
BUG=150570
TEST=content_unittests, manual tests: WebRTC on linux works fine.
Review URL: https://codereview.chromium.org/10910306
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@157524 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media')
-rw-r--r-- | media/audio/linux/audio_manager_linux.cc | 20 | ||||
-rw-r--r-- | media/audio/linux/audio_manager_linux.h | 2 | ||||
-rw-r--r-- | media/audio/win/audio_manager_win.h | 1 |
3 files changed, 22 insertions, 1 deletions
diff --git a/media/audio/linux/audio_manager_linux.cc b/media/audio/linux/audio_manager_linux.cc index b126ed1..e7da931 100644 --- a/media/audio/linux/audio_manager_linux.cc +++ b/media/audio/linux/audio_manager_linux.cc @@ -10,7 +10,9 @@ #include "base/nix/xdg_util.h" #include "base/process_util.h" #include "base/stl_util.h" +#include "media/audio/audio_parameters.h" #include "media/audio/audio_output_dispatcher.h" +#include "media/audio/audio_util.h" #include "media/audio/linux/alsa_input.h" #include "media/audio/linux/alsa_output.h" #include "media/audio/linux/alsa_wrapper.h" @@ -342,4 +344,22 @@ AudioManager* CreateAudioManager() { return new AudioManagerLinux(); } +AudioParameters AudioManagerLinux::GetPreferredLowLatencyOutputStreamParameters( + const AudioParameters& input_params) { + // Since Linux doesn't actually have a low latency path the hardware buffer + // size is quite large in order to prevent glitches with general usage. Some + // clients, such as WebRTC, have a more limited use case and work acceptably + // with a smaller buffer size. The check below allows clients which want to + // try a smaller buffer size on Linux to do so. + int buffer_size = std::min( + static_cast<size_t>(input_params.frames_per_buffer()), + GetAudioHardwareBufferSize()); + + // TODO(dalecurtis): This should include bits per channel and channel layout + // eventually. + return AudioParameters( + AudioParameters::AUDIO_PCM_LOW_LATENCY, input_params.channel_layout(), + GetAudioHardwareSampleRate(), 16, buffer_size); +} + } // namespace media diff --git a/media/audio/linux/audio_manager_linux.h b/media/audio/linux/audio_manager_linux.h index bfa3655..2d71605 100644 --- a/media/audio/linux/audio_manager_linux.h +++ b/media/audio/linux/audio_manager_linux.h @@ -39,6 +39,8 @@ class MEDIA_EXPORT AudioManagerLinux : public AudioManagerBase { const AudioParameters& params, const std::string& device_id) OVERRIDE; virtual AudioInputStream* MakeLowLatencyInputStream( const AudioParameters& params, const std::string& device_id) OVERRIDE; + virtual AudioParameters GetPreferredLowLatencyOutputStreamParameters( + const AudioParameters& input_params) OVERRIDE; protected: virtual ~AudioManagerLinux(); diff --git a/media/audio/win/audio_manager_win.h b/media/audio/win/audio_manager_win.h index ffe79a3e..6a4efcb 100644 --- a/media/audio/win/audio_manager_win.h +++ b/media/audio/win/audio_manager_win.h @@ -39,7 +39,6 @@ class MEDIA_EXPORT AudioManagerWin : public AudioManagerBase { const AudioParameters& params, const std::string& device_id) OVERRIDE; virtual AudioInputStream* MakeLowLatencyInputStream( const AudioParameters& params, const std::string& device_id) OVERRIDE; - virtual AudioParameters GetPreferredLowLatencyOutputStreamParameters( const AudioParameters& input_params) OVERRIDE; |