diff --git a/media/libaudioprocessing/AudioMixer.cpp b/media/libaudioprocessing/AudioMixer.cpp
index f8e05e7..5fafb8a 100644
--- a/media/libaudioprocessing/AudioMixer.cpp
+++ b/media/libaudioprocessing/AudioMixer.cpp
@@ -1469,13 +1469,14 @@
         int32_t *out = t1.mainBuffer;
         size_t numFrames = 0;
         do {
+            const size_t frameCount = min((size_t)BLOCKSIZE, state->frameCount - numFrames);
             memset(outTemp, 0, sizeof(outTemp));
             e2 = e1;
             while (e2) {
                 const int i = 31 - __builtin_clz(e2);
                 e2 &= ~(1<<i);
                 track_t& t = state->tracks[i];
-                size_t outFrames = BLOCKSIZE;
+                size_t outFrames = frameCount;
                 int32_t *aux = NULL;
                 if (CC_UNLIKELY(t.needs & NEEDS_AUX)) {
                     aux = t.auxBuffer + numFrames;
@@ -1490,7 +1491,7 @@
                     }
                     size_t inFrames = (t.frameCount > outFrames)?outFrames:t.frameCount;
                     if (inFrames > 0) {
-                        t.hook(&t, outTemp + (BLOCKSIZE - outFrames) * t.mMixerChannelCount,
+                        t.hook(&t, outTemp + (frameCount - outFrames) * t.mMixerChannelCount,
                                 inFrames, state->resampleTemp, aux);
                         t.frameCount -= inFrames;
                         outFrames -= inFrames;
@@ -1501,7 +1502,7 @@
                     if (t.frameCount == 0 && outFrames) {
                         t.bufferProvider->releaseBuffer(&t.buffer);
                         t.buffer.frameCount = (state->frameCount - numFrames) -
-                                (BLOCKSIZE - outFrames);
+                                (frameCount - outFrames);
                         t.bufferProvider->getNextBuffer(&t.buffer);
                         t.in = t.buffer.raw;
                         if (t.in == NULL) {
@@ -1515,12 +1516,12 @@
             }
 
             convertMixerFormat(out, t1.mMixerFormat, outTemp, t1.mMixerInFormat,
-                    BLOCKSIZE * t1.mMixerChannelCount);
+                    frameCount * t1.mMixerChannelCount);
             // TODO: fix ugly casting due to choice of out pointer type
             out = reinterpret_cast<int32_t*>((uint8_t*)out
-                    + BLOCKSIZE * t1.mMixerChannelCount
+                    + frameCount * t1.mMixerChannelCount
                         * audio_bytes_per_sample(t1.mMixerFormat));
-            numFrames += BLOCKSIZE;
+            numFrames += frameCount;
         } while (numFrames < state->frameCount);
     }
 
