Index: media/audio/linux/audio_manager_linux.cc |
diff --git a/media/audio/linux/audio_manager_linux.cc b/media/audio/linux/audio_manager_linux.cc |
index b126ed1fdb4b3d699a05fa9bf403389f68864378..e7da9319a850627c67f96cb138c8e97ff6ae95a7 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 |