diff options
author | Xin Li <delphij@google.com> | 2021-06-14 21:52:20 -0700 |
---|---|---|
committer | Xin Li <delphij@google.com> | 2021-06-17 22:32:02 +0000 |
commit | b4d7ad42c99416894e1bcdfdf0ccc89a9ef4f0ab (patch) | |
tree | 803766e59f6e780eabd3d7d2ba39d8e8f47bb2f7 | |
parent | 9cfbee19697b606ad115b5556f6fcbed9e50a21e (diff) | |
parent | 6452ea5496c810f32b43d7910c569a7c047ed017 (diff) | |
download | audio-b4d7ad42c99416894e1bcdfdf0ccc89a9ef4f0ab.tar.gz |
DO NOT MERGE - Merge ab/7272582
Bug: 190855093
Merged-In: I953366e09d98352d30b82f40c18a261d2355cf2c
Change-Id: Ia636d1e7cc14b72da94e612c6d720997ab552cc0
-rw-r--r-- | hal/audio_hw.c | 26 |
1 files changed, 12 insertions, 14 deletions
diff --git a/hal/audio_hw.c b/hal/audio_hw.c index a3abb8a..28faffc 100644 --- a/hal/audio_hw.c +++ b/hal/audio_hw.c @@ -2738,23 +2738,21 @@ static size_t get_stream_buffer_size(size_t duration_ms, int channel_count, bool is_low_latency) { - size_t size = 0; + // Compute target frames based on time or period size. + size_t target_frames = is_low_latency + ? configured_low_latency_capture_period_size // record only + : (sample_rate * duration_ms) / 1000; - size = (sample_rate * duration_ms) / 1000; - if (is_low_latency) - size = configured_low_latency_capture_period_size; - - size *= channel_count * audio_bytes_per_sample(format); + // Round up to a multiple of 16 frames in case sizing for the MixerThread. + if (!is_low_latency) { // low latency flag set for record only + target_frames = (target_frames + 0xf) & ~0xf; + } - /* make sure the size is multiple of 32 bytes - * At 48 kHz mono 16-bit PCM: - * 5.000 ms = 240 frames = 15*16*1*2 = 480, a whole multiple of 32 (15) - * 3.333 ms = 160 frames = 10*16*1*2 = 320, a whole multiple of 32 (10) - */ - size += 0x1f; - size &= ~0x1f; + // Buffer size is the target frames multiplied by the frame size in bytes. + const size_t frame_size = channel_count * audio_bytes_per_sample(format); + const size_t buffer_size = target_frames * frame_size; - return size; + return buffer_size; } static uint32_t out_get_sample_rate(const struct audio_stream *stream) |