diff options
author | Andy Hung <hunga@google.com> | 2015-04-07 13:43:36 -0700 |
---|---|---|
committer | Andy Hung <hunga@google.com> | 2015-04-08 15:58:56 -0700 |
commit | 6770c6faa3467c92eabc5ec9b23d60eb556a0d03 (patch) | |
tree | 45470127b227dbda5a346bb1902f92f8998c25bb /include/media/AudioResamplerPublic.h | |
parent | 73c02e4277b399c2ec1555d32b6ad5df23bb83dc (diff) | |
download | frameworks_av-6770c6faa3467c92eabc5ec9b23d60eb556a0d03.zip frameworks_av-6770c6faa3467c92eabc5ec9b23d60eb556a0d03.tar.gz frameworks_av-6770c6faa3467c92eabc5ec9b23d60eb556a0d03.tar.bz2 |
Enable 8 bit and float pcm record formats for AudioFlinger
Update sampling rate handling as well.
Bug: 19570772
Change-Id: I872248e64c0578b2e48869a68fee0d51bd0640c3
Diffstat (limited to 'include/media/AudioResamplerPublic.h')
-rw-r--r-- | include/media/AudioResamplerPublic.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/include/media/AudioResamplerPublic.h b/include/media/AudioResamplerPublic.h index b705efa..0634741 100644 --- a/include/media/AudioResamplerPublic.h +++ b/include/media/AudioResamplerPublic.h @@ -17,6 +17,8 @@ #ifndef ANDROID_AUDIO_RESAMPLER_PUBLIC_H #define ANDROID_AUDIO_RESAMPLER_PUBLIC_H +#include <stdint.h> + // AUDIO_RESAMPLER_DOWN_RATIO_MAX is the maximum ratio between the original // audio sample rate and the target rate when downsampling, // as permitted in the audio framework, e.g. AudioTrack and AudioFlinger. @@ -26,6 +28,12 @@ // TODO: replace with an API #define AUDIO_RESAMPLER_DOWN_RATIO_MAX 256 +// AUDIO_RESAMPLER_UP_RATIO_MAX is the maximum suggested ratio between the original +// audio sample rate and the target rate when upsampling. It is loosely enforced by +// the system. One issue with large upsampling ratios is the approximation by +// an int32_t of the phase increments, making the resulting sample rate inexact. +#define AUDIO_RESAMPLER_UP_RATIO_MAX 65536 + // 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. @@ -39,4 +47,15 @@ static inline size_t sourceFramesNeeded( size_t((uint64_t)dstFramesRequired * srcSampleRate / dstSampleRate + 1 + 1); } +// An upper bound for the number of destination frames possible from srcFrames +// after sample rate conversion. This may be used for buffer sizing. +static inline size_t destinationFramesPossible(size_t srcFrames, uint32_t srcSampleRate, + uint32_t dstSampleRate) { + if (srcSampleRate == dstSampleRate) { + return srcFrames; + } + uint64_t dstFrames = (uint64_t)srcFrames * dstSampleRate / srcSampleRate; + return dstFrames > 2 ? dstFrames - 2 : 0; +} + #endif // ANDROID_AUDIO_RESAMPLER_PUBLIC_H |