Merge "Add comments about sequence for setting parameters"
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index eda8c01..8deb2fe 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -310,10 +310,10 @@
}
result.append("Global session refs:\n");
- result.append(" session pid cnt\n");
+ result.append(" session pid count\n");
for (size_t i = 0; i < mAudioSessionRefs.size(); i++) {
AudioSessionRef *r = mAudioSessionRefs[i];
- snprintf(buffer, SIZE, " %7d %3d %3d\n", r->sessionid, r->pid, r->cnt);
+ snprintf(buffer, SIZE, " %7d %3d %3d\n", r->mSessionid, r->mPid, r->mCnt);
result.append(buffer);
}
write(fd, result.string(), result.size());
@@ -1036,9 +1036,9 @@
bool removed = false;
for (size_t i = 0; i< num; ) {
AudioSessionRef *ref = mAudioSessionRefs.itemAt(i);
- ALOGV(" pid %d @ %d", ref->pid, i);
- if (ref->pid == pid) {
- ALOGV(" removing entry for pid %d session %d", pid, ref->sessionid);
+ ALOGV(" pid %d @ %d", ref->mPid, i);
+ if (ref->mPid == pid) {
+ ALOGV(" removing entry for pid %d session %d", pid, ref->mSessionid);
mAudioSessionRefs.removeAt(i);
delete ref;
removed = true;
@@ -1993,12 +1993,8 @@
bool AudioFlinger::PlaybackThread::threadLoop()
{
- // MIXER || DUPLICATING
Vector< sp<Track> > tracksToRemove;
- // DIRECT
- sp<Track> trackToRemove;
-
standbyTime = systemTime();
mixBufferSize = mFrameCount * mFrameSize;
@@ -2142,17 +2138,11 @@
}
}
-// FIXME merge these
-if (mType == MIXER || mType == DUPLICATING) {
mixerStatus = prepareTracks_l(&tracksToRemove);
-}
-if (mType == DIRECT) {
- mixerStatus = threadLoop_prepareTracks_l(trackToRemove);
// see FIXME in AudioFlinger.h
if (mixerStatus == MIXER_CONTINUE) {
continue;
}
-}
// prevent any changes in effect chain list and in each effect chain
// during mixing and effect process as the audio buffers could be deleted
@@ -2224,17 +2214,13 @@
// finally let go of removed track(s), without the lock held
// since we can't guarantee the destructors won't acquire that
// same lock.
+ tracksToRemove.clear();
// FIXME merge these
-if (mType == MIXER) {
- tracksToRemove.clear();
-}
if (mType == DIRECT) {
- trackToRemove.clear();
activeTrack.clear();
}
if (mType == DUPLICATING) {
- tracksToRemove.clear();
outputTracks.clear();
}
@@ -2852,10 +2838,12 @@
mRightVolShort = rightVol;
}
-AudioFlinger::PlaybackThread::mixer_state AudioFlinger::DirectOutputThread::threadLoop_prepareTracks_l(
- sp<Track>& trackToRemove
+AudioFlinger::PlaybackThread::mixer_state AudioFlinger::DirectOutputThread::prepareTracks_l(
+ Vector< sp<Track> > *tracksToRemove
)
{
+ sp<Track> trackToRemove;
+
// FIXME Temporarily renamed to avoid confusion with the member "mixerStatus"
mixer_state mixerStatus_ = MIXER_IDLE;
@@ -2973,8 +2961,10 @@
}
}
+ // FIXME merge this with similar code for removing multiple tracks
// remove all the tracks that need to be...
if (CC_UNLIKELY(trackToRemove != 0)) {
+ tracksToRemove->add(trackToRemove);
mActiveTracks.remove(trackToRemove);
if (!mEffectChains.isEmpty()) {
ALOGV("stopping track on chain %p for session Id: %d", effectChains[0].get(),
@@ -5699,9 +5689,9 @@
size_t num = mAudioSessionRefs.size();
for (size_t i = 0; i< num; i++) {
AudioSessionRef *ref = mAudioSessionRefs.editItemAt(i);
- if (ref->sessionid == audioSession && ref->pid == caller) {
- ref->cnt++;
- ALOGV(" incremented refcount to %d", ref->cnt);
+ if (ref->mSessionid == audioSession && ref->mPid == caller) {
+ ref->mCnt++;
+ ALOGV(" incremented refcount to %d", ref->mCnt);
return;
}
}
@@ -5717,10 +5707,10 @@
size_t num = mAudioSessionRefs.size();
for (size_t i = 0; i< num; i++) {
AudioSessionRef *ref = mAudioSessionRefs.itemAt(i);
- if (ref->sessionid == audioSession && ref->pid == caller) {
- ref->cnt--;
- ALOGV(" decremented refcount to %d", ref->cnt);
- if (ref->cnt == 0) {
+ if (ref->mSessionid == audioSession && ref->mPid == caller) {
+ ref->mCnt--;
+ ALOGV(" decremented refcount to %d", ref->mCnt);
+ if (ref->mCnt == 0) {
mAudioSessionRefs.removeAt(i);
delete ref;
purgeStaleEffects_l();
@@ -5765,9 +5755,9 @@
bool found = false;
for (size_t k = 0; k < numsessionrefs; k++) {
AudioSessionRef *ref = mAudioSessionRefs.itemAt(k);
- if (ref->sessionid == sessionid) {
+ if (ref->mSessionid == sessionid) {
ALOGV(" session %d still exists for %d with %d refs",
- sessionid, ref->pid, ref->cnt);
+ sessionid, ref->mPid, ref->mCnt);
found = true;
break;
}
diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h
index 60d78c8..11ac52b 100644
--- a/services/audioflinger/AudioFlinger.h
+++ b/services/audioflinger/AudioFlinger.h
@@ -608,7 +608,7 @@
// standby mode does not have an enum value
// suspend by audio policy manager is orthogonal to mixer state
#if 1
- // FIXME remove these hacks for threadLoop_prepareTracks_l
+ // FIXME remove this hack for prepareTracks_l()
, MIXER_CONTINUE // "continue;"
#endif
};
@@ -841,12 +841,11 @@
// Non-trivial for DIRECT only
virtual void applyVolume() { }
- // FIXME merge these
- // Non-trivial for MIXER and DUPLICATING only
- virtual mixer_state prepareTracks_l(Vector< sp<Track> > *tracksToRemove) { return MIXER_IDLE; }
- // Non-trivial for DIRECT only
- virtual mixer_state threadLoop_prepareTracks_l(sp<Track>& trackToRemove)
- { return MIXER_IDLE; }
+ // prepareTracks_l reads and writes mActiveTracks, and also returns the
+ // pending set of tracks to remove via Vector 'tracksToRemove'. The caller is
+ // responsible for clearing or destroying this Vector later on, when it
+ // is safe to do so. That will drop the final ref count and destroy the tracks.
+ virtual mixer_state prepareTracks_l(Vector< sp<Track> > *tracksToRemove) = 0;
public:
@@ -994,10 +993,6 @@
virtual status_t dumpInternals(int fd, const Vector<String16>& args);
protected:
- // prepareTracks_l reads and writes mActiveTracks, and also returns the
- // pending set of tracks to remove via Vector 'tracksToRemove'. The caller is
- // responsible for clearing or destroying this Vector later on, when it
- // is safe to do so. That will drop the final ref count and destroy the tracks.
virtual mixer_state prepareTracks_l(Vector< sp<Track> > *tracksToRemove);
virtual int getTrackName_l();
virtual void deleteTrackName_l(int name);
@@ -1030,7 +1025,7 @@
virtual uint32_t suspendSleepTimeUs();
// threadLoop snippets
- virtual mixer_state threadLoop_prepareTracks_l(sp<Track>& trackToRemove);
+ virtual mixer_state prepareTracks_l(Vector< sp<Track> > *tracksToRemove);
virtual void threadLoop_mix();
virtual void threadLoop_sleepTime();
virtual void applyVolume();
@@ -1596,12 +1591,11 @@
// for mAudioSessionRefs only
struct AudioSessionRef {
- // FIXME rename parameter names when fields get "m" prefix
- AudioSessionRef(int sessionid_, pid_t pid_) :
- sessionid(sessionid_), pid(pid_), cnt(1) {}
- const int sessionid;
- const pid_t pid;
- int cnt;
+ AudioSessionRef(int sessionid, pid_t pid) :
+ mSessionid(sessionid), mPid(pid), mCnt(1) {}
+ const int mSessionid;
+ const pid_t mPid;
+ int mCnt;
};
friend class RecordThread;