diff options
author | 2016-07-21 18:17:15 -0700 | |
---|---|---|
committer | 2016-07-22 11:31:25 -0700 | |
commit | 197e47979a5c76d817d40039678afdd4f68c2a27 (patch) | |
tree | eb4a7470dbd59317e87701b32b014370a1f8811a | |
parent | e86da3bc62e2ec650d69477ab7655aa7255be473 (diff) |
bootanimation: fix glitchy playback
Do not use low latency playback mode to be more
robust against scheduling problems during boot phase.
Also:
- remove unused reverb on output mix
- fix WAV file parser.
Bug: 30277818
Change-Id: I1e15d3003a25c93d4995006885b32a754d17343f
-rw-r--r-- | cmds/bootanimation/audioplay.cpp | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/cmds/bootanimation/audioplay.cpp b/cmds/bootanimation/audioplay.cpp index dbb76dcd27cd..4983b9ac4236 100644 --- a/cmds/bootanimation/audioplay.cpp +++ b/cmds/bootanimation/audioplay.cpp @@ -20,6 +20,7 @@ #include "audioplay.h" #define CHATTY ALOGD +#define LOG_TAG "audioplay" #include <string.h> @@ -114,10 +115,8 @@ bool createEngine() { } (void)result; - // create output mix, with environmental reverb specified as a non-required interface - const SLInterfaceID ids[1] = {SL_IID_ENVIRONMENTALREVERB}; - const SLboolean req[1] = {SL_BOOLEAN_FALSE}; - result = (*engineEngine)->CreateOutputMix(engineEngine, &outputMixObject, 1, ids, req); + // create output mix + result = (*engineEngine)->CreateOutputMix(engineEngine, &outputMixObject, 0, NULL, NULL); if (result != SL_RESULT_SUCCESS) { ALOGE("sl engine CreateOutputMix failed with result %d", result); return false; @@ -183,6 +182,14 @@ bool createBufferQueueAudioPlayer(const ChunkFormat* chunkFormat) { ALOGE("SetConfiguration failed with result %d", result); return false; } + // use normal performance mode as low latency is not needed. This is not mandatory so + // do not bail if we fail + SLuint32 performanceMode = SL_ANDROID_PERFORMANCE_NONE; + result = (*playerConfig)->SetConfiguration( + playerConfig, SL_ANDROID_KEY_PERFORMANCE_MODE, &performanceMode, sizeof(SLuint32)); + ALOGW_IF(result != SL_RESULT_SUCCESS, + "could not set performance mode on player, error %d", result); + (void)result; // realize the player result = (*bqPlayerObject)->Realize(bqPlayerObject, SL_BOOLEAN_FALSE); @@ -264,6 +271,7 @@ bool parseClipBuf(const uint8_t* clipBuf, int clipBufSize, const ChunkFormat** o break; case ID_DATA: /* Stop looking for chunks */ + *oSoundBufSize = chunkHeader->sz; endLoop = true; break; default: @@ -317,7 +325,8 @@ bool playClip(const uint8_t* buf, int size) { return false; } - CHATTY("playClip on player %p: buf=%p size=%d", bqPlayerBufferQueue, buf, size); + CHATTY("playClip on player %p: buf=%p size=%d nextSize %d", + bqPlayerBufferQueue, buf, size, nextSize); if (nextSize > 0) { // here we only enqueue one buffer because it is a long clip, |