summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorAndy Hung <hunga@google.com>2015-01-26 11:43:15 -0800
committerAndy Hung <hunga@google.com>2015-02-06 11:51:26 -0800
commit0e48d25606c82def035ad10a5b3923767a765cdd (patch)
tree2811d0042ca0c670bb6fb9cffa83b82de33f8ff8 /include
parentc42ab4fcd42875ef74f8e9b8d8150f7bcfd0cd3b (diff)
downloadframeworks_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.h13
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