diff options
author | xians@chromium.org <xians@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-02 09:51:32 +0000 |
---|---|---|
committer | xians@chromium.org <xians@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-02 09:51:32 +0000 |
commit | 6fe0152e8382d6119481d2ca0eee0a59ea098369 (patch) | |
tree | 61664e324199ed5d1d66f7ae18935cc4bb12fddd /media | |
parent | 11a57662f2849ca6708075664e5d961ddb626bd1 (diff) | |
download | chromium_src-6fe0152e8382d6119481d2ca0eee0a59ea098369.zip chromium_src-6fe0152e8382d6119481d2ca0eee0a59ea098369.tar.gz chromium_src-6fe0152e8382d6119481d2ca0eee0a59ea098369.tar.bz2 |
Use clients' preferred buffer size when the sample rates match and it is a number smaller than 2047.
BUG=152780
TEST=apprtc.appspot.com/?debug=loopback, no choppy audio
Review URL: https://chromiumcodereview.appspot.com/11014015
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@159666 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media')
-rw-r--r-- | media/audio/mac/audio_manager_mac.cc | 22 | ||||
-rw-r--r-- | media/audio/mac/audio_manager_mac.h | 2 |
2 files changed, 24 insertions, 0 deletions
diff --git a/media/audio/mac/audio_manager_mac.cc b/media/audio/mac/audio_manager_mac.cc index edf59930..a4cadba 100644 --- a/media/audio/mac/audio_manager_mac.cc +++ b/media/audio/mac/audio_manager_mac.cc @@ -10,6 +10,7 @@ #include "base/mac/mac_logging.h" #include "base/mac/scoped_cftyperef.h" #include "base/sys_string_conversions.h" +#include "media/audio/audio_util.h" #include "media/audio/mac/audio_input_mac.h" #include "media/audio/mac/audio_low_latency_input_mac.h" #include "media/audio/mac/audio_low_latency_output_mac.h" @@ -25,6 +26,9 @@ namespace media { // Maximum number of output streams that can be open simultaneously. static const int kMaxOutputStreams = 50; +// Maximum buffer size that CoreAudio can support, used by low latency path. +static const int kMaxLowLatencyBufferSize = 2047; + static bool HasAudioHardware(AudioObjectPropertySelector selector) { AudioDeviceID output_device_id = kAudioObjectUnknown; const AudioObjectPropertyAddress property_address = { @@ -333,4 +337,22 @@ AudioManager* CreateAudioManager() { return new AudioManagerMac(); } +AudioParameters AudioManagerMac::GetPreferredLowLatencyOutputStreamParameters( + const AudioParameters& params) { + // Applications should use their own preferred buffer size when no resampler + // is needed, and Apple CoreAudio can accept any buffer size up to 2047. + int native_sample_rate = GetAudioHardwareSampleRate(); + int buffer_size = GetAudioHardwareBufferSize(); + if (native_sample_rate == params.sample_rate() && + params.frames_per_buffer() <= kMaxLowLatencyBufferSize) { + buffer_size = params.frames_per_buffer(); + } + + return AudioParameters(AudioParameters::AUDIO_PCM_LOW_LATENCY, + params.channel_layout(), + native_sample_rate, + 16, + buffer_size); +} + } // namespace media diff --git a/media/audio/mac/audio_manager_mac.h b/media/audio/mac/audio_manager_mac.h index d655d4b..73d5e04 100644 --- a/media/audio/mac/audio_manager_mac.h +++ b/media/audio/mac/audio_manager_mac.h @@ -33,6 +33,8 @@ class MEDIA_EXPORT AudioManagerMac : 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& params) OVERRIDE; protected: virtual ~AudioManagerMac(); |