Loading services/audioflinger/AudioFlinger.cpp +11 −34 Original line number Diff line number Diff line Loading @@ -2688,7 +2688,6 @@ bool AudioFlinger::DirectOutputThread::threadLoop() sp<Track> trackToRemove; sp<Track> activeTrack; nsecs_t standbyTime = systemTime(); int8_t *curBuf; size_t mixBufferSize = mFrameCount*mFrameSize; uint32_t activeSleepTime = activeSleepTimeUs(); uint32_t idleSleepTime = idleSleepTimeUs(); Loading Loading @@ -2892,7 +2891,7 @@ bool AudioFlinger::DirectOutputThread::threadLoop() if (CC_LIKELY(mixerStatus == MIXER_TRACKS_READY)) { AudioBufferProvider::Buffer buffer; size_t frameCount = mFrameCount; curBuf = (int8_t *)mMixBuffer; int8_t *curBuf = (int8_t *)mMixBuffer; // output audio to hardware while (frameCount) { buffer.frameCount = frameCount; Loading Loading @@ -3254,7 +3253,7 @@ void AudioFlinger::DuplicatingThread::removeOutputTrack(MixerThread *thread) { Mutex::Autolock _l(mLock); for (size_t i = 0; i < mOutputTracks.size(); i++) { if (mOutputTracks[i]->thread() == (ThreadBase *)thread) { if (mOutputTracks[i]->thread() == thread) { mOutputTracks[i]->destroy(); mOutputTracks.removeAt(i); updateWaitTime(); Loading Loading @@ -4502,10 +4501,9 @@ status_t AudioFlinger::PlaybackThread::OutputTrack::obtainBuffer(AudioBufferProv void AudioFlinger::PlaybackThread::OutputTrack::clearBufferQueue() { size_t size = mBufferQueue.size(); Buffer *pBuffer; for (size_t i = 0; i < size; i++) { pBuffer = mBufferQueue.itemAt(i); Buffer *pBuffer = mBufferQueue.itemAt(i); delete [] pBuffer->mBuffer; delete pBuffer; } Loading Loading @@ -4577,10 +4575,8 @@ AudioFlinger::NotificationClient::~NotificationClient() void AudioFlinger::NotificationClient::binderDied(const wp<IBinder>& who) { sp<NotificationClient> keep(this); { mAudioFlinger->removeNotificationClient(mPid); } } // ---------------------------------------------------------------------------- Loading Loading @@ -5555,8 +5551,7 @@ status_t AudioFlinger::closeOutput(audio_io_handle_t output) } } } void *param2 = NULL; audioConfigChanged_l(AudioSystem::OUTPUT_CLOSED, output, param2); audioConfigChanged_l(AudioSystem::OUTPUT_CLOSED, output, NULL); mPlaybackThreads.removeItem(output); } thread->exit(); Loading Loading @@ -5700,8 +5695,7 @@ status_t AudioFlinger::closeInput(audio_io_handle_t input) } ALOGV("closeInput() %d", input); void *param2 = NULL; audioConfigChanged_l(AudioSystem::INPUT_CLOSED, input, param2); audioConfigChanged_l(AudioSystem::INPUT_CLOSED, input, NULL); mRecordThreads.removeItem(input); } thread->exit(); Loading Loading @@ -5733,8 +5727,7 @@ status_t AudioFlinger::setStreamOutput(audio_stream_type_t stream, audio_io_hand for (size_t i = 0; i < mPlaybackThreads.size(); i++) { PlaybackThread *thread = mPlaybackThreads.valueAt(i).get(); if (thread != dstThread && thread->type() != ThreadBase::DIRECT) { if (thread != dstThread && thread->type() != ThreadBase::DIRECT) { MixerThread *srcThread = (MixerThread *)thread; srcThread->setStreamValid(stream, false); srcThread->invalidateTracks(stream); Loading Loading @@ -5857,33 +5850,20 @@ void AudioFlinger::purgeStaleEffects_l() { // checkPlaybackThread_l() must be called with AudioFlinger::mLock held AudioFlinger::PlaybackThread *AudioFlinger::checkPlaybackThread_l(audio_io_handle_t output) const { PlaybackThread *thread = NULL; if (mPlaybackThreads.indexOfKey(output) >= 0) { thread = (PlaybackThread *)mPlaybackThreads.valueFor(output).get(); } return thread; return mPlaybackThreads.valueFor(output).get(); } // checkMixerThread_l() must be called with AudioFlinger::mLock held AudioFlinger::MixerThread *AudioFlinger::checkMixerThread_l(audio_io_handle_t output) const { PlaybackThread *thread = checkPlaybackThread_l(output); if (thread != NULL) { if (thread->type() == ThreadBase::DIRECT) { thread = NULL; } } return (MixerThread *)thread; return thread != NULL && thread->type() != ThreadBase::DIRECT ? (MixerThread *) thread : NULL; } // checkRecordThread_l() must be called with AudioFlinger::mLock held AudioFlinger::RecordThread *AudioFlinger::checkRecordThread_l(audio_io_handle_t input) const { RecordThread *thread = NULL; if (mRecordThreads.indexOfKey(input) >= 0) { thread = (RecordThread *)mRecordThreads.valueFor(input).get(); } return thread; return mRecordThreads.valueFor(input).get(); } uint32_t AudioFlinger::nextUniqueId() Loading Loading @@ -6246,10 +6226,7 @@ sp<AudioFlinger::EffectHandle> AudioFlinger::ThreadBase::createEffect_l( goto Exit; } // Only Pre processor effects are allowed on input threads and only on input threads if ((mType == RECORD && (desc->flags & EFFECT_FLAG_TYPE_MASK) != EFFECT_FLAG_TYPE_PRE_PROC) || (mType != RECORD && (desc->flags & EFFECT_FLAG_TYPE_MASK) == EFFECT_FLAG_TYPE_PRE_PROC)) { if ((mType == RECORD) != ((desc->flags & EFFECT_FLAG_TYPE_MASK) == EFFECT_FLAG_TYPE_PRE_PROC)) { ALOGW("createEffect_l() effect %s (flags %08x) created on wrong thread type %d", desc->name, desc->flags, mType); lStatus = BAD_VALUE; Loading services/audioflinger/AudioFlinger.h +3 −3 Original line number Diff line number Diff line Loading @@ -766,7 +766,7 @@ private: virtual status_t start(pid_t tid); virtual void stop(); bool write(int16_t* data, uint32_t frames); bool bufferQueueEmpty() const { return (mBufferQueue.size() == 0) ? true : false; } bool bufferQueueEmpty() const { return mBufferQueue.size() == 0; } bool isActive() const { return mActive; } const wp<ThreadBase>& thread() const { return mThread; } Loading Loading @@ -994,8 +994,8 @@ private: uint32_t nextUniqueId(); status_t moveEffectChain_l(int sessionId, AudioFlinger::PlaybackThread *srcThread, AudioFlinger::PlaybackThread *dstThread, PlaybackThread *srcThread, PlaybackThread *dstThread, bool reRegister); PlaybackThread *primaryPlaybackThread_l(); uint32_t primaryOutputDevice_l(); Loading services/audioflinger/AudioMixer.cpp +4 −4 Original line number Diff line number Diff line Loading @@ -556,7 +556,7 @@ void AudioMixer::volumeRampStereo(track_t* t, int32_t* out, size_t frameCount, i } t->prevVolume[0] = vl; t->prevVolume[1] = vr; t->adjustVolumeRamp((aux != NULL)); t->adjustVolumeRamp(aux != NULL); } void AudioMixer::volumeStereo(track_t* t, int32_t* out, size_t frameCount, int32_t* temp, int32_t* aux) Loading Loading @@ -862,7 +862,7 @@ void AudioMixer::process__genericNoResampling(state_t* state, int64_t pts) while (outFrames) { size_t inFrames = (t.frameCount > outFrames)?outFrames:t.frameCount; if (inFrames) { (t.hook)(&t, outTemp + (BLOCKSIZE-outFrames)*MAX_NUM_CHANNELS, inFrames, state->resampleTemp, aux); t.hook(&t, outTemp + (BLOCKSIZE-outFrames)*MAX_NUM_CHANNELS, inFrames, state->resampleTemp, aux); t.frameCount -= inFrames; outFrames -= inFrames; if (CC_UNLIKELY(aux != NULL)) { Loading Loading @@ -944,7 +944,7 @@ void AudioMixer::process__genericResampling(state_t* state, int64_t pts) // the resampler. if ((t.needs & NEEDS_RESAMPLE__MASK) == NEEDS_RESAMPLE_ENABLED) { t.resampler->setPTS(pts); (t.hook)(&t, outTemp, numFrames, state->resampleTemp, aux); t.hook(&t, outTemp, numFrames, state->resampleTemp, aux); } else { size_t outFrames = 0; Loading @@ -961,7 +961,7 @@ void AudioMixer::process__genericResampling(state_t* state, int64_t pts) if (CC_UNLIKELY(aux != NULL)) { aux += outFrames; } (t.hook)(&t, outTemp + outFrames*MAX_NUM_CHANNELS, t.buffer.frameCount, state->resampleTemp, aux); t.hook(&t, outTemp + outFrames*MAX_NUM_CHANNELS, t.buffer.frameCount, state->resampleTemp, aux); outFrames += t.buffer.frameCount; t.bufferProvider->releaseBuffer(&t.buffer); } Loading services/audioflinger/AudioMixer.h +1 −2 Original line number Diff line number Diff line Loading @@ -114,7 +114,6 @@ private: struct state_t; struct track_t; typedef void (*mix_t)(state_t* state, int64_t pts); typedef void (*hook_t)(track_t* t, int32_t* output, size_t numOutFrames, int32_t* temp, int32_t* aux); static const int BLOCKSIZE = 16; // 4 cache lines Loading Loading @@ -167,7 +166,7 @@ private: uint32_t enabledTracks; uint32_t needsChanged; size_t frameCount; mix_t hook; void (*hook)(state_t* state, int64_t pts); // one of process__*, never NULL int32_t *outputTemp; int32_t *resampleTemp; int32_t reserved[2]; Loading services/audioflinger/AudioPolicyService.cpp +1 −2 Original line number Diff line number Diff line Loading @@ -604,8 +604,7 @@ void AudioPolicyService::setPreProcessorEnabled(InputDesc *inputDesc, bool enabl { Vector<sp<AudioEffect> > fxVector = inputDesc->mEffects; for (size_t i = 0; i < fxVector.size(); i++) { sp<AudioEffect> fx = fxVector.itemAt(i); fx->setEnabled(enabled); fxVector.itemAt(i)->setEnabled(enabled); } } Loading Loading
services/audioflinger/AudioFlinger.cpp +11 −34 Original line number Diff line number Diff line Loading @@ -2688,7 +2688,6 @@ bool AudioFlinger::DirectOutputThread::threadLoop() sp<Track> trackToRemove; sp<Track> activeTrack; nsecs_t standbyTime = systemTime(); int8_t *curBuf; size_t mixBufferSize = mFrameCount*mFrameSize; uint32_t activeSleepTime = activeSleepTimeUs(); uint32_t idleSleepTime = idleSleepTimeUs(); Loading Loading @@ -2892,7 +2891,7 @@ bool AudioFlinger::DirectOutputThread::threadLoop() if (CC_LIKELY(mixerStatus == MIXER_TRACKS_READY)) { AudioBufferProvider::Buffer buffer; size_t frameCount = mFrameCount; curBuf = (int8_t *)mMixBuffer; int8_t *curBuf = (int8_t *)mMixBuffer; // output audio to hardware while (frameCount) { buffer.frameCount = frameCount; Loading Loading @@ -3254,7 +3253,7 @@ void AudioFlinger::DuplicatingThread::removeOutputTrack(MixerThread *thread) { Mutex::Autolock _l(mLock); for (size_t i = 0; i < mOutputTracks.size(); i++) { if (mOutputTracks[i]->thread() == (ThreadBase *)thread) { if (mOutputTracks[i]->thread() == thread) { mOutputTracks[i]->destroy(); mOutputTracks.removeAt(i); updateWaitTime(); Loading Loading @@ -4502,10 +4501,9 @@ status_t AudioFlinger::PlaybackThread::OutputTrack::obtainBuffer(AudioBufferProv void AudioFlinger::PlaybackThread::OutputTrack::clearBufferQueue() { size_t size = mBufferQueue.size(); Buffer *pBuffer; for (size_t i = 0; i < size; i++) { pBuffer = mBufferQueue.itemAt(i); Buffer *pBuffer = mBufferQueue.itemAt(i); delete [] pBuffer->mBuffer; delete pBuffer; } Loading Loading @@ -4577,10 +4575,8 @@ AudioFlinger::NotificationClient::~NotificationClient() void AudioFlinger::NotificationClient::binderDied(const wp<IBinder>& who) { sp<NotificationClient> keep(this); { mAudioFlinger->removeNotificationClient(mPid); } } // ---------------------------------------------------------------------------- Loading Loading @@ -5555,8 +5551,7 @@ status_t AudioFlinger::closeOutput(audio_io_handle_t output) } } } void *param2 = NULL; audioConfigChanged_l(AudioSystem::OUTPUT_CLOSED, output, param2); audioConfigChanged_l(AudioSystem::OUTPUT_CLOSED, output, NULL); mPlaybackThreads.removeItem(output); } thread->exit(); Loading Loading @@ -5700,8 +5695,7 @@ status_t AudioFlinger::closeInput(audio_io_handle_t input) } ALOGV("closeInput() %d", input); void *param2 = NULL; audioConfigChanged_l(AudioSystem::INPUT_CLOSED, input, param2); audioConfigChanged_l(AudioSystem::INPUT_CLOSED, input, NULL); mRecordThreads.removeItem(input); } thread->exit(); Loading Loading @@ -5733,8 +5727,7 @@ status_t AudioFlinger::setStreamOutput(audio_stream_type_t stream, audio_io_hand for (size_t i = 0; i < mPlaybackThreads.size(); i++) { PlaybackThread *thread = mPlaybackThreads.valueAt(i).get(); if (thread != dstThread && thread->type() != ThreadBase::DIRECT) { if (thread != dstThread && thread->type() != ThreadBase::DIRECT) { MixerThread *srcThread = (MixerThread *)thread; srcThread->setStreamValid(stream, false); srcThread->invalidateTracks(stream); Loading Loading @@ -5857,33 +5850,20 @@ void AudioFlinger::purgeStaleEffects_l() { // checkPlaybackThread_l() must be called with AudioFlinger::mLock held AudioFlinger::PlaybackThread *AudioFlinger::checkPlaybackThread_l(audio_io_handle_t output) const { PlaybackThread *thread = NULL; if (mPlaybackThreads.indexOfKey(output) >= 0) { thread = (PlaybackThread *)mPlaybackThreads.valueFor(output).get(); } return thread; return mPlaybackThreads.valueFor(output).get(); } // checkMixerThread_l() must be called with AudioFlinger::mLock held AudioFlinger::MixerThread *AudioFlinger::checkMixerThread_l(audio_io_handle_t output) const { PlaybackThread *thread = checkPlaybackThread_l(output); if (thread != NULL) { if (thread->type() == ThreadBase::DIRECT) { thread = NULL; } } return (MixerThread *)thread; return thread != NULL && thread->type() != ThreadBase::DIRECT ? (MixerThread *) thread : NULL; } // checkRecordThread_l() must be called with AudioFlinger::mLock held AudioFlinger::RecordThread *AudioFlinger::checkRecordThread_l(audio_io_handle_t input) const { RecordThread *thread = NULL; if (mRecordThreads.indexOfKey(input) >= 0) { thread = (RecordThread *)mRecordThreads.valueFor(input).get(); } return thread; return mRecordThreads.valueFor(input).get(); } uint32_t AudioFlinger::nextUniqueId() Loading Loading @@ -6246,10 +6226,7 @@ sp<AudioFlinger::EffectHandle> AudioFlinger::ThreadBase::createEffect_l( goto Exit; } // Only Pre processor effects are allowed on input threads and only on input threads if ((mType == RECORD && (desc->flags & EFFECT_FLAG_TYPE_MASK) != EFFECT_FLAG_TYPE_PRE_PROC) || (mType != RECORD && (desc->flags & EFFECT_FLAG_TYPE_MASK) == EFFECT_FLAG_TYPE_PRE_PROC)) { if ((mType == RECORD) != ((desc->flags & EFFECT_FLAG_TYPE_MASK) == EFFECT_FLAG_TYPE_PRE_PROC)) { ALOGW("createEffect_l() effect %s (flags %08x) created on wrong thread type %d", desc->name, desc->flags, mType); lStatus = BAD_VALUE; Loading
services/audioflinger/AudioFlinger.h +3 −3 Original line number Diff line number Diff line Loading @@ -766,7 +766,7 @@ private: virtual status_t start(pid_t tid); virtual void stop(); bool write(int16_t* data, uint32_t frames); bool bufferQueueEmpty() const { return (mBufferQueue.size() == 0) ? true : false; } bool bufferQueueEmpty() const { return mBufferQueue.size() == 0; } bool isActive() const { return mActive; } const wp<ThreadBase>& thread() const { return mThread; } Loading Loading @@ -994,8 +994,8 @@ private: uint32_t nextUniqueId(); status_t moveEffectChain_l(int sessionId, AudioFlinger::PlaybackThread *srcThread, AudioFlinger::PlaybackThread *dstThread, PlaybackThread *srcThread, PlaybackThread *dstThread, bool reRegister); PlaybackThread *primaryPlaybackThread_l(); uint32_t primaryOutputDevice_l(); Loading
services/audioflinger/AudioMixer.cpp +4 −4 Original line number Diff line number Diff line Loading @@ -556,7 +556,7 @@ void AudioMixer::volumeRampStereo(track_t* t, int32_t* out, size_t frameCount, i } t->prevVolume[0] = vl; t->prevVolume[1] = vr; t->adjustVolumeRamp((aux != NULL)); t->adjustVolumeRamp(aux != NULL); } void AudioMixer::volumeStereo(track_t* t, int32_t* out, size_t frameCount, int32_t* temp, int32_t* aux) Loading Loading @@ -862,7 +862,7 @@ void AudioMixer::process__genericNoResampling(state_t* state, int64_t pts) while (outFrames) { size_t inFrames = (t.frameCount > outFrames)?outFrames:t.frameCount; if (inFrames) { (t.hook)(&t, outTemp + (BLOCKSIZE-outFrames)*MAX_NUM_CHANNELS, inFrames, state->resampleTemp, aux); t.hook(&t, outTemp + (BLOCKSIZE-outFrames)*MAX_NUM_CHANNELS, inFrames, state->resampleTemp, aux); t.frameCount -= inFrames; outFrames -= inFrames; if (CC_UNLIKELY(aux != NULL)) { Loading Loading @@ -944,7 +944,7 @@ void AudioMixer::process__genericResampling(state_t* state, int64_t pts) // the resampler. if ((t.needs & NEEDS_RESAMPLE__MASK) == NEEDS_RESAMPLE_ENABLED) { t.resampler->setPTS(pts); (t.hook)(&t, outTemp, numFrames, state->resampleTemp, aux); t.hook(&t, outTemp, numFrames, state->resampleTemp, aux); } else { size_t outFrames = 0; Loading @@ -961,7 +961,7 @@ void AudioMixer::process__genericResampling(state_t* state, int64_t pts) if (CC_UNLIKELY(aux != NULL)) { aux += outFrames; } (t.hook)(&t, outTemp + outFrames*MAX_NUM_CHANNELS, t.buffer.frameCount, state->resampleTemp, aux); t.hook(&t, outTemp + outFrames*MAX_NUM_CHANNELS, t.buffer.frameCount, state->resampleTemp, aux); outFrames += t.buffer.frameCount; t.bufferProvider->releaseBuffer(&t.buffer); } Loading
services/audioflinger/AudioMixer.h +1 −2 Original line number Diff line number Diff line Loading @@ -114,7 +114,6 @@ private: struct state_t; struct track_t; typedef void (*mix_t)(state_t* state, int64_t pts); typedef void (*hook_t)(track_t* t, int32_t* output, size_t numOutFrames, int32_t* temp, int32_t* aux); static const int BLOCKSIZE = 16; // 4 cache lines Loading Loading @@ -167,7 +166,7 @@ private: uint32_t enabledTracks; uint32_t needsChanged; size_t frameCount; mix_t hook; void (*hook)(state_t* state, int64_t pts); // one of process__*, never NULL int32_t *outputTemp; int32_t *resampleTemp; int32_t reserved[2]; Loading
services/audioflinger/AudioPolicyService.cpp +1 −2 Original line number Diff line number Diff line Loading @@ -604,8 +604,7 @@ void AudioPolicyService::setPreProcessorEnabled(InputDesc *inputDesc, bool enabl { Vector<sp<AudioEffect> > fxVector = inputDesc->mEffects; for (size_t i = 0; i < fxVector.size(); i++) { sp<AudioEffect> fx = fxVector.itemAt(i); fx->setEnabled(enabled); fxVector.itemAt(i)->setEnabled(enabled); } } Loading