diff options
Diffstat (limited to 'services/audioflinger/Threads.cpp')
-rw-r--r-- | services/audioflinger/Threads.cpp | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp index 818bb05..12e09ab 100644 --- a/services/audioflinger/Threads.cpp +++ b/services/audioflinger/Threads.cpp @@ -2803,6 +2803,7 @@ AudioFlinger::MixerThread::MixerThread(const sp<AudioFlinger>& audioFlinger, Aud // create a MonoPipe to connect our submix to FastMixer NBAIO_Format format = mOutputSink->format(); + NBAIO_Format origformat = format; // adjust format to match that of the Fast Mixer format.mFormat = fastMixerFormat; format.mFrameSize = audio_bytes_per_sample(format.mFormat) * format.mChannelCount; @@ -2822,14 +2823,15 @@ AudioFlinger::MixerThread::MixerThread(const sp<AudioFlinger>& audioFlinger, Aud #ifdef TEE_SINK if (mTeeSinkOutputEnabled) { // create a Pipe to archive a copy of FastMixer's output for dumpsys - Pipe *teeSink = new Pipe(mTeeSinkOutputFrames, format); + Pipe *teeSink = new Pipe(mTeeSinkOutputFrames, origformat); + const NBAIO_Format offers2[1] = {origformat}; numCounterOffers = 0; - index = teeSink->negotiate(offers, 1, NULL, numCounterOffers); + index = teeSink->negotiate(offers2, 1, NULL, numCounterOffers); ALOG_ASSERT(index == 0); mTeeSink = teeSink; PipeReader *teeSource = new PipeReader(*teeSink); numCounterOffers = 0; - index = teeSource->negotiate(offers, 1, NULL, numCounterOffers); + index = teeSource->negotiate(offers2, 1, NULL, numCounterOffers); ALOG_ASSERT(index == 0); mTeeSource = teeSource; } @@ -4040,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); @@ -4212,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( @@ -4579,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; |