summaryrefslogtreecommitdiffstats
path: root/media/libmedia
diff options
context:
space:
mode:
authorAndy Hung <hunga@google.com>2014-08-07 11:04:34 -0700
committerAndy Hung <hunga@google.com>2014-08-11 10:17:18 -0700
commitcd04484f4837b8ca0041d118286ab6a98e84fc75 (patch)
tree4b9e501bb71969c0ca5049201aeae42284ac9b80 /media/libmedia
parent53a1e46e559b00653eadf6f4bb5572679b0ee734 (diff)
downloadframeworks_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/libmedia')
-rw-r--r--media/libmedia/AudioTrack.cpp8
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);