diff options
Diffstat (limited to 'services/audioflinger/Threads.cpp')
-rw-r--r-- | services/audioflinger/Threads.cpp | 63 |
1 files changed, 32 insertions, 31 deletions
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp index 8a60b2a..44763a6 100644 --- a/services/audioflinger/Threads.cpp +++ b/services/audioflinger/Threads.cpp @@ -4244,48 +4244,49 @@ bool AudioFlinger::RecordThread::threadLoop() acquireWakeLock_l(); continue; } + if (activeTrack->isTerminated()) { removeTrack_l(activeTrack); mActiveTrack.clear(); - } else { - switch (activeTrack->mState) { - case TrackBase::PAUSING: - standby(); + continue; + } + + switch (activeTrack->mState) { + case TrackBase::PAUSING: + standby(); + mActiveTrack.clear(); + mStartStopCond.broadcast(); + doSleep = true; + continue; + + case TrackBase::RESUMING: + mStandby = false; + if (mReqChannelCount != activeTrack->channelCount()) { mActiveTrack.clear(); mStartStopCond.broadcast(); - break; - - case TrackBase::RESUMING: - if (mReqChannelCount != activeTrack->channelCount()) { + continue; + } + if (readOnce) { + mStartStopCond.broadcast(); + // record start succeeds only if first read from audio input succeeds + if (mBytesRead < 0) { mActiveTrack.clear(); - mStartStopCond.broadcast(); - } else if (readOnce) { - // record start succeeds only if first read from audio input - // succeeds - if (mBytesRead >= 0) { - activeTrack->mState = TrackBase::ACTIVE; - } else { - mActiveTrack.clear(); - } - mStartStopCond.broadcast(); + continue; } - mStandby = false; - break; - - case TrackBase::ACTIVE: - break; + activeTrack->mState = TrackBase::ACTIVE; + } + break; - case TrackBase::IDLE: - break; + case TrackBase::ACTIVE: + break; - default: - LOG_FATAL("Unexpected activeTrack->mState %d", activeTrack->mState); - } + case TrackBase::IDLE: + break; + default: + LOG_FATAL("Unexpected activeTrack->mState %d", activeTrack->mState); } - if (mActiveTrack == 0) { - continue; - } + lockEffectChains_l(effectChains); } |