diff options
author | rtoy@google.com <rtoy@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-15 05:29:18 +0000 |
---|---|---|
committer | rtoy@google.com <rtoy@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-15 05:29:18 +0000 |
commit | 441ec4dc183c1c6c4f303855aaeea75cb60074fe (patch) | |
tree | 712e21b89b7b15c0c9a8cd31b5fb962179c06c66 | |
parent | 5fa278c10430a00706d0e296216b4c9543bacbc7 (diff) | |
download | chromium_src-441ec4dc183c1c6c4f303855aaeea75cb60074fe.zip chromium_src-441ec4dc183c1c6c4f303855aaeea75cb60074fe.tar.gz chromium_src-441ec4dc183c1c6c4f303855aaeea75cb60074fe.tar.bz2 |
Add API to query for the audio buffer size.
This is essentially identical to the GetAudioHardwareSampleRate API, except
we get the "optimal" hardware buffer size to be used.
BUG=None
TEST=None
Review URL: http://codereview.chromium.org/7837030
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@101249 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | content/renderer/media/audio_device.cc | 10 | ||||
-rw-r--r-- | content/renderer/media/audio_device.h | 1 | ||||
-rw-r--r-- | content/renderer/renderer_webkitplatformsupport_impl.cc | 4 | ||||
-rw-r--r-- | content/renderer/renderer_webkitplatformsupport_impl.h | 1 | ||||
-rw-r--r-- | media/audio/audio_util.cc | 17 | ||||
-rw-r--r-- | media/audio/audio_util.h | 5 |
6 files changed, 38 insertions, 0 deletions
diff --git a/content/renderer/media/audio_device.cc b/content/renderer/media/audio_device.cc index 7b2843f..68a8756 100644 --- a/content/renderer/media/audio_device.cc +++ b/content/renderer/media/audio_device.cc @@ -243,3 +243,13 @@ double AudioDevice::GetAudioHardwareSampleRate() { } return hardware_sample_rate; } + +size_t AudioDevice::GetAudioHardwareBufferSize() { + // Uses cached value if possible. + static size_t buffer_size = 0; + + if (!buffer_size) + buffer_size = media::GetAudioHardwareBufferSize(); + + return buffer_size; +} diff --git a/content/renderer/media/audio_device.h b/content/renderer/media/audio_device.h index eee2513..54f5dc7 100644 --- a/content/renderer/media/audio_device.h +++ b/content/renderer/media/audio_device.h @@ -101,6 +101,7 @@ class AudioDevice size_t buffer_size() const { return buffer_size_; } static double GetAudioHardwareSampleRate(); + static size_t GetAudioHardwareBufferSize(); // Methods called on IO thread ---------------------------------------------- // AudioMessageFilter::Delegate methods, called by AudioMessageFilter. diff --git a/content/renderer/renderer_webkitplatformsupport_impl.cc b/content/renderer/renderer_webkitplatformsupport_impl.cc index b4eb45f..6d459e9 100644 --- a/content/renderer/renderer_webkitplatformsupport_impl.cc +++ b/content/renderer/renderer_webkitplatformsupport_impl.cc @@ -567,6 +567,10 @@ double RendererWebKitPlatformSupportImpl::audioHardwareSampleRate() { return AudioDevice::GetAudioHardwareSampleRate(); } +size_t RendererWebKitPlatformSupportImpl::audioHardwareBufferSize() { + return AudioDevice::GetAudioHardwareBufferSize(); +} + WebAudioDevice* RendererWebKitPlatformSupportImpl::createAudioDevice( size_t buffer_size, diff --git a/content/renderer/renderer_webkitplatformsupport_impl.h b/content/renderer/renderer_webkitplatformsupport_impl.h index 83b3235..9517693 100644 --- a/content/renderer/renderer_webkitplatformsupport_impl.h +++ b/content/renderer/renderer_webkitplatformsupport_impl.h @@ -78,6 +78,7 @@ class RendererWebKitPlatformSupportImpl virtual WebKit::WebSharedWorkerRepository* sharedWorkerRepository(); virtual WebKit::WebGraphicsContext3D* createGraphicsContext3D(); virtual double audioHardwareSampleRate(); + virtual size_t audioHardwareBufferSize(); virtual WebKit::WebAudioDevice* createAudioDevice( size_t buffer_size, unsigned channels, double sample_rate, WebKit::WebAudioDevice::RenderCallback* callback); diff --git a/media/audio/audio_util.cc b/media/audio/audio_util.cc index 2b790d8..120e2ed 100644 --- a/media/audio/audio_util.cc +++ b/media/audio/audio_util.cc @@ -242,6 +242,23 @@ double GetAudioHardwareSampleRate() #endif } +size_t GetAudioHardwareBufferSize() { + // The sizes here were determined by experimentation and are roughly + // the lowest value (for low latency) that still allowed glitch-free + // audio under high loads. + // + // For Mac OS X the chromium audio backend uses a low-latency + // CoreAudio API, so a low buffer size is possible. For other OSes, + // further tuning may be needed. +#if defined(OS_MACOSX) + return 128; +#elif defined(OS_LINUX) + return 2048; +#else + return 2048; +#endif +} + // When transferring data in the shared memory, first word is size of data // in bytes. Actual data starts immediately after it. diff --git a/media/audio/audio_util.h b/media/audio/audio_util.h index e9452b2..6ea697b 100644 --- a/media/audio/audio_util.h +++ b/media/audio/audio_util.h @@ -82,6 +82,11 @@ MEDIA_EXPORT void InterleaveFloatToInt16(const std::vector<float*>& source, // Returns the default audio hardware sample-rate. MEDIA_EXPORT double GetAudioHardwareSampleRate(); +// Returns the optimal low-latency buffer size for the audio hardware. +// This is the smallest buffer size the system can comfortably render +// at without glitches. The buffer size is in sample-frames. +MEDIA_EXPORT size_t GetAudioHardwareBufferSize(); + // Functions that handle data buffer passed between processes in the shared // memory. Called on both IPC sides. |