diff options
Diffstat (limited to 'media/jni')
-rw-r--r-- | media/jni/soundpool/SoundPool.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/media/jni/soundpool/SoundPool.cpp b/media/jni/soundpool/SoundPool.cpp index 4d2e048..70fba7e 100644 --- a/media/jni/soundpool/SoundPool.cpp +++ b/media/jni/soundpool/SoundPool.cpp @@ -500,7 +500,8 @@ void SoundChannel::play(const sp<Sample>& sample, int nextChannelID, float leftV } int numChannels = sample->numChannels(); uint32_t sampleRate = uint32_t(float(sample->sampleRate()) * rate + 0.5); - uint32_t bufferFrames = (afFrameCount * sampleRate) / afSampleRate; + uint32_t totalFrames = (kDefaultBufferCount * afFrameCount * sampleRate) / afSampleRate; + uint32_t bufferFrames = (totalFrames + (kDefaultBufferCount - 1)) / kDefaultBufferCount; uint32_t frameCount = 0; if (loop) { @@ -509,13 +510,13 @@ void SoundChannel::play(const sp<Sample>& sample, int nextChannelID, float leftV #ifndef USE_SHARED_MEM_BUFFER // Ensure minimum audio buffer size in case of short looped sample - if(frameCount < kDefaultBufferCount * bufferFrames) { - frameCount = kDefaultBufferCount * bufferFrames; + if(frameCount < totalFrames) { + frameCount = totalFrames; } #endif AudioTrack* newTrack; - + // mToggle toggles each time a track is started on a given channel. // The toggle is concatenated with the SoundChannel address and passed to AudioTrack // as callback user data. This enables the detection of callbacks received from the old @@ -524,7 +525,7 @@ void SoundChannel::play(const sp<Sample>& sample, int nextChannelID, float leftV unsigned long toggle = mToggle ^ 1; void *userData = (void *)((unsigned long)this | toggle); uint32_t channels = (numChannels == 2) ? AudioSystem::CHANNEL_OUT_STEREO : AudioSystem::CHANNEL_OUT_MONO; - + #ifdef USE_SHARED_MEM_BUFFER newTrack = new AudioTrack(streamType, sampleRate, sample->format(), channels, sample->getIMemory(), 0, callback, userData); |