Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(140)

Unified Diff: media/audio/audio_util.cc

Issue 12049070: Avoids irregular OnMoreData callbacks on Windows using Core Audio (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Moved FillRenderEndpointBufferWithSilence to CoreAudioUtil Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: media/audio/audio_util.cc
diff --git a/media/audio/audio_util.cc b/media/audio/audio_util.cc
index 4c446dd8012bb1e9cb1d45ac119aa0c3d1341f3e..472a88a048a825f1f9bcd9d22310c5e82f3a9677 100644
--- a/media/audio/audio_util.cc
+++ b/media/audio/audio_util.cc
@@ -256,6 +256,10 @@ size_t GetAudioHardwareBufferSize() {
#if defined(OS_MACOSX)
return 128;
#elif defined(OS_WIN)
+ // TODO(henrika): resolve conflict with GetUserBufferSize().
+ // If the user tries to set a buffer size using GetUserBufferSize() it will
+ // most likely fail since only the native/perfect buffer size is allowed.
+
// Buffer size to use when a proper size can't be determined from the system.
static const int kFallbackBufferSize = 4096;
@@ -273,42 +277,10 @@ size_t GetAudioHardwareBufferSize() {
return 256;
}
- // TODO(henrika): remove when the --enable-webaudio-input flag is no longer
- // utilized.
- if (cmd_line->HasSwitch(switches::kEnableWebAudioInput)) {
- AudioParameters params;
- HRESULT hr = CoreAudioUtil::GetPreferredAudioParameters(eRender, eConsole,
- &params);
- return FAILED(hr) ? kFallbackBufferSize : params.frames_per_buffer();
- }
-
- // This call must be done on a COM thread configured as MTA.
- // TODO(tommi): http://code.google.com/p/chromium/issues/detail?id=103835.
- int mixing_sample_rate =
- WASAPIAudioOutputStream::HardwareSampleRate(eConsole);
-
- // Windows will return a sample rate of 0 when no audio output is available
- // (i.e. via RemoteDesktop with remote audio disabled), but we should never
- // return a buffer size of zero.
- if (mixing_sample_rate == 0)
- return kFallbackBufferSize;
-
- // Use different buffer sizes depening on the sample rate . The existing
- // WASAPI implementation is tuned to provide the most stable callback
- // sequence using these combinations.
- if (mixing_sample_rate % 11025 == 0)
- // Use buffer size of ~10.15873 ms.
- return (112 * (mixing_sample_rate / 11025));
-
- if (mixing_sample_rate % 8000 == 0)
- // Use buffer size of 10ms.
- return (80 * (mixing_sample_rate / 8000));
-
- // Ensure we always return a buffer size which is somewhat appropriate.
- LOG(ERROR) << "Unknown sample rate " << mixing_sample_rate << " detected.";
- if (mixing_sample_rate > limits::kMinSampleRate)
- return (mixing_sample_rate / 100);
- return kFallbackBufferSize;
+ AudioParameters params;
+ HRESULT hr = CoreAudioUtil::GetPreferredAudioParameters(eRender, eConsole,
+ &params);
+ return FAILED(hr) ? kFallbackBufferSize : params.frames_per_buffer();
#else
return 2048;
#endif

Powered by Google App Engine
This is Rietveld 408576698