Loading services/audioflinger/Threads.cpp +8 −11 Original line number Diff line number Diff line Loading @@ -3884,15 +3884,11 @@ AudioFlinger::OffloadThread::OffloadThread(const sp<AudioFlinger>& audioFlinger, : DirectOutputThread(audioFlinger, output, id, device, OFFLOAD), mHwPaused(false), mFlushPending(false), mPausedBytesRemaining(0) mPausedBytesRemaining(0), mPreviousTrack(NULL) { } AudioFlinger::OffloadThread::~OffloadThread() { mPreviousTrack.clear(); } void AudioFlinger::OffloadThread::threadLoop_exit() { if (mFlushPending || mHwPaused) { Loading Loading @@ -3928,7 +3924,7 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::OffloadThread::prepareTr Track* const track = t.get(); audio_track_cblk_t* cblk = track->cblk(); if (mPreviousTrack != NULL) { if (t != mPreviousTrack) { if (t.get() != mPreviousTrack) { // Flush any data still being written from last track mBytesRemaining = 0; if (mPausedBytesRemaining) { Loading @@ -3943,7 +3939,7 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::OffloadThread::prepareTr } } } mPreviousTrack = t; mPreviousTrack = t.get(); bool last = (i == (count - 1)); if (track->isPausing()) { track->setPaused(); Loading Loading @@ -4008,7 +4004,8 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::OffloadThread::prepareTr // has been written ALOGV("OffloadThread: underrun and STOPPING_1 -> draining, STOPPING_2"); track->mState = TrackBase::STOPPING_2; // so presentation completes after drain if (last) { // do not drain if no data was ever sent to HAL (mStandby == true) if (last && !mStandby) { sleepTime = 0; standbyTime = systemTime() + standbyDelay; mixerStatus = MIXER_DRAIN_TRACK; Loading @@ -4022,8 +4019,8 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::OffloadThread::prepareTr } } } else if (track->isStopping_2()) { // Drain has completed, signal presentation complete if (!(mDrainSequence & 1) || !last) { // Drain has completed or we are in standby, signal presentation complete if (!(mDrainSequence & 1) || !last || mStandby) { track->mState = TrackBase::STOPPED; size_t audioHALFrames = (mOutput->stream->get_latency(mOutput->stream)*mSampleRate) / 1000; Loading services/audioflinger/Threads.h +2 −2 Original line number Diff line number Diff line Loading @@ -735,7 +735,7 @@ public: OffloadThread(const sp<AudioFlinger>& audioFlinger, AudioStreamOut* output, audio_io_handle_t id, uint32_t device); virtual ~OffloadThread(); virtual ~OffloadThread() {}; protected: // threadLoop snippets Loading @@ -755,7 +755,7 @@ private: bool mFlushPending; size_t mPausedWriteLength; // length in bytes of write interrupted by pause size_t mPausedBytesRemaining; // bytes still waiting in mixbuffer after resume sp<Track> mPreviousTrack; // used to detect track switch Track *mPreviousTrack; // used to detect track switch }; class AsyncCallbackThread : public Thread { Loading Loading
services/audioflinger/Threads.cpp +8 −11 Original line number Diff line number Diff line Loading @@ -3884,15 +3884,11 @@ AudioFlinger::OffloadThread::OffloadThread(const sp<AudioFlinger>& audioFlinger, : DirectOutputThread(audioFlinger, output, id, device, OFFLOAD), mHwPaused(false), mFlushPending(false), mPausedBytesRemaining(0) mPausedBytesRemaining(0), mPreviousTrack(NULL) { } AudioFlinger::OffloadThread::~OffloadThread() { mPreviousTrack.clear(); } void AudioFlinger::OffloadThread::threadLoop_exit() { if (mFlushPending || mHwPaused) { Loading Loading @@ -3928,7 +3924,7 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::OffloadThread::prepareTr Track* const track = t.get(); audio_track_cblk_t* cblk = track->cblk(); if (mPreviousTrack != NULL) { if (t != mPreviousTrack) { if (t.get() != mPreviousTrack) { // Flush any data still being written from last track mBytesRemaining = 0; if (mPausedBytesRemaining) { Loading @@ -3943,7 +3939,7 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::OffloadThread::prepareTr } } } mPreviousTrack = t; mPreviousTrack = t.get(); bool last = (i == (count - 1)); if (track->isPausing()) { track->setPaused(); Loading Loading @@ -4008,7 +4004,8 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::OffloadThread::prepareTr // has been written ALOGV("OffloadThread: underrun and STOPPING_1 -> draining, STOPPING_2"); track->mState = TrackBase::STOPPING_2; // so presentation completes after drain if (last) { // do not drain if no data was ever sent to HAL (mStandby == true) if (last && !mStandby) { sleepTime = 0; standbyTime = systemTime() + standbyDelay; mixerStatus = MIXER_DRAIN_TRACK; Loading @@ -4022,8 +4019,8 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::OffloadThread::prepareTr } } } else if (track->isStopping_2()) { // Drain has completed, signal presentation complete if (!(mDrainSequence & 1) || !last) { // Drain has completed or we are in standby, signal presentation complete if (!(mDrainSequence & 1) || !last || mStandby) { track->mState = TrackBase::STOPPED; size_t audioHALFrames = (mOutput->stream->get_latency(mOutput->stream)*mSampleRate) / 1000; Loading
services/audioflinger/Threads.h +2 −2 Original line number Diff line number Diff line Loading @@ -735,7 +735,7 @@ public: OffloadThread(const sp<AudioFlinger>& audioFlinger, AudioStreamOut* output, audio_io_handle_t id, uint32_t device); virtual ~OffloadThread(); virtual ~OffloadThread() {}; protected: // threadLoop snippets Loading @@ -755,7 +755,7 @@ private: bool mFlushPending; size_t mPausedWriteLength; // length in bytes of write interrupted by pause size_t mPausedBytesRemaining; // bytes still waiting in mixbuffer after resume sp<Track> mPreviousTrack; // used to detect track switch Track *mPreviousTrack; // used to detect track switch }; class AsyncCallbackThread : public Thread { Loading