diff options
author | Eric Laurent <elaurent@google.com> | 2014-11-21 02:45:13 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2014-11-21 02:45:13 +0000 |
commit | 0aee4dd6bb897ef7e23ca67e4b5019ce9524b51e (patch) | |
tree | d427e75aaaeb24337f720fcb7a549ad3daeeaab0 /services/soundtrigger | |
parent | 3dd2eb810af471df146cb16a680b1b0ca7364be5 (diff) | |
parent | 30dee177d25bf75f8b3fb8a70573de2c04306759 (diff) | |
download | frameworks_av-0aee4dd6bb897ef7e23ca67e4b5019ce9524b51e.zip frameworks_av-0aee4dd6bb897ef7e23ca67e4b5019ce9524b51e.tar.gz frameworks_av-0aee4dd6bb897ef7e23ca67e4b5019ce9524b51e.tar.bz2 |
am 30dee177: am 8052d933: Merge "SoundTrigger: allow sound model reloading" into lmp-mr1-dev
* commit '30dee177d25bf75f8b3fb8a70573de2c04306759':
SoundTrigger: allow sound model reloading
Diffstat (limited to 'services/soundtrigger')
-rw-r--r-- | services/soundtrigger/SoundTriggerHwService.cpp | 16 | ||||
-rw-r--r-- | services/soundtrigger/SoundTriggerHwService.h | 3 |
2 files changed, 19 insertions, 0 deletions
diff --git a/services/soundtrigger/SoundTriggerHwService.cpp b/services/soundtrigger/SoundTriggerHwService.cpp index b625b01..081aff7 100644 --- a/services/soundtrigger/SoundTriggerHwService.cpp +++ b/services/soundtrigger/SoundTriggerHwService.cpp @@ -535,6 +535,16 @@ status_t SoundTriggerHwService::Module::loadSoundModel(const sp<IMemory>& modelM (struct sound_trigger_sound_model *)modelMemory->pointer(); AutoMutex lock(mLock); + + if (mModels.size() >= mDescriptor.properties.max_sound_models) { + if (mModels.size() == 0) { + return INVALID_OPERATION; + } + ALOGW("loadSoundModel() max number of models exceeded %d making room for a new one", + mDescriptor.properties.max_sound_models); + unloadSoundModel_l(mModels.valueAt(0)->mHandle); + } + status_t status = mHwDevice->load_sound_model(mHwDevice, sound_model, SoundTriggerHwService::soundModelCallback, @@ -566,6 +576,11 @@ status_t SoundTriggerHwService::Module::unloadSoundModel(sound_model_handle_t ha } AutoMutex lock(mLock); + return unloadSoundModel_l(handle); +} + +status_t SoundTriggerHwService::Module::unloadSoundModel_l(sound_model_handle_t handle) +{ ssize_t index = mModels.indexOfKey(handle); if (index < 0) { return BAD_VALUE; @@ -574,6 +589,7 @@ status_t SoundTriggerHwService::Module::unloadSoundModel(sound_model_handle_t ha mModels.removeItem(handle); if (model->mState == Model::STATE_ACTIVE) { mHwDevice->stop_recognition(mHwDevice, model->mHandle); + model->mState = Model::STATE_IDLE; } AudioSystem::releaseSoundTriggerSession(model->mCaptureSession); return mHwDevice->unload_sound_model(mHwDevice, handle); diff --git a/services/soundtrigger/SoundTriggerHwService.h b/services/soundtrigger/SoundTriggerHwService.h index d05dacd..2619a5f 100644 --- a/services/soundtrigger/SoundTriggerHwService.h +++ b/services/soundtrigger/SoundTriggerHwService.h @@ -141,6 +141,9 @@ public: private: + status_t unloadSoundModel_l(sound_model_handle_t handle); + + Mutex mLock; wp<SoundTriggerHwService> mService; struct sound_trigger_hw_device* mHwDevice; |