Loading services/audioflinger/FastMixer.cpp +15 −3 Original line number Original line Diff line number Diff line Loading @@ -334,6 +334,11 @@ void FastMixer::onWork() if ((command & FastMixerState::MIX) && (mMixer != NULL) && mIsWarm) { if ((command & FastMixerState::MIX) && (mMixer != NULL) && mIsWarm) { ALOG_ASSERT(mMixerBuffer != NULL); ALOG_ASSERT(mMixerBuffer != NULL); // AudioMixer::mState.enabledTracks is undefined if mState.hook == process__validate, // so we keep a side copy of enabledTracks bool anyEnabledTracks = false; // for each track, update volume and check for underrun // for each track, update volume and check for underrun unsigned currentTrackMask = current->mTrackMask; unsigned currentTrackMask = current->mTrackMask; while (currentTrackMask != 0) { while (currentTrackMask != 0) { Loading Loading @@ -392,11 +397,13 @@ void FastMixer::onWork() underruns.mBitFields.mPartial++; underruns.mBitFields.mPartial++; underruns.mBitFields.mMostRecent = UNDERRUN_PARTIAL; underruns.mBitFields.mMostRecent = UNDERRUN_PARTIAL; mMixer->enable(name); mMixer->enable(name); anyEnabledTracks = true; } } } else { } else { underruns.mBitFields.mFull++; underruns.mBitFields.mFull++; underruns.mBitFields.mMostRecent = UNDERRUN_FULL; underruns.mBitFields.mMostRecent = UNDERRUN_FULL; mMixer->enable(name); mMixer->enable(name); anyEnabledTracks = true; } } ftDump->mUnderruns = underruns; ftDump->mUnderruns = underruns; ftDump->mFramesReady = framesReady; ftDump->mFramesReady = framesReady; Loading @@ -407,9 +414,14 @@ void FastMixer::onWork() pts = AudioBufferProvider::kInvalidPTS; pts = AudioBufferProvider::kInvalidPTS; } } if (anyEnabledTracks) { // process() is CPU-bound // process() is CPU-bound mMixer->process(pts); mMixer->process(pts); mMixerBufferState = MIXED; mMixerBufferState = MIXED; } else if (mMixerBufferState != ZEROED) { mMixerBufferState = UNDEFINED; } } else if (mMixerBufferState == MIXED) { } else if (mMixerBufferState == MIXED) { mMixerBufferState = UNDEFINED; mMixerBufferState = UNDEFINED; } } Loading Loading
services/audioflinger/FastMixer.cpp +15 −3 Original line number Original line Diff line number Diff line Loading @@ -334,6 +334,11 @@ void FastMixer::onWork() if ((command & FastMixerState::MIX) && (mMixer != NULL) && mIsWarm) { if ((command & FastMixerState::MIX) && (mMixer != NULL) && mIsWarm) { ALOG_ASSERT(mMixerBuffer != NULL); ALOG_ASSERT(mMixerBuffer != NULL); // AudioMixer::mState.enabledTracks is undefined if mState.hook == process__validate, // so we keep a side copy of enabledTracks bool anyEnabledTracks = false; // for each track, update volume and check for underrun // for each track, update volume and check for underrun unsigned currentTrackMask = current->mTrackMask; unsigned currentTrackMask = current->mTrackMask; while (currentTrackMask != 0) { while (currentTrackMask != 0) { Loading Loading @@ -392,11 +397,13 @@ void FastMixer::onWork() underruns.mBitFields.mPartial++; underruns.mBitFields.mPartial++; underruns.mBitFields.mMostRecent = UNDERRUN_PARTIAL; underruns.mBitFields.mMostRecent = UNDERRUN_PARTIAL; mMixer->enable(name); mMixer->enable(name); anyEnabledTracks = true; } } } else { } else { underruns.mBitFields.mFull++; underruns.mBitFields.mFull++; underruns.mBitFields.mMostRecent = UNDERRUN_FULL; underruns.mBitFields.mMostRecent = UNDERRUN_FULL; mMixer->enable(name); mMixer->enable(name); anyEnabledTracks = true; } } ftDump->mUnderruns = underruns; ftDump->mUnderruns = underruns; ftDump->mFramesReady = framesReady; ftDump->mFramesReady = framesReady; Loading @@ -407,9 +414,14 @@ void FastMixer::onWork() pts = AudioBufferProvider::kInvalidPTS; pts = AudioBufferProvider::kInvalidPTS; } } if (anyEnabledTracks) { // process() is CPU-bound // process() is CPU-bound mMixer->process(pts); mMixer->process(pts); mMixerBufferState = MIXED; mMixerBufferState = MIXED; } else if (mMixerBufferState != ZEROED) { mMixerBufferState = UNDEFINED; } } else if (mMixerBufferState == MIXED) { } else if (mMixerBufferState == MIXED) { mMixerBufferState = UNDEFINED; mMixerBufferState = UNDEFINED; } } Loading