Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 02eb47cf authored by Eric Laurent's avatar Eric Laurent
Browse files

SoundTrigger: allow sound model reloading

Allow reloading a sound model without unloading it before.

Bug: 18308781.
Change-Id: I31c83b81a03ee1c1e80f4339ca62e6d06fb1a33b
parent ec9459c6
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -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);
+3 −0
Original line number Diff line number Diff line
@@ -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;