Configure the resampler with the correct channel count when downmixing
When a track needs to be downmixed and resampled, it gets downmixed
first before being resampled. Therefore the resampler needs to
be configured with the channel count of the output of the downmixer
instead of that of the track.
Removed frame size checks that don't apply anymore now that we support
frame sizes that are not powers of 2 (e.g. 12 for 5.1 16bits), and
changed test performed for every buffer during playback into an
assert.
Change-Id: Ia220f00ee382f4f7848b661c58555bdca664e194
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index d42ac8c..b37eea2 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -3507,14 +3507,12 @@
int8_t *bufferEnd = bufferStart + frames * frameSize;
// Check validity of returned pointer in case the track control block would have been corrupted.
- if (bufferStart < mBuffer || bufferStart > bufferEnd || bufferEnd > mBufferEnd ||
- ((unsigned long)bufferStart & (unsigned long)(frameSize - 1))) {
- ALOGE("TrackBase::getBuffer buffer out of range:\n start: %p, end %p , mBuffer %p mBufferEnd %p\n \
- server %u, serverBase %u, user %u, userBase %u",
+ ALOG_ASSERT(!(bufferStart < mBuffer || bufferStart > bufferEnd || bufferEnd > mBufferEnd),
+ "TrackBase::getBuffer buffer out of range:\n"
+ " start: %p, end %p , mBuffer %p mBufferEnd %p\n"
+ " server %u, serverBase %u, user %u, userBase %u, frameSize %d",
bufferStart, bufferEnd, mBuffer, mBufferEnd,
- cblk->server, cblk->serverBase, cblk->user, cblk->userBase);
- return NULL;
- }
+ cblk->server, cblk->serverBase, cblk->user, cblk->userBase, frameSize);
return bufferStart;
}