Loading services/audioflinger/AudioFlinger.cpp +17 −31 Original line number Diff line number Diff line Loading @@ -3231,7 +3231,7 @@ void AudioFlinger::DuplicatingThread::addOutputTrack(MixerThread *thread) { // FIXME explain this formula int frameCount = (3 * mFrameCount * mSampleRate) / thread->sampleRate(); OutputTrack *outputTrack = new OutputTrack((ThreadBase *)thread, OutputTrack *outputTrack = new OutputTrack(thread, this, mSampleRate, mFormat, Loading Loading @@ -3300,7 +3300,7 @@ uint32_t AudioFlinger::DuplicatingThread::activeSleepTimeUs() // TrackBase constructor must be called with AudioFlinger::mLock held AudioFlinger::ThreadBase::TrackBase::TrackBase( const wp<ThreadBase>& thread, ThreadBase *thread, const sp<Client>& client, uint32_t sampleRate, audio_format_t format, Loading Loading @@ -3456,7 +3456,7 @@ void* AudioFlinger::ThreadBase::TrackBase::getBuffer(uint32_t offset, uint32_t f // Track constructor must be called with AudioFlinger::mLock and ThreadBase::mLock held AudioFlinger::PlaybackThread::Track::Track( const wp<ThreadBase>& thread, PlaybackThread *thread, const sp<Client>& client, audio_stream_type_t streamType, uint32_t sampleRate, Loading @@ -3470,11 +3470,9 @@ AudioFlinger::PlaybackThread::Track::Track( mAuxEffectId(0), mHasVolumeController(false) { if (mCblk != NULL) { sp<ThreadBase> baseThread = thread.promote(); if (baseThread != 0) { PlaybackThread *playbackThread = (PlaybackThread *)baseThread.get(); mName = playbackThread->getTrackName_l(); mMainBuffer = playbackThread->mixBuffer(); if (thread != NULL) { mName = thread->getTrackName_l(); mMainBuffer = thread->mixBuffer(); } ALOGV("Track constructor name %d, calling pid %d", mName, IPCThreadState::self()->getCallingPid()); if (mName < 0) { Loading Loading @@ -3760,7 +3758,7 @@ void AudioFlinger::PlaybackThread::Track::setAuxBuffer(int EffectId, int32_t *bu sp<AudioFlinger::PlaybackThread::TimedTrack> AudioFlinger::PlaybackThread::TimedTrack::create( const wp<ThreadBase>& thread, PlaybackThread *thread, const sp<Client>& client, audio_stream_type_t streamType, uint32_t sampleRate, Loading @@ -3785,7 +3783,7 @@ AudioFlinger::PlaybackThread::TimedTrack::create( } AudioFlinger::PlaybackThread::TimedTrack::TimedTrack( const wp<ThreadBase>& thread, PlaybackThread *thread, const sp<Client>& client, audio_stream_type_t streamType, uint32_t sampleRate, Loading Loading @@ -3926,15 +3924,6 @@ status_t AudioFlinger::PlaybackThread::TimedTrack::getNextBuffer( return INVALID_OPERATION; } // get ahold of the output stream that these samples will be written to sp<ThreadBase> thread = mThread.promote(); if (thread == NULL) { buffer->raw = 0; buffer->frameCount = 0; return INVALID_OPERATION; } PlaybackThread* playbackThread = static_cast<PlaybackThread*>(thread.get()); Mutex::Autolock _l(mTimedBufferQueueLock); while (true) { Loading Loading @@ -4160,7 +4149,7 @@ AudioFlinger::PlaybackThread::TimedTrack::TimedBuffer::TimedBuffer( // RecordTrack constructor must be called with AudioFlinger::mLock held AudioFlinger::RecordThread::RecordTrack::RecordTrack( const wp<ThreadBase>& thread, RecordThread *thread, const sp<Client>& client, uint32_t sampleRate, audio_format_t format, Loading Loading @@ -4273,17 +4262,16 @@ void AudioFlinger::RecordThread::RecordTrack::dump(char* buffer, size_t size) // ---------------------------------------------------------------------------- AudioFlinger::PlaybackThread::OutputTrack::OutputTrack( const wp<ThreadBase>& thread, PlaybackThread *playbackThread, DuplicatingThread *sourceThread, uint32_t sampleRate, audio_format_t format, uint32_t channelMask, int frameCount) : Track(thread, NULL, AUDIO_STREAM_CNT, sampleRate, format, channelMask, frameCount, NULL, 0), : Track(playbackThread, NULL, AUDIO_STREAM_CNT, sampleRate, format, channelMask, frameCount, NULL, 0), mActive(false), mSourceThread(sourceThread) { PlaybackThread *playbackThread = (PlaybackThread *)thread.unsafe_get(); if (mCblk != NULL) { mCblk->flags |= CBLK_DIRECTION_OUT; mCblk->buffers = (char*)mCblk + sizeof(audio_track_cblk_t); Loading Loading @@ -6595,18 +6583,17 @@ size_t AudioFlinger::RecordThread::removeEffectChain_l(const sp<EffectChain>& ch #undef LOG_TAG #define LOG_TAG "AudioFlinger::EffectModule" AudioFlinger::EffectModule::EffectModule(const wp<ThreadBase>& wThread, AudioFlinger::EffectModule::EffectModule(ThreadBase *thread, const wp<AudioFlinger::EffectChain>& chain, effect_descriptor_t *desc, int id, int sessionId) : mThread(wThread), mChain(chain), mId(id), mSessionId(sessionId), mEffectInterface(NULL), : mThread(thread), mChain(chain), mId(id), mSessionId(sessionId), mEffectInterface(NULL), mStatus(NO_INIT), mState(IDLE), mSuspended(false) { ALOGV("Constructor %p", this); int lStatus; sp<ThreadBase> thread = mThread.promote(); if (thread == 0) { if (thread == NULL) { return; } Loading Loading @@ -7576,15 +7563,14 @@ void AudioFlinger::EffectHandle::dump(char* buffer, size_t size) #undef LOG_TAG #define LOG_TAG "AudioFlinger::EffectChain" AudioFlinger::EffectChain::EffectChain(const wp<ThreadBase>& wThread, AudioFlinger::EffectChain::EffectChain(ThreadBase *thread, int sessionId) : mThread(wThread), mSessionId(sessionId), mActiveTrackCnt(0), mTrackCnt(0), mTailBufferCount(0), : mThread(thread), mSessionId(sessionId), mActiveTrackCnt(0), mTrackCnt(0), mTailBufferCount(0), mOwnInBuffer(false), mVolumeCtrlIdx(-1), mLeftVolume(UINT_MAX), mRightVolume(UINT_MAX), mNewLeftVolume(UINT_MAX), mNewRightVolume(UINT_MAX) { mStrategy = AudioSystem::getStrategyForStream(AUDIO_STREAM_MUSIC); sp<ThreadBase> thread = mThread.promote(); if (thread == 0) { if (thread == NULL) { return; } mMaxTailBuffers = ((kProcessTailDurationMs * thread->sampleRate()) / 1000) / Loading services/audioflinger/AudioFlinger.h +8 −7 Original line number Diff line number Diff line Loading @@ -318,7 +318,7 @@ private: // The upper 16 bits are used for track-specific flags. }; TrackBase(const wp<ThreadBase>& thread, TrackBase(ThreadBase *thread, const sp<Client>& client, uint32_t sampleRate, audio_format_t format, Loading Loading @@ -591,7 +591,7 @@ private: // playback track class Track : public TrackBase { public: Track( const wp<ThreadBase>& thread, Track( PlaybackThread *thread, const sp<Client>& client, audio_stream_type_t streamType, uint32_t sampleRate, Loading Loading @@ -674,7 +674,7 @@ private: class TimedTrack : public Track { public: static sp<TimedTrack> create(const wp<ThreadBase>& thread, static sp<TimedTrack> create(PlaybackThread *thread, const sp<Client>& client, audio_stream_type_t streamType, uint32_t sampleRate, Loading Loading @@ -719,7 +719,7 @@ private: void trimTimedBufferQueue_l(); private: TimedTrack(const wp<ThreadBase>& thread, TimedTrack(PlaybackThread *thread, const sp<Client>& client, audio_stream_type_t streamType, uint32_t sampleRate, Loading Loading @@ -755,7 +755,7 @@ private: int16_t *mBuffer; }; OutputTrack( const wp<ThreadBase>& thread, OutputTrack(PlaybackThread *thread, DuplicatingThread *sourceThread, uint32_t sampleRate, audio_format_t format, Loading Loading @@ -1042,7 +1042,7 @@ private: // record track class RecordTrack : public TrackBase { public: RecordTrack(const wp<ThreadBase>& thread, RecordTrack(RecordThread *thread, const sp<Client>& client, uint32_t sampleRate, audio_format_t format, Loading Loading @@ -1168,7 +1168,7 @@ private: // the attached track(s) to accumulate their auxiliary channel. class EffectModule: public RefBase { public: EffectModule(const wp<ThreadBase>& wThread, EffectModule(ThreadBase *thread, const wp<AudioFlinger::EffectChain>& chain, effect_descriptor_t *desc, int id, Loading Loading @@ -1353,6 +1353,7 @@ mutable Mutex mLock; // mutex for process, commands and handl class EffectChain: public RefBase { public: EffectChain(const wp<ThreadBase>& wThread, int sessionId); EffectChain(ThreadBase *thread, int sessionId); virtual ~EffectChain(); // special key used for an entry in mSuspendedEffects keyed vector Loading Loading
services/audioflinger/AudioFlinger.cpp +17 −31 Original line number Diff line number Diff line Loading @@ -3231,7 +3231,7 @@ void AudioFlinger::DuplicatingThread::addOutputTrack(MixerThread *thread) { // FIXME explain this formula int frameCount = (3 * mFrameCount * mSampleRate) / thread->sampleRate(); OutputTrack *outputTrack = new OutputTrack((ThreadBase *)thread, OutputTrack *outputTrack = new OutputTrack(thread, this, mSampleRate, mFormat, Loading Loading @@ -3300,7 +3300,7 @@ uint32_t AudioFlinger::DuplicatingThread::activeSleepTimeUs() // TrackBase constructor must be called with AudioFlinger::mLock held AudioFlinger::ThreadBase::TrackBase::TrackBase( const wp<ThreadBase>& thread, ThreadBase *thread, const sp<Client>& client, uint32_t sampleRate, audio_format_t format, Loading Loading @@ -3456,7 +3456,7 @@ void* AudioFlinger::ThreadBase::TrackBase::getBuffer(uint32_t offset, uint32_t f // Track constructor must be called with AudioFlinger::mLock and ThreadBase::mLock held AudioFlinger::PlaybackThread::Track::Track( const wp<ThreadBase>& thread, PlaybackThread *thread, const sp<Client>& client, audio_stream_type_t streamType, uint32_t sampleRate, Loading @@ -3470,11 +3470,9 @@ AudioFlinger::PlaybackThread::Track::Track( mAuxEffectId(0), mHasVolumeController(false) { if (mCblk != NULL) { sp<ThreadBase> baseThread = thread.promote(); if (baseThread != 0) { PlaybackThread *playbackThread = (PlaybackThread *)baseThread.get(); mName = playbackThread->getTrackName_l(); mMainBuffer = playbackThread->mixBuffer(); if (thread != NULL) { mName = thread->getTrackName_l(); mMainBuffer = thread->mixBuffer(); } ALOGV("Track constructor name %d, calling pid %d", mName, IPCThreadState::self()->getCallingPid()); if (mName < 0) { Loading Loading @@ -3760,7 +3758,7 @@ void AudioFlinger::PlaybackThread::Track::setAuxBuffer(int EffectId, int32_t *bu sp<AudioFlinger::PlaybackThread::TimedTrack> AudioFlinger::PlaybackThread::TimedTrack::create( const wp<ThreadBase>& thread, PlaybackThread *thread, const sp<Client>& client, audio_stream_type_t streamType, uint32_t sampleRate, Loading @@ -3785,7 +3783,7 @@ AudioFlinger::PlaybackThread::TimedTrack::create( } AudioFlinger::PlaybackThread::TimedTrack::TimedTrack( const wp<ThreadBase>& thread, PlaybackThread *thread, const sp<Client>& client, audio_stream_type_t streamType, uint32_t sampleRate, Loading Loading @@ -3926,15 +3924,6 @@ status_t AudioFlinger::PlaybackThread::TimedTrack::getNextBuffer( return INVALID_OPERATION; } // get ahold of the output stream that these samples will be written to sp<ThreadBase> thread = mThread.promote(); if (thread == NULL) { buffer->raw = 0; buffer->frameCount = 0; return INVALID_OPERATION; } PlaybackThread* playbackThread = static_cast<PlaybackThread*>(thread.get()); Mutex::Autolock _l(mTimedBufferQueueLock); while (true) { Loading Loading @@ -4160,7 +4149,7 @@ AudioFlinger::PlaybackThread::TimedTrack::TimedBuffer::TimedBuffer( // RecordTrack constructor must be called with AudioFlinger::mLock held AudioFlinger::RecordThread::RecordTrack::RecordTrack( const wp<ThreadBase>& thread, RecordThread *thread, const sp<Client>& client, uint32_t sampleRate, audio_format_t format, Loading Loading @@ -4273,17 +4262,16 @@ void AudioFlinger::RecordThread::RecordTrack::dump(char* buffer, size_t size) // ---------------------------------------------------------------------------- AudioFlinger::PlaybackThread::OutputTrack::OutputTrack( const wp<ThreadBase>& thread, PlaybackThread *playbackThread, DuplicatingThread *sourceThread, uint32_t sampleRate, audio_format_t format, uint32_t channelMask, int frameCount) : Track(thread, NULL, AUDIO_STREAM_CNT, sampleRate, format, channelMask, frameCount, NULL, 0), : Track(playbackThread, NULL, AUDIO_STREAM_CNT, sampleRate, format, channelMask, frameCount, NULL, 0), mActive(false), mSourceThread(sourceThread) { PlaybackThread *playbackThread = (PlaybackThread *)thread.unsafe_get(); if (mCblk != NULL) { mCblk->flags |= CBLK_DIRECTION_OUT; mCblk->buffers = (char*)mCblk + sizeof(audio_track_cblk_t); Loading Loading @@ -6595,18 +6583,17 @@ size_t AudioFlinger::RecordThread::removeEffectChain_l(const sp<EffectChain>& ch #undef LOG_TAG #define LOG_TAG "AudioFlinger::EffectModule" AudioFlinger::EffectModule::EffectModule(const wp<ThreadBase>& wThread, AudioFlinger::EffectModule::EffectModule(ThreadBase *thread, const wp<AudioFlinger::EffectChain>& chain, effect_descriptor_t *desc, int id, int sessionId) : mThread(wThread), mChain(chain), mId(id), mSessionId(sessionId), mEffectInterface(NULL), : mThread(thread), mChain(chain), mId(id), mSessionId(sessionId), mEffectInterface(NULL), mStatus(NO_INIT), mState(IDLE), mSuspended(false) { ALOGV("Constructor %p", this); int lStatus; sp<ThreadBase> thread = mThread.promote(); if (thread == 0) { if (thread == NULL) { return; } Loading Loading @@ -7576,15 +7563,14 @@ void AudioFlinger::EffectHandle::dump(char* buffer, size_t size) #undef LOG_TAG #define LOG_TAG "AudioFlinger::EffectChain" AudioFlinger::EffectChain::EffectChain(const wp<ThreadBase>& wThread, AudioFlinger::EffectChain::EffectChain(ThreadBase *thread, int sessionId) : mThread(wThread), mSessionId(sessionId), mActiveTrackCnt(0), mTrackCnt(0), mTailBufferCount(0), : mThread(thread), mSessionId(sessionId), mActiveTrackCnt(0), mTrackCnt(0), mTailBufferCount(0), mOwnInBuffer(false), mVolumeCtrlIdx(-1), mLeftVolume(UINT_MAX), mRightVolume(UINT_MAX), mNewLeftVolume(UINT_MAX), mNewRightVolume(UINT_MAX) { mStrategy = AudioSystem::getStrategyForStream(AUDIO_STREAM_MUSIC); sp<ThreadBase> thread = mThread.promote(); if (thread == 0) { if (thread == NULL) { return; } mMaxTailBuffers = ((kProcessTailDurationMs * thread->sampleRate()) / 1000) / Loading
services/audioflinger/AudioFlinger.h +8 −7 Original line number Diff line number Diff line Loading @@ -318,7 +318,7 @@ private: // The upper 16 bits are used for track-specific flags. }; TrackBase(const wp<ThreadBase>& thread, TrackBase(ThreadBase *thread, const sp<Client>& client, uint32_t sampleRate, audio_format_t format, Loading Loading @@ -591,7 +591,7 @@ private: // playback track class Track : public TrackBase { public: Track( const wp<ThreadBase>& thread, Track( PlaybackThread *thread, const sp<Client>& client, audio_stream_type_t streamType, uint32_t sampleRate, Loading Loading @@ -674,7 +674,7 @@ private: class TimedTrack : public Track { public: static sp<TimedTrack> create(const wp<ThreadBase>& thread, static sp<TimedTrack> create(PlaybackThread *thread, const sp<Client>& client, audio_stream_type_t streamType, uint32_t sampleRate, Loading Loading @@ -719,7 +719,7 @@ private: void trimTimedBufferQueue_l(); private: TimedTrack(const wp<ThreadBase>& thread, TimedTrack(PlaybackThread *thread, const sp<Client>& client, audio_stream_type_t streamType, uint32_t sampleRate, Loading Loading @@ -755,7 +755,7 @@ private: int16_t *mBuffer; }; OutputTrack( const wp<ThreadBase>& thread, OutputTrack(PlaybackThread *thread, DuplicatingThread *sourceThread, uint32_t sampleRate, audio_format_t format, Loading Loading @@ -1042,7 +1042,7 @@ private: // record track class RecordTrack : public TrackBase { public: RecordTrack(const wp<ThreadBase>& thread, RecordTrack(RecordThread *thread, const sp<Client>& client, uint32_t sampleRate, audio_format_t format, Loading Loading @@ -1168,7 +1168,7 @@ private: // the attached track(s) to accumulate their auxiliary channel. class EffectModule: public RefBase { public: EffectModule(const wp<ThreadBase>& wThread, EffectModule(ThreadBase *thread, const wp<AudioFlinger::EffectChain>& chain, effect_descriptor_t *desc, int id, Loading Loading @@ -1353,6 +1353,7 @@ mutable Mutex mLock; // mutex for process, commands and handl class EffectChain: public RefBase { public: EffectChain(const wp<ThreadBase>& wThread, int sessionId); EffectChain(ThreadBase *thread, int sessionId); virtual ~EffectChain(); // special key used for an entry in mSuspendedEffects keyed vector Loading