diff options
-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(); |