Loading services/audioflinger/AudioFlinger.cpp +6 −5 Original line number Diff line number Diff line Loading @@ -3383,9 +3383,9 @@ void AudioFlinger::PlaybackThread::invalidateTracks(audio_stream_type_t streamTy } // getTrackName_l() must be called with ThreadBase::mLock held int AudioFlinger::MixerThread::getTrackName_l(audio_channel_mask_t channelMask) int AudioFlinger::MixerThread::getTrackName_l(audio_channel_mask_t channelMask, int sessionId) { return mAudioMixer->getTrackName(channelMask); return mAudioMixer->getTrackName(channelMask, sessionId); } // deleteTrackName_l() must be called with ThreadBase::mLock held Loading Loading @@ -3498,7 +3498,7 @@ bool AudioFlinger::MixerThread::checkForNewParameters_l() readOutputParameters(); mAudioMixer = new AudioMixer(mNormalFrameCount, mSampleRate); for (size_t i = 0; i < mTracks.size() ; i++) { int name = getTrackName_l(mTracks[i]->mChannelMask); int name = getTrackName_l(mTracks[i]->mChannelMask, mTracks[i]->mSessionId); if (name < 0) break; mTracks[i]->mName = name; // limit track sample rate to 2 x new output sample rate Loading Loading @@ -3828,7 +3828,8 @@ void AudioFlinger::DirectOutputThread::threadLoop_sleepTime() } // getTrackName_l() must be called with ThreadBase::mLock held int AudioFlinger::DirectOutputThread::getTrackName_l(audio_channel_mask_t channelMask) int AudioFlinger::DirectOutputThread::getTrackName_l(audio_channel_mask_t channelMask, int sessionId) { return 0; } Loading Loading @@ -4293,7 +4294,7 @@ AudioFlinger::PlaybackThread::Track::Track( // 16 bit because data is converted to 16 bit before being stored in buffer by AudioTrack mCblk->frameSize = audio_is_linear_pcm(format) ? mChannelCount * sizeof(int16_t) : sizeof(uint8_t); // to avoid leaking a track name, do not allocate one unless there is an mCblk mName = thread->getTrackName_l(channelMask); mName = thread->getTrackName_l(channelMask, sessionId); mCblk->mName = mName; if (mName < 0) { ALOGE("no more track names available"); Loading services/audioflinger/AudioFlinger.h +3 −3 Original line number Diff line number Diff line Loading @@ -1086,7 +1086,7 @@ public: // Allocate a track name for a given channel mask. // Returns name >= 0 if successful, -1 on failure. virtual int getTrackName_l(audio_channel_mask_t channelMask) = 0; virtual int getTrackName_l(audio_channel_mask_t channelMask, int sessionId) = 0; virtual void deleteTrackName_l(int name) = 0; // Time to sleep between cycles when: Loading Loading @@ -1202,7 +1202,7 @@ public: protected: virtual mixer_state prepareTracks_l(Vector< sp<Track> > *tracksToRemove); virtual int getTrackName_l(audio_channel_mask_t channelMask); virtual int getTrackName_l(audio_channel_mask_t channelMask, int sessionId); virtual void deleteTrackName_l(int name); virtual uint32_t idleSleepTimeUs() const; virtual uint32_t suspendSleepTimeUs() const; Loading Loading @@ -1254,7 +1254,7 @@ public: virtual bool checkForNewParameters_l(); protected: virtual int getTrackName_l(audio_channel_mask_t channelMask); virtual int getTrackName_l(audio_channel_mask_t channelMask, int sessionId); virtual void deleteTrackName_l(int name); virtual uint32_t activeSleepTimeUs() const; virtual uint32_t idleSleepTimeUs() const; Loading services/audioflinger/AudioMixer.cpp +3 −2 Original line number Diff line number Diff line Loading @@ -163,7 +163,7 @@ AudioMixer::~AudioMixer() delete [] mState.resampleTemp; } int AudioMixer::getTrackName(audio_channel_mask_t channelMask) int AudioMixer::getTrackName(audio_channel_mask_t channelMask, int sessionId) { uint32_t names = (~mTrackNames) & mConfiguredNames; if (names != 0) { Loading @@ -189,6 +189,7 @@ int AudioMixer::getTrackName(audio_channel_mask_t channelMask) t->enabled = false; t->format = 16; t->channelMask = AUDIO_CHANNEL_OUT_STEREO; t->sessionId = sessionId; // setBufferProvider(name, AudioBufferProvider *) is required before enable(name) t->bufferProvider = NULL; t->downmixerBufferProvider = NULL; Loading Loading @@ -270,7 +271,7 @@ status_t AudioMixer::prepareTrackForDownmix(track_t* pTrack, int trackName) } if (EffectCreate(&dwnmFxDesc.uuid, -2 /*sessionId*/, -2 /*ioId*/,// both not relevant here, using random value pTrack->sessionId /*sessionId*/, -2 /*ioId not relevant here, using random value*/, &pDbp->mDownmixHandle/*pHandle*/) != 0) { ALOGE("prepareTrackForDownmix(%d) fails: error creating downmixer effect", trackName); goto noDownmixForActiveTrack; Loading services/audioflinger/AudioMixer.h +2 −2 Original line number Diff line number Diff line Loading @@ -91,7 +91,7 @@ public: // For all APIs with "name": TRACK0 <= name < TRACK0 + MAX_NUM_TRACKS // Allocate a track name. Returns new track name if successful, -1 on failure. int getTrackName(audio_channel_mask_t channelMask); int getTrackName(audio_channel_mask_t channelMask, int sessionId); // Free an allocated track by name void deleteTrackName(int name); Loading Loading @@ -192,7 +192,7 @@ private: DownmixerBufferProvider* downmixerBufferProvider; // 4 bytes int32_t padding; int32_t sessionId; // 16-byte boundary Loading services/audioflinger/FastMixer.cpp +3 −2 Original line number Diff line number Diff line Loading @@ -281,8 +281,9 @@ bool FastMixer::threadLoop() AudioBufferProvider *bufferProvider = fastTrack->mBufferProvider; ALOG_ASSERT(bufferProvider != NULL && fastTrackNames[i] == -1); if (mixer != NULL) { // calling getTrackName with default channel mask name = mixer->getTrackName(AUDIO_CHANNEL_OUT_STEREO); // calling getTrackName with default channel mask and a random invalid // sessionId (no effects here) name = mixer->getTrackName(AUDIO_CHANNEL_OUT_STEREO, -555); ALOG_ASSERT(name >= 0); fastTrackNames[i] = name; mixer->setBufferProvider(name, bufferProvider); Loading Loading
services/audioflinger/AudioFlinger.cpp +6 −5 Original line number Diff line number Diff line Loading @@ -3383,9 +3383,9 @@ void AudioFlinger::PlaybackThread::invalidateTracks(audio_stream_type_t streamTy } // getTrackName_l() must be called with ThreadBase::mLock held int AudioFlinger::MixerThread::getTrackName_l(audio_channel_mask_t channelMask) int AudioFlinger::MixerThread::getTrackName_l(audio_channel_mask_t channelMask, int sessionId) { return mAudioMixer->getTrackName(channelMask); return mAudioMixer->getTrackName(channelMask, sessionId); } // deleteTrackName_l() must be called with ThreadBase::mLock held Loading Loading @@ -3498,7 +3498,7 @@ bool AudioFlinger::MixerThread::checkForNewParameters_l() readOutputParameters(); mAudioMixer = new AudioMixer(mNormalFrameCount, mSampleRate); for (size_t i = 0; i < mTracks.size() ; i++) { int name = getTrackName_l(mTracks[i]->mChannelMask); int name = getTrackName_l(mTracks[i]->mChannelMask, mTracks[i]->mSessionId); if (name < 0) break; mTracks[i]->mName = name; // limit track sample rate to 2 x new output sample rate Loading Loading @@ -3828,7 +3828,8 @@ void AudioFlinger::DirectOutputThread::threadLoop_sleepTime() } // getTrackName_l() must be called with ThreadBase::mLock held int AudioFlinger::DirectOutputThread::getTrackName_l(audio_channel_mask_t channelMask) int AudioFlinger::DirectOutputThread::getTrackName_l(audio_channel_mask_t channelMask, int sessionId) { return 0; } Loading Loading @@ -4293,7 +4294,7 @@ AudioFlinger::PlaybackThread::Track::Track( // 16 bit because data is converted to 16 bit before being stored in buffer by AudioTrack mCblk->frameSize = audio_is_linear_pcm(format) ? mChannelCount * sizeof(int16_t) : sizeof(uint8_t); // to avoid leaking a track name, do not allocate one unless there is an mCblk mName = thread->getTrackName_l(channelMask); mName = thread->getTrackName_l(channelMask, sessionId); mCblk->mName = mName; if (mName < 0) { ALOGE("no more track names available"); Loading
services/audioflinger/AudioFlinger.h +3 −3 Original line number Diff line number Diff line Loading @@ -1086,7 +1086,7 @@ public: // Allocate a track name for a given channel mask. // Returns name >= 0 if successful, -1 on failure. virtual int getTrackName_l(audio_channel_mask_t channelMask) = 0; virtual int getTrackName_l(audio_channel_mask_t channelMask, int sessionId) = 0; virtual void deleteTrackName_l(int name) = 0; // Time to sleep between cycles when: Loading Loading @@ -1202,7 +1202,7 @@ public: protected: virtual mixer_state prepareTracks_l(Vector< sp<Track> > *tracksToRemove); virtual int getTrackName_l(audio_channel_mask_t channelMask); virtual int getTrackName_l(audio_channel_mask_t channelMask, int sessionId); virtual void deleteTrackName_l(int name); virtual uint32_t idleSleepTimeUs() const; virtual uint32_t suspendSleepTimeUs() const; Loading Loading @@ -1254,7 +1254,7 @@ public: virtual bool checkForNewParameters_l(); protected: virtual int getTrackName_l(audio_channel_mask_t channelMask); virtual int getTrackName_l(audio_channel_mask_t channelMask, int sessionId); virtual void deleteTrackName_l(int name); virtual uint32_t activeSleepTimeUs() const; virtual uint32_t idleSleepTimeUs() const; Loading
services/audioflinger/AudioMixer.cpp +3 −2 Original line number Diff line number Diff line Loading @@ -163,7 +163,7 @@ AudioMixer::~AudioMixer() delete [] mState.resampleTemp; } int AudioMixer::getTrackName(audio_channel_mask_t channelMask) int AudioMixer::getTrackName(audio_channel_mask_t channelMask, int sessionId) { uint32_t names = (~mTrackNames) & mConfiguredNames; if (names != 0) { Loading @@ -189,6 +189,7 @@ int AudioMixer::getTrackName(audio_channel_mask_t channelMask) t->enabled = false; t->format = 16; t->channelMask = AUDIO_CHANNEL_OUT_STEREO; t->sessionId = sessionId; // setBufferProvider(name, AudioBufferProvider *) is required before enable(name) t->bufferProvider = NULL; t->downmixerBufferProvider = NULL; Loading Loading @@ -270,7 +271,7 @@ status_t AudioMixer::prepareTrackForDownmix(track_t* pTrack, int trackName) } if (EffectCreate(&dwnmFxDesc.uuid, -2 /*sessionId*/, -2 /*ioId*/,// both not relevant here, using random value pTrack->sessionId /*sessionId*/, -2 /*ioId not relevant here, using random value*/, &pDbp->mDownmixHandle/*pHandle*/) != 0) { ALOGE("prepareTrackForDownmix(%d) fails: error creating downmixer effect", trackName); goto noDownmixForActiveTrack; Loading
services/audioflinger/AudioMixer.h +2 −2 Original line number Diff line number Diff line Loading @@ -91,7 +91,7 @@ public: // For all APIs with "name": TRACK0 <= name < TRACK0 + MAX_NUM_TRACKS // Allocate a track name. Returns new track name if successful, -1 on failure. int getTrackName(audio_channel_mask_t channelMask); int getTrackName(audio_channel_mask_t channelMask, int sessionId); // Free an allocated track by name void deleteTrackName(int name); Loading Loading @@ -192,7 +192,7 @@ private: DownmixerBufferProvider* downmixerBufferProvider; // 4 bytes int32_t padding; int32_t sessionId; // 16-byte boundary Loading
services/audioflinger/FastMixer.cpp +3 −2 Original line number Diff line number Diff line Loading @@ -281,8 +281,9 @@ bool FastMixer::threadLoop() AudioBufferProvider *bufferProvider = fastTrack->mBufferProvider; ALOG_ASSERT(bufferProvider != NULL && fastTrackNames[i] == -1); if (mixer != NULL) { // calling getTrackName with default channel mask name = mixer->getTrackName(AUDIO_CHANNEL_OUT_STEREO); // calling getTrackName with default channel mask and a random invalid // sessionId (no effects here) name = mixer->getTrackName(AUDIO_CHANNEL_OUT_STEREO, -555); ALOG_ASSERT(name >= 0); fastTrackNames[i] = name; mixer->setBufferProvider(name, bufferProvider); Loading