diff options
author | Wolfgang Wiedmeyer <wolfgit@wiedmeyer.de> | 2016-12-12 15:01:24 +0100 |
---|---|---|
committer | Wolfgang Wiedmeyer <wolfgit@wiedmeyer.de> | 2016-12-12 15:01:24 +0100 |
commit | e15fd68c5dc4089690b5d3086776c3851e504bb7 (patch) | |
tree | 2c75274dee02b07463c9164efdf6888e1a9c75dc /services/audioflinger/AudioResamplerQTI.cpp | |
parent | 185e2110a53feb7720d91b6f8366ad27402f21cc (diff) | |
parent | 26c5fa31d17a638bf314de6e12e86bb8a86db44b (diff) | |
download | frameworks_av-e15fd68c5dc4089690b5d3086776c3851e504bb7.zip frameworks_av-e15fd68c5dc4089690b5d3086776c3851e504bb7.tar.gz frameworks_av-e15fd68c5dc4089690b5d3086776c3851e504bb7.tar.bz2 |
Merge branch 'cm-13.0' of https://github.com/CyanogenMod/android_frameworks_av into replicant-6.0
Diffstat (limited to 'services/audioflinger/AudioResamplerQTI.cpp')
-rw-r--r-- | services/audioflinger/AudioResamplerQTI.cpp | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/services/audioflinger/AudioResamplerQTI.cpp b/services/audioflinger/AudioResamplerQTI.cpp index 44b741e..0d57e09 100644 --- a/services/audioflinger/AudioResamplerQTI.cpp +++ b/services/audioflinger/AudioResamplerQTI.cpp @@ -51,8 +51,9 @@ size_t AudioResamplerQTI::resample(int32_t* out, size_t outFrameCount, { int16_t vl = mVolume[0]; int16_t vr = mVolume[1]; - int16_t *pBuf; + int32_t *pBuf; + int64_t tempL, tempR; size_t inFrameRequest; size_t inFrameCount = getNumInSample(outFrameCount); size_t index = 0; @@ -74,7 +75,7 @@ size_t AudioResamplerQTI::resample(int32_t* out, size_t outFrameCount, if(mResamplerOutBuf) { delete [] mResamplerOutBuf; } - mTmpBuf = new int16_t[inFrameRequest + 16]; + mTmpBuf = new int32_t[inFrameRequest + 16]; mResamplerOutBuf = new int32_t[out_count]; } @@ -95,7 +96,7 @@ size_t AudioResamplerQTI::resample(int32_t* out, size_t outFrameCount, goto resample_exit; } - mTmpBuf[index++] = clamp16_from_float(*((float *)mBuffer.raw + frameIndex++)); + mTmpBuf[index++] = clampq4_27_from_float(*((float *)mBuffer.raw + frameIndex++)); if (frameIndex >= mBuffer.frameCount) { provider->releaseBuffer(&mBuffer); @@ -121,8 +122,8 @@ size_t AudioResamplerQTI::resample(int32_t* out, size_t outFrameCount, goto resample_exit; } - mTmpBuf[index] = clamp16_from_float(*((float *)mBuffer.raw + frameIndex++)); - pBuf[index++] = clamp16_from_float(*((float *)mBuffer.raw + frameIndex++)); + mTmpBuf[index] = clampq4_27_from_float(*((float *)mBuffer.raw + frameIndex++)); + pBuf[index++] = clampq4_27_from_float(*((float *)mBuffer.raw + frameIndex++)); if (frameIndex >= mBuffer.frameCount * 2) { provider->releaseBuffer(&mBuffer); } @@ -133,8 +134,12 @@ size_t AudioResamplerQTI::resample(int32_t* out, size_t outFrameCount, resample_exit: for (int i = 0; i < out_count; i += 2) { - fout[i] += float_from_q4_27(mResamplerOutBuf[i] * vl); - fout[i+1] += float_from_q4_27(mResamplerOutBuf[i+1] * vr); + // Multiplying q4.27 data with u4.12 gain could result in 39 fractional bit data(27+12) + // To get back the 27 fractional bit format output data, do right shift by 12 + tempL = (int64_t)mResamplerOutBuf[i] * vl; + tempR = (int64_t)mResamplerOutBuf[i+1] * vr; + fout[i] += float_from_q4_27((int32_t)(tempL>>12)); + fout[i+1] += float_from_q4_27((int32_t)(tempR>>12)); } mFrameIndex = frameIndex; @@ -151,7 +156,7 @@ void AudioResamplerQTI::setSampleRate(int32_t inSampleRate) void AudioResamplerQTI::init() { - QCT_Resampler::Init(mState, mChannelCount, mInSampleRate, mSampleRate); + QCT_Resampler::Init(mState, mChannelCount, mInSampleRate, mSampleRate, 1/*32bit in*/); } size_t AudioResamplerQTI::getNumInSample(size_t outFrameCount) |