diff options
author | Andy Hung <hunga@google.com> | 2015-01-26 11:43:15 -0800 |
---|---|---|
committer | Andy Hung <hunga@google.com> | 2015-02-06 11:51:26 -0800 |
commit | 0e48d25606c82def035ad10a5b3923767a765cdd (patch) | |
tree | 2811d0042ca0c670bb6fb9cffa83b82de33f8ff8 /include | |
parent | c42ab4fcd42875ef74f8e9b8d8150f7bcfd0cd3b (diff) | |
download | frameworks_av-0e48d25606c82def035ad10a5b3923767a765cdd.zip frameworks_av-0e48d25606c82def035ad10a5b3923767a765cdd.tar.gz frameworks_av-0e48d25606c82def035ad10a5b3923767a765cdd.tar.bz2 |
Change AudioTrack resampling buffers from 3 to 2
Move computation of minimum AudioTrack buffer size to server
for normal streaming PCM tracks.
Use server-side computation to exactly determine requirements
for the resampler to avoid triple buffering.
This reduces latency for normal audio tracks that require resampling,
and makes things consistent with the minimum buffer size.
Change-Id: I2f2ca0e599ee20e16559bc5c5dab61ed100da16c
Diffstat (limited to 'include')
-rw-r--r-- | include/media/AudioResamplerPublic.h | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/include/media/AudioResamplerPublic.h b/include/media/AudioResamplerPublic.h index 97847a0..b705efa 100644 --- a/include/media/AudioResamplerPublic.h +++ b/include/media/AudioResamplerPublic.h @@ -26,4 +26,17 @@ // TODO: replace with an API #define AUDIO_RESAMPLER_DOWN_RATIO_MAX 256 +// Returns the source frames needed to resample to destination frames. This is not a precise +// value and depends on the resampler (and possibly how it handles rounding internally). +// Nevertheless, this should be an upper bound on the requirements of the resampler. +// If srcSampleRate and dstSampleRate are equal, then it returns destination frames, which +// may not be true if the resampler is asynchronous. +static inline size_t sourceFramesNeeded( + uint32_t srcSampleRate, size_t dstFramesRequired, uint32_t dstSampleRate) { + // +1 for rounding - always do this even if matched ratio (resampler may use phases not ratio) + // +1 for additional sample needed for interpolation + return srcSampleRate == dstSampleRate ? dstFramesRequired : + size_t((uint64_t)dstFramesRequired * srcSampleRate / dstSampleRate + 1 + 1); +} + #endif // ANDROID_AUDIO_RESAMPLER_PUBLIC_H |