diff options
author | Eric Laurent <elaurent@google.com> | 2013-09-26 22:58:26 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2013-09-26 22:58:26 +0000 |
commit | 0adc67dfc5cedb211c36f06849681a60a32f5805 (patch) | |
tree | 699e80ab445a2c03b399477bf4f697f5ed8d315c /services | |
parent | 1da3b602130d71ac3bff1a1fdecdc5e0d7b9d701 (diff) | |
parent | 4de95592980dba88a35b3dc8f3fd045588387a4f (diff) | |
download | frameworks_av-0adc67dfc5cedb211c36f06849681a60a32f5805.zip frameworks_av-0adc67dfc5cedb211c36f06849681a60a32f5805.tar.gz frameworks_av-0adc67dfc5cedb211c36f06849681a60a32f5805.tar.bz2 |
Merge "audioflinger: fix crash when starting offload thread" into klp-dev
Diffstat (limited to 'services')
-rw-r--r-- | services/audioflinger/Threads.cpp | 14 | ||||
-rw-r--r-- | services/audioflinger/Threads.h | 12 |
2 files changed, 13 insertions, 13 deletions
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp index b771e3b..2d9d485 100644 --- a/services/audioflinger/Threads.cpp +++ b/services/audioflinger/Threads.cpp @@ -1594,6 +1594,7 @@ void AudioFlinger::PlaybackThread::readOutputParameters() if (mOutput->stream->set_callback(mOutput->stream, AudioFlinger::PlaybackThread::asyncCallback, this) == 0) { mUseAsyncWrite = true; + mCallbackThread = new AudioFlinger::AsyncCallbackThread(this); } } @@ -3746,9 +3747,9 @@ void AudioFlinger::DirectOutputThread::cacheParameters_l() // ---------------------------------------------------------------------------- AudioFlinger::AsyncCallbackThread::AsyncCallbackThread( - const sp<AudioFlinger::OffloadThread>& offloadThread) + const wp<AudioFlinger::PlaybackThread>& playbackThread) : Thread(false /*canCallJava*/), - mOffloadThread(offloadThread), + mPlaybackThread(playbackThread), mWriteAckSequence(0), mDrainSequence(0) { @@ -3783,13 +3784,13 @@ bool AudioFlinger::AsyncCallbackThread::threadLoop() mDrainSequence &= ~1; } { - sp<AudioFlinger::OffloadThread> offloadThread = mOffloadThread.promote(); - if (offloadThread != 0) { + sp<AudioFlinger::PlaybackThread> playbackThread = mPlaybackThread.promote(); + if (playbackThread != 0) { if (writeAckSequence & 1) { - offloadThread->resetWriteBlocked(writeAckSequence >> 1); + playbackThread->resetWriteBlocked(writeAckSequence >> 1); } if (drainSequence & 1) { - offloadThread->resetDraining(drainSequence >> 1); + playbackThread->resetDraining(drainSequence >> 1); } } } @@ -3847,7 +3848,6 @@ AudioFlinger::OffloadThread::OffloadThread(const sp<AudioFlinger>& audioFlinger, mHwPaused(false), mPausedBytesRemaining(0) { - mCallbackThread = new AudioFlinger::AsyncCallbackThread(this); } AudioFlinger::OffloadThread::~OffloadThread() diff --git a/services/audioflinger/Threads.h b/services/audioflinger/Threads.h index 443b8d7..241424f 100644 --- a/services/audioflinger/Threads.h +++ b/services/audioflinger/Threads.h @@ -759,7 +759,7 @@ private: class AsyncCallbackThread : public Thread { public: - AsyncCallbackThread(const sp<OffloadThread>& offloadThread); + AsyncCallbackThread(const wp<PlaybackThread>& playbackThread); virtual ~AsyncCallbackThread(); @@ -776,17 +776,17 @@ public: void resetDraining(); private: - wp<OffloadThread> mOffloadThread; + const wp<PlaybackThread> mPlaybackThread; // mWriteAckSequence corresponds to the last write sequence passed by the offload thread via // setWriteBlocked(). The sequence is shifted one bit to the left and the lsb is used // to indicate that the callback has been received via resetWriteBlocked() - uint32_t mWriteAckSequence; + uint32_t mWriteAckSequence; // mDrainSequence corresponds to the last drain sequence passed by the offload thread via // setDraining(). The sequence is shifted one bit to the left and the lsb is used // to indicate that the callback has been received via resetDraining() - uint32_t mDrainSequence; - Condition mWaitWorkCV; - Mutex mLock; + uint32_t mDrainSequence; + Condition mWaitWorkCV; + Mutex mLock; }; class DuplicatingThread : public MixerThread { |