summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorAndroid (Google) Code Review <android-gerrit@google.com>2009-08-07 09:10:15 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2009-08-07 09:10:15 -0700
commit1420bf3ec6008d0823e76cc4f615f509af4e87ed (patch)
tree39d6b2f8d06e704dab9a6edb3bcfa87cfb9b1135 /media
parent0f0021d36b3f94abd5375385d6f5b72222d1f37f (diff)
parent28ad42b58cf9043c5503672714c09a05b798a081 (diff)
downloadframeworks_base-1420bf3ec6008d0823e76cc4f615f509af4e87ed.zip
frameworks_base-1420bf3ec6008d0823e76cc4f615f509af4e87ed.tar.gz
frameworks_base-1420bf3ec6008d0823e76cc4f615f509af4e87ed.tar.bz2
Merge change 9674
* changes: Fix problem in AudioTrack with 8 bit PCM and direct output.
Diffstat (limited to 'media')
-rw-r--r--media/libmedia/AudioTrack.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp
index b147d25..4b9d272 100644
--- a/media/libmedia/AudioTrack.cpp
+++ b/media/libmedia/AudioTrack.cpp
@@ -744,7 +744,7 @@ ssize_t AudioTrack::write(const void* buffer, size_t userSize)
size_t toWrite;
- if (mFormat == AudioSystem::PCM_8_BIT) {
+ if (mFormat == AudioSystem::PCM_8_BIT && !(mFlags & AudioSystem::OUTPUT_FLAG_DIRECT)) {
// Divide capacity by 2 to take expansion into account
toWrite = audioBuffer.size>>1;
// 8 to 16 bit conversion
@@ -753,7 +753,7 @@ ssize_t AudioTrack::write(const void* buffer, size_t userSize)
while(count--) {
*dst++ = (int16_t)(*src++^0x80) << 8;
}
- }else {
+ } else {
toWrite = audioBuffer.size;
memcpy(audioBuffer.i8, src, toWrite);
src += toWrite;
@@ -840,7 +840,7 @@ bool AudioTrack::processAudioBuffer(const sp<AudioTrackThread>& thread)
// Divide buffer size by 2 to take into account the expansion
// due to 8 to 16 bit conversion: the callback must fill only half
// of the destination buffer
- if (mFormat == AudioSystem::PCM_8_BIT) {
+ if (mFormat == AudioSystem::PCM_8_BIT && !(mFlags & AudioSystem::OUTPUT_FLAG_DIRECT)) {
audioBuffer.size >>= 1;
}
@@ -859,7 +859,7 @@ bool AudioTrack::processAudioBuffer(const sp<AudioTrackThread>& thread)
}
if (writtenSize > reqSize) writtenSize = reqSize;
- if (mFormat == AudioSystem::PCM_8_BIT) {
+ if (mFormat == AudioSystem::PCM_8_BIT && !(mFlags & AudioSystem::OUTPUT_FLAG_DIRECT)) {
// 8 to 16 bit conversion
const int8_t *src = audioBuffer.i8 + writtenSize-1;
int count = writtenSize;