summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorxians@chromium.org <xians@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-02 09:51:32 +0000
committerxians@chromium.org <xians@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-02 09:51:32 +0000
commit6fe0152e8382d6119481d2ca0eee0a59ea098369 (patch)
tree61664e324199ed5d1d66f7ae18935cc4bb12fddd /media
parent11a57662f2849ca6708075664e5d961ddb626bd1 (diff)
downloadchromium_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.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();