diff options
author | Andy Hung <hunga@google.com> | 2014-08-07 11:04:34 -0700 |
---|---|---|
committer | Andy Hung <hunga@google.com> | 2014-08-11 10:17:18 -0700 |
commit | cd04484f4837b8ca0041d118286ab6a98e84fc75 (patch) | |
tree | 4b9e501bb71969c0ca5049201aeae42284ac9b80 /media | |
parent | 53a1e46e559b00653eadf6f4bb5572679b0ee734 (diff) | |
download | frameworks_av-cd04484f4837b8ca0041d118286ab6a98e84fc75.zip frameworks_av-cd04484f4837b8ca0041d118286ab6a98e84fc75.tar.gz frameworks_av-cd04484f4837b8ca0041d118286ab6a98e84fc75.tar.bz2 |
Extend downsampling ratios greater than 2:1
Also improve robustness to choice of sampling rate or buffer size
such that increasing either by 10x does not cause overflow.
Bug: 12979141
Bug: 15933066
Change-Id: If7989bd745d1bee3bdf811b8b7c978543ccafb65
Diffstat (limited to 'media')
-rw-r--r-- | media/libmedia/AudioTrack.cpp | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp index b5c9125..d87e6f5 100644 --- a/media/libmedia/AudioTrack.cpp +++ b/media/libmedia/AudioTrack.cpp @@ -28,6 +28,7 @@ #include <utils/Log.h> #include <private/media/AudioTrackShared.h> #include <media/IAudioFlinger.h> +#include <media/AudioResamplerPublic.h> #define WAIT_PERIOD_MS 10 #define WAIT_STREAM_END_TIMEOUT_SEC 120 @@ -82,7 +83,7 @@ status_t AudioTrack::getMinFrameCount( } *frameCount = (sampleRate == 0) ? afFrameCount * minBufCount : - afFrameCount * minBufCount * sampleRate / afSampleRate; + afFrameCount * minBufCount * uint64_t(sampleRate) / afSampleRate; // The formula above should always produce a non-zero value, but return an error // in the unlikely event that it does not, as that's part of the API contract. if (*frameCount == 0) { @@ -646,8 +647,7 @@ status_t AudioTrack::setSampleRate(uint32_t rate) if (AudioSystem::getOutputSamplingRateForAttr(&afSamplingRate, &mAttributes) != NO_ERROR) { return NO_INIT; } - // Resampler implementation limits input sampling rate to 2 x output sampling rate. - if (rate == 0 || rate > afSamplingRate*2 ) { + if (rate == 0 || rate > afSamplingRate * AUDIO_RESAMPLER_DOWN_RATIO_MAX) { return BAD_VALUE; } @@ -1002,7 +1002,7 @@ status_t AudioTrack::createTrack_l(size_t epoch) minBufCount = nBuffering; } - size_t minFrameCount = (afFrameCount*mSampleRate*minBufCount)/afSampleRate; + size_t minFrameCount = afFrameCount * minBufCount * uint64_t(mSampleRate) / afSampleRate; ALOGV("minFrameCount: %zu, afFrameCount=%zu, minBufCount=%d, sampleRate=%u, afSampleRate=%u" ", afLatency=%d", minFrameCount, afFrameCount, minBufCount, mSampleRate, afSampleRate, afLatency); |