Commit eeedc369 authored by cychiang's avatar cychiang Committed by Commit bot

audio_manager_cras: Set minimum output buffer size per board

Add a map to set different minimum output buffer size per board.
We can use smaller minimum output buffer size for powerful board, and
use larger minimum output buffer size for slower board.

BUG=581679
TEST=On kevin board, check block size is 768 on WebAudio test page.
TEST=On samus board, check block size is 256 on WebAudio test page.

CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel

Review-Url: https://codereview.chromium.org/2787433002
Cr-Commit-Position: refs/heads/master@{#464411}
parent ef481283
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include "base/nix/xdg_util.h" #include "base/nix/xdg_util.h"
#include "base/stl_util.h" #include "base/stl_util.h"
#include "base/strings/string_number_conversions.h" #include "base/strings/string_number_conversions.h"
#include "base/sys_info.h"
#include "chromeos/audio/audio_device.h" #include "chromeos/audio/audio_device.h"
#include "chromeos/audio/cras_audio_handler.h" #include "chromeos/audio/cras_audio_handler.h"
#include "media/audio/audio_device_description.h" #include "media/audio/audio_device_description.h"
...@@ -295,12 +296,23 @@ AudioInputStream* AudioManagerCras::MakeLowLatencyInputStream( ...@@ -295,12 +296,23 @@ AudioInputStream* AudioManagerCras::MakeLowLatencyInputStream(
return MakeInputStream(params, device_id); return MakeInputStream(params, device_id);
} }
int AudioManagerCras::GetMinimumOutputBufferSizePerBoard() {
// On faster boards we can use smaller buffer size for lower latency.
// On slower boards we should use larger buffer size to prevent underrun.
std::string board = base::SysInfo::GetLsbReleaseBoard();
if (board == "kevin")
return 768;
else if (board == "samus")
return 256;
return kMinimumOutputBufferSize;
}
AudioParameters AudioManagerCras::GetPreferredOutputStreamParameters( AudioParameters AudioManagerCras::GetPreferredOutputStreamParameters(
const std::string& output_device_id, const std::string& output_device_id,
const AudioParameters& input_params) { const AudioParameters& input_params) {
ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO; ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO;
int sample_rate = kDefaultSampleRate; int sample_rate = kDefaultSampleRate;
int buffer_size = kMinimumOutputBufferSize; int buffer_size = GetMinimumOutputBufferSizePerBoard();
int bits_per_sample = 16; int bits_per_sample = 16;
if (input_params.IsValid()) { if (input_params.IsValid()) {
sample_rate = input_params.sample_rate(); sample_rate = input_params.sample_rate();
......
...@@ -72,6 +72,9 @@ class MEDIA_EXPORT AudioManagerCras : public AudioManagerBase { ...@@ -72,6 +72,9 @@ class MEDIA_EXPORT AudioManagerCras : public AudioManagerBase {
AudioInputStream* MakeInputStream(const AudioParameters& params, AudioInputStream* MakeInputStream(const AudioParameters& params,
const std::string& device_id); const std::string& device_id);
// Get minimum output buffer size for this board.
int GetMinimumOutputBufferSizePerBoard();
void GetAudioDeviceNamesImpl(bool is_input, AudioDeviceNames* device_names); void GetAudioDeviceNamesImpl(bool is_input, AudioDeviceNames* device_names);
void AddBeamformingDevices(AudioDeviceNames* device_names); void AddBeamformingDevices(AudioDeviceNames* device_names);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment