Index: media/audio/audio_util.cc |
diff --git a/media/audio/audio_util.cc b/media/audio/audio_util.cc |
index b4b8751885b570b2ebdabb30ae78f6122e7ca20a..8caced5204243dd7e1ee1337f6a6e5e7ce9dd386 100644 |
--- a/media/audio/audio_util.cc |
+++ b/media/audio/audio_util.cc |
@@ -14,9 +14,11 @@ |
#include "base/basictypes.h" |
#include "base/logging.h" |
#include "base/shared_memory.h" |
+#include "base/time.h" |
#if defined(OS_WIN) |
#include "base/win/windows_version.h" |
#endif |
+#include "media/audio/audio_parameters.h" |
#include "media/audio/audio_util.h" |
#if defined(OS_MACOSX) |
#include "media/audio/mac/audio_low_latency_input_mac.h" |
@@ -436,4 +438,29 @@ void Crossfade(int bytes_to_crossfade, int number_of_channels, |
} |
} |
+// The minimum number of samples in a hardware packet. |
+// This value is selected so that we can handle down to 5khz sample rate. |
+static const int kMinSamplesPerHardwarePacket = 1024; |
+ |
+// The maximum number of samples in a hardware packet. |
+// This value is selected so that we can handle up to 192khz sample rate. |
+static const int kMaxSamplesPerHardwarePacket = 64 * 1024; |
+ |
+// This constant governs the hardware audio buffer size, this value should be |
+// chosen carefully. |
+// This value is selected so that we have 8192 samples for 48khz streams. |
+static const int kMillisecondsPerHardwarePacket = 170; |
+ |
+uint32 SelectSamplesPerPacket(int sample_rate) { |
+ // Select the number of samples that can provide at least |
+ // |kMillisecondsPerHardwarePacket| worth of audio data. |
+ int samples = kMinSamplesPerHardwarePacket; |
+ while (samples <= kMaxSamplesPerHardwarePacket && |
+ samples * base::Time::kMillisecondsPerSecond < |
+ sample_rate * kMillisecondsPerHardwarePacket) { |
+ samples *= 2; |
+ } |
+ return samples; |
+} |
+ |
} // namespace media |