summaryrefslogtreecommitdiffstats
path: root/services/soundtrigger/SoundTriggerHwService.cpp
diff options
context:
space:
mode:
authorEric Laurent <elaurent@google.com>2014-11-21 02:54:54 +0000
committerandroid-build-merger <android-build-merger@google.com>2014-11-21 02:54:54 +0000
commit58cc16ef6b3a6d0e26566203cc6c094a8c036bc7 (patch)
treed427e75aaaeb24337f720fcb7a549ad3daeeaab0 /services/soundtrigger/SoundTriggerHwService.cpp
parentc63c09738772133e9b20a7c8576ad116ff855ee2 (diff)
parent30dee177d25bf75f8b3fb8a70573de2c04306759 (diff)
downloadframeworks_av-58cc16ef6b3a6d0e26566203cc6c094a8c036bc7.zip
frameworks_av-58cc16ef6b3a6d0e26566203cc6c094a8c036bc7.tar.gz
frameworks_av-58cc16ef6b3a6d0e26566203cc6c094a8c036bc7.tar.bz2
am 8052d933: Merge "SoundTrigger: allow sound model reloading" into lmp-mr1-dev
automerge: 30dee17 * commit '30dee177d25bf75f8b3fb8a70573de2c04306759': SoundTrigger: allow sound model reloading
Diffstat (limited to 'services/soundtrigger/SoundTriggerHwService.cpp')
-rw-r--r--services/soundtrigger/SoundTriggerHwService.cpp16
1 files changed, 16 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);