diff options
author | Eric Laurent <elaurent@google.com> | 2013-12-20 17:36:01 -0800 |
---|---|---|
committer | Eric Laurent <elaurent@google.com> | 2013-12-20 17:36:01 -0800 |
commit | 13e4c960ea3db03a43e084fbd85d52aa77f7b871 (patch) | |
tree | e65e5e2050066bcb0dfd97c4d9c1097cab369d1c /services | |
parent | a9fa836ddfcb0cc91d1ff9edeeba4c8b8047bd8a (diff) | |
download | frameworks_av-13e4c960ea3db03a43e084fbd85d52aa77f7b871.zip frameworks_av-13e4c960ea3db03a43e084fbd85d52aa77f7b871.tar.gz frameworks_av-13e4c960ea3db03a43e084fbd85d52aa77f7b871.tar.bz2 |
audioflinger: fix static track end detection
If a static track is not a fast track,
prepareTracks_l() must rely on framesReady() to
detect end of buffer and remove the track from the active
track list.
Failing to do so results in the track staying active but
not processed by the mixer because in underrun. This leaves the
mix buffer content uninitialized and causes the effect process
function to accumulate its output onto undefined data.
Bug: 12013676.
Change-Id: Iad72c921fa18d34811abf7d1073890c093a27725
Diffstat (limited to 'services')
-rw-r--r-- | services/audioflinger/Threads.cpp | 11 |
1 files changed, 2 insertions, 9 deletions
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp index 35b8575..01b90a8 100644 --- a/services/audioflinger/Threads.cpp +++ b/services/audioflinger/Threads.cpp @@ -3047,15 +3047,8 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac (mMixerStatusIgnoringFastTracks == MIXER_TRACKS_READY)) { minFrames = desiredFrames; } - // It's not safe to call framesReady() for a static buffer track, so assume it's ready - size_t framesReady; - if (track->sharedBuffer() == 0) { - framesReady = track->framesReady(); - } else if (track->isStopped()) { - framesReady = 0; - } else { - framesReady = 1; - } + + size_t framesReady = track->framesReady(); if ((framesReady >= minFrames) && track->isReady() && !track->isPaused() && !track->isTerminated()) { |