Loading services/audioflinger/Threads.cpp +10 −1 Original line number Diff line number Diff line Loading @@ -4042,6 +4042,9 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::DirectOutputThread::prep track->mState = TrackBase::STOPPED; } if (track->isStopped()) { if (track->mState == TrackBase::FLUSHED) { flushHw_l(); } track->reset(); } tracksToRemove->add(track); Loading Loading @@ -4214,6 +4217,12 @@ void AudioFlinger::DirectOutputThread::cacheParameters_l() } } void AudioFlinger::DirectOutputThread::flushHw_l() { if (mOutput->stream->flush != NULL) mOutput->stream->flush(mOutput->stream); } // ---------------------------------------------------------------------------- AudioFlinger::AsyncCallbackThread::AsyncCallbackThread( Loading Loading @@ -4581,7 +4590,7 @@ bool AudioFlinger::OffloadThread::waitingAsyncCallback() void AudioFlinger::OffloadThread::flushHw_l() { mOutput->stream->flush(mOutput->stream); DirectOutputThread::flushHw_l(); // Flush anything still waiting in the mixbuffer mCurrentWriteLength = 0; mBytesRemaining = 0; Loading services/audioflinger/Threads.h +2 −3 Original line number Diff line number Diff line Loading @@ -894,6 +894,7 @@ public: virtual bool checkForNewParameter_l(const String8& keyValuePair, status_t& status); virtual void flushHw_l(); protected: virtual int getTrackName_l(audio_channel_mask_t channelMask, Loading Loading @@ -929,6 +930,7 @@ public: OffloadThread(const sp<AudioFlinger>& audioFlinger, AudioStreamOut* output, audio_io_handle_t id, uint32_t device); virtual ~OffloadThread() {}; virtual void flushHw_l(); protected: // threadLoop snippets Loading @@ -940,9 +942,6 @@ protected: virtual bool shouldStandby_l(); virtual void onAddNewTrack_l(); private: void flushHw_l(); private: bool mHwPaused; bool mFlushPending; Loading services/audioflinger/Tracks.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -824,6 +824,10 @@ void AudioFlinger::PlaybackThread::Track::flush() // remove from active track list, reset(), and trigger presentation complete if (playbackThread->mActiveTracks.indexOf(this) < 0) { reset(); if (thread->type() == ThreadBase::DIRECT) { DirectOutputThread *t = (DirectOutputThread *)playbackThread; t->flushHw_l(); } } } // Prevent flush being lost if the track is flushed and then resumed Loading Loading
services/audioflinger/Threads.cpp +10 −1 Original line number Diff line number Diff line Loading @@ -4042,6 +4042,9 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::DirectOutputThread::prep track->mState = TrackBase::STOPPED; } if (track->isStopped()) { if (track->mState == TrackBase::FLUSHED) { flushHw_l(); } track->reset(); } tracksToRemove->add(track); Loading Loading @@ -4214,6 +4217,12 @@ void AudioFlinger::DirectOutputThread::cacheParameters_l() } } void AudioFlinger::DirectOutputThread::flushHw_l() { if (mOutput->stream->flush != NULL) mOutput->stream->flush(mOutput->stream); } // ---------------------------------------------------------------------------- AudioFlinger::AsyncCallbackThread::AsyncCallbackThread( Loading Loading @@ -4581,7 +4590,7 @@ bool AudioFlinger::OffloadThread::waitingAsyncCallback() void AudioFlinger::OffloadThread::flushHw_l() { mOutput->stream->flush(mOutput->stream); DirectOutputThread::flushHw_l(); // Flush anything still waiting in the mixbuffer mCurrentWriteLength = 0; mBytesRemaining = 0; Loading
services/audioflinger/Threads.h +2 −3 Original line number Diff line number Diff line Loading @@ -894,6 +894,7 @@ public: virtual bool checkForNewParameter_l(const String8& keyValuePair, status_t& status); virtual void flushHw_l(); protected: virtual int getTrackName_l(audio_channel_mask_t channelMask, Loading Loading @@ -929,6 +930,7 @@ public: OffloadThread(const sp<AudioFlinger>& audioFlinger, AudioStreamOut* output, audio_io_handle_t id, uint32_t device); virtual ~OffloadThread() {}; virtual void flushHw_l(); protected: // threadLoop snippets Loading @@ -940,9 +942,6 @@ protected: virtual bool shouldStandby_l(); virtual void onAddNewTrack_l(); private: void flushHw_l(); private: bool mHwPaused; bool mFlushPending; Loading
services/audioflinger/Tracks.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -824,6 +824,10 @@ void AudioFlinger::PlaybackThread::Track::flush() // remove from active track list, reset(), and trigger presentation complete if (playbackThread->mActiveTracks.indexOf(this) < 0) { reset(); if (thread->type() == ThreadBase::DIRECT) { DirectOutputThread *t = (DirectOutputThread *)playbackThread; t->flushHw_l(); } } } // Prevent flush being lost if the track is flushed and then resumed Loading