diff options
author | Eric Laurent <elaurent@google.com> | 2012-05-15 15:41:39 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-05-15 15:41:39 -0700 |
commit | 5d3d12bf58da5b48b1edb7c20b5d1edec0773f75 (patch) | |
tree | 6e66fc56fa5de92d66e21fb2fb9afe5f785051bb | |
parent | 18793d77792e12f5f63e67f721bc238b6dc497a1 (diff) | |
parent | 44a957f06400a338e7af20b3d16c4c4ae22a673c (diff) | |
download | frameworks_av-5d3d12bf58da5b48b1edb7c20b5d1edec0773f75.zip frameworks_av-5d3d12bf58da5b48b1edb7c20b5d1edec0773f75.tar.gz frameworks_av-5d3d12bf58da5b48b1edb7c20b5d1edec0773f75.tar.bz2 |
Merge "Fix static track activity ref counting" into jb-dev
-rw-r--r-- | services/audioflinger/AudioFlinger.cpp | 16 | ||||
-rw-r--r-- | services/audioflinger/AudioFlinger.h | 2 |
2 files changed, 16 insertions, 2 deletions
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp index 5acf29a..75e8cca 100644 --- a/services/audioflinger/AudioFlinger.cpp +++ b/services/audioflinger/AudioFlinger.cpp @@ -2136,6 +2136,21 @@ bool AudioFlinger::PlaybackThread::isValidSyncEvent(const sp<SyncEvent>& event) return false; } +void AudioFlinger::PlaybackThread::threadLoop_removeTracks(const Vector< sp<Track> >& tracksToRemove) +{ + size_t count = tracksToRemove.size(); + if (CC_UNLIKELY(count)) { + for (size_t i = 0 ; i < count ; i++) { + const sp<Track>& track = tracksToRemove.itemAt(i); + if ((track->sharedBuffer() != 0) && + (track->mState == TrackBase::ACTIVE || track->mState == TrackBase::RESUMING)) { + AudioSystem::stopOutput(mId, track->streamType(), track->sessionId()); + } + } + } + +} + // ---------------------------------------------------------------------------- AudioFlinger::MixerThread::MixerThread(const sp<AudioFlinger>& audioFlinger, AudioStreamOut* output, @@ -2588,7 +2603,6 @@ if (mType == DUPLICATING) { return false; } -// returns (via tracksToRemove) a set of tracks to remove. void AudioFlinger::MixerThread::threadLoop_removeTracks(const Vector< sp<Track> >& tracksToRemove) { PlaybackThread::threadLoop_removeTracks(tracksToRemove); diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h index d69cec4..8820a92 100644 --- a/services/audioflinger/AudioFlinger.h +++ b/services/audioflinger/AudioFlinger.h @@ -950,7 +950,7 @@ protected: virtual void threadLoop_sleepTime() = 0; virtual void threadLoop_write(); virtual void threadLoop_standby(); - virtual void threadLoop_removeTracks(const Vector< sp<Track> >& tracksToRemove) { } + virtual void threadLoop_removeTracks(const Vector< sp<Track> >& tracksToRemove); // prepareTracks_l reads and writes mActiveTracks, and returns // the pending set of tracks to remove via Vector 'tracksToRemove'. The caller |