summaryrefslogtreecommitdiffstats
path: root/services/audioflinger/AudioResampler.cpp
diff options
context:
space:
mode:
authorEric Laurent <elaurent@google.com>2011-02-28 16:52:51 -0800
committerEric Laurent <elaurent@google.com>2011-02-28 16:52:51 -0800
commit243f5f91755c01614a8cafe90b0806396e22d553 (patch)
treed6f4e9f1593f468967f75a82f21d8058a93c5ed1 /services/audioflinger/AudioResampler.cpp
parent8ddeebb93cb41e7a8e9fe763afb6c6016b21fa61 (diff)
downloadframeworks_av-243f5f91755c01614a8cafe90b0806396e22d553.zip
frameworks_av-243f5f91755c01614a8cafe90b0806396e22d553.tar.gz
frameworks_av-243f5f91755c01614a8cafe90b0806396e22d553.tar.bz2
Fix issue 3479042.
The problem is that when an AudioRecord using the resampler is restarted, the resampler state is not reset (as there is no reset function in the resampler). The consequence is that the first time the record thread loop runs, it calls the resampler which consumes the remaining data in the input buffer and when this buffer is released the input index is incremented over the limit. The fix consists in implementing a reset function in the resampler. A similar problem was also present for playback but unoticed because the track buffer is always drained by the mixer when a track stops. The only problem for playback was that the initial phase fraction was wrong when restarting a track after stop (it was correct after a pause). Change-Id: Ifc2585d685f4402d29f4afc63f6efd1d69265de3
Diffstat (limited to 'services/audioflinger/AudioResampler.cpp')
-rw-r--r--services/audioflinger/AudioResampler.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/services/audioflinger/AudioResampler.cpp b/services/audioflinger/AudioResampler.cpp
index 5dabacb..5c3b43f 100644
--- a/services/audioflinger/AudioResampler.cpp
+++ b/services/audioflinger/AudioResampler.cpp
@@ -148,6 +148,12 @@ void AudioResampler::setVolume(int16_t left, int16_t right) {
mVolume[1] = right;
}
+void AudioResampler::reset() {
+ mInputIndex = 0;
+ mPhaseFraction = 0;
+ mBuffer.frameCount = 0;
+}
+
// ----------------------------------------------------------------------------
void AudioResamplerOrder1::resample(int32_t* out, size_t outFrameCount,