summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--media/audio/mac/audio_manager_mac.cc22
-rw-r--r--media/audio/mac/audio_manager_mac.h2
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();