Cleanup DirectOutputThread::mActiveTrack
Rename activeTrack to mActiveTrack.
Release the reference earlier, at the end of threadLoop_mix().
This allows the field to be made private and to
move the declaration from PlaybackThread to DirectOutputThread.
Change-Id: I02be7a254638f7d85e92aaf0002d20ca0092a5c3
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index 032406e..7e7ee3f 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -2043,10 +2043,6 @@
processConfigEvents();
-if (mType == DIRECT) {
- activeTrack.clear();
-}
-
mixerStatus = MIXER_IDLE;
{ // scope for mLock
@@ -2138,10 +2134,6 @@
lockEffectChains_l(effectChains);
}
-if (mType == DIRECT) {
- // For DirectOutputThread, this test is equivalent to "activeTrack != 0"
-}
-
if (CC_LIKELY(mixerStatus == MIXER_TRACKS_READY)) {
threadLoop_mix();
} else {
@@ -2196,10 +2188,6 @@
// same lock.
tracksToRemove.clear();
-// FIXME merge these
-if (mType == DIRECT) {
- activeTrack.clear();
-}
// FIXME I don't understand the need for this here;
// it was in the original code but maybe the
// assignment in saveOutputTracks() makes this unnecessary?
@@ -2918,7 +2906,7 @@
// reset retry count
track->mRetryCount = kMaxTrackRetriesDirect;
- activeTrack = t;
+ mActiveTrack = t;
mixerStatus_ = MIXER_TRACKS_READY;
} else {
//ALOGV("track %d u=%08x, s=%08x [NOT READY]", track->name(), cblk->user, cblk->server);
@@ -2968,7 +2956,7 @@
// output audio to hardware
while (frameCount) {
buffer.frameCount = frameCount;
- activeTrack->getNextBuffer(&buffer);
+ mActiveTrack->getNextBuffer(&buffer);
if (CC_UNLIKELY(buffer.raw == NULL)) {
memset(curBuf, 0, frameCount * mFrameSize);
break;
@@ -2976,10 +2964,11 @@
memcpy(curBuf, buffer.raw, buffer.frameCount * mFrameSize);
frameCount -= buffer.frameCount;
curBuf += buffer.frameCount * mFrameSize;
- activeTrack->releaseBuffer(&buffer);
+ mActiveTrack->releaseBuffer(&buffer);
}
sleepTime = 0;
standbyTime = systemTime() + standbyDelay;
+ mActiveTrack.clear();
applyVolume();
}
diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h
index e26466f..d91cd60 100644
--- a/services/audioflinger/AudioFlinger.h
+++ b/services/audioflinger/AudioFlinger.h
@@ -973,8 +973,6 @@
mixer_state mPrevMixerStatus; // previous status returned by prepareTracks_l()
// DIRECT only
nsecs_t standbyDelay;
- // activeTrack was local to the while !exitingPending loop
- sp<Track> activeTrack;
// DUPLICATING only
uint32_t writeFrames;
};
@@ -1046,6 +1044,9 @@
private:
void applyVolume(); // FIXME inline into threadLoop_mix()
+
+ // prepareTracks_l() tells threadLoop_mix() the name of the single active track
+ sp<Track> mActiveTrack;
};
class DuplicatingThread : public MixerThread {