summaryrefslogtreecommitdiff
path: root/libs/audioflinger/AudioResamplerCubic.cpp
diff options
context:
space:
mode:
author Jean-Baptiste Queru <jbq@google.com> 2008-12-19 08:31:54 -0800
committer Jean-Baptiste Queru <jbq@google.com> 2008-12-19 08:31:54 -0800
commit772a89695f179b51d16b26c1b0d946aa3e850e70 (patch)
tree9a9fdadd1301625f875a3c126c986c79e3363ac4 /libs/audioflinger/AudioResamplerCubic.cpp
parentd34e59679f6a98e9e67ef4bd18da6e5a86d386bc (diff)
parente09fd9e819c23dc90bca68375645e15544861330 (diff)
Merge commit 'remotes/korg/cupcake'
Conflicts: core/java/com/android/internal/app/AlertController.java core/res/res/values/strings.xml media/java/android/media/AudioSystem.java services/java/com/android/server/LocationManagerService.java
Diffstat (limited to 'libs/audioflinger/AudioResamplerCubic.cpp')
-rw-r--r--libs/audioflinger/AudioResamplerCubic.cpp18
1 files changed, 12 insertions, 6 deletions
diff --git a/libs/audioflinger/AudioResamplerCubic.cpp b/libs/audioflinger/AudioResamplerCubic.cpp
index 4f437bf2f5..1d247bd3a6 100644
--- a/libs/audioflinger/AudioResamplerCubic.cpp
+++ b/libs/audioflinger/AudioResamplerCubic.cpp
@@ -60,9 +60,11 @@ void AudioResamplerCubic::resampleStereo16(int32_t* out, size_t outFrameCount,
uint32_t phaseIncrement = mPhaseIncrement;
size_t outputIndex = 0;
size_t outputSampleCount = outFrameCount * 2;
-
+ size_t inFrameCount = (outFrameCount*mInSampleRate)/mSampleRate;
+
// fetch first buffer
- if (mBuffer.raw == NULL) {
+ if (mBuffer.frameCount == 0) {
+ mBuffer.frameCount = inFrameCount;
provider->getNextBuffer(&mBuffer);
if (mBuffer.raw == NULL)
return;
@@ -79,7 +81,7 @@ void AudioResamplerCubic::resampleStereo16(int32_t* out, size_t outFrameCount,
out[outputIndex++] += vl * interp(&left, x);
out[outputIndex++] += vr * interp(&right, x);
// out[outputIndex++] += vr * in[inputIndex*2];
-
+
// increment phase
phaseFraction += phaseIncrement;
uint32_t indexIncrement = (phaseFraction >> kNumPhaseBits);
@@ -92,6 +94,7 @@ void AudioResamplerCubic::resampleStereo16(int32_t* out, size_t outFrameCount,
if (inputIndex == mBuffer.frameCount) {
inputIndex = 0;
provider->releaseBuffer(&mBuffer);
+ mBuffer.frameCount = inFrameCount;
provider->getNextBuffer(&mBuffer);
if (mBuffer.raw == NULL)
goto save_state; // ugly, but efficient
@@ -122,9 +125,11 @@ void AudioResamplerCubic::resampleMono16(int32_t* out, size_t outFrameCount,
uint32_t phaseIncrement = mPhaseIncrement;
size_t outputIndex = 0;
size_t outputSampleCount = outFrameCount * 2;
-
+ size_t inFrameCount = (outFrameCount*mInSampleRate)/mSampleRate;
+
// fetch first buffer
- if (mBuffer.raw == NULL) {
+ if (mBuffer.frameCount == 0) {
+ mBuffer.frameCount = inFrameCount;
provider->getNextBuffer(&mBuffer);
if (mBuffer.raw == NULL)
return;
@@ -141,7 +146,7 @@ void AudioResamplerCubic::resampleMono16(int32_t* out, size_t outFrameCount,
sample = interp(&left, x);
out[outputIndex++] += vl * sample;
out[outputIndex++] += vr * sample;
-
+
// increment phase
phaseFraction += phaseIncrement;
uint32_t indexIncrement = (phaseFraction >> kNumPhaseBits);
@@ -154,6 +159,7 @@ void AudioResamplerCubic::resampleMono16(int32_t* out, size_t outFrameCount,
if (inputIndex == mBuffer.frameCount) {
inputIndex = 0;
provider->releaseBuffer(&mBuffer);
+ mBuffer.frameCount = inFrameCount;
provider->getNextBuffer(&mBuffer);
if (mBuffer.raw == NULL)
goto save_state; // ugly, but efficient