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

Commit 00a727c4 authored by Ryan Bavetta's avatar Ryan Bavetta
Browse files

Add SoundTrigger GenericSoundModel type

BUG: 22860713
Change-Id: I462ba039577511674a08aee42e3f1941ff7005ce
parent e0db3086
Loading
Loading
Loading
Loading
+34 −19
Original line number Diff line number Diff line
@@ -241,6 +241,13 @@ sp<IMemory> SoundTriggerHwService::prepareRecognitionEvent_l(
                    event->data_offset);
        event->data_offset = sizeof(struct sound_trigger_phrase_recognition_event);
        break;
    case SOUND_MODEL_TYPE_GENERIC:
        ALOGW_IF(event->data_size != 0 && event->data_offset !=
                    sizeof(struct sound_trigger_generic_recognition_event),
                    "prepareRecognitionEvent_l(): invalid data offset %u for generic event type",
                    event->data_offset);
        event->data_offset = sizeof(struct sound_trigger_generic_recognition_event);
        break;
    case SOUND_MODEL_TYPE_UNKNOWN:
        ALOGW_IF(event->data_size != 0 && event->data_offset !=
                    sizeof(struct sound_trigger_recognition_event),
@@ -786,27 +793,35 @@ void SoundTriggerHwService::Module::setCaptureState_l(bool active)
            if (model->mState == Model::STATE_ACTIVE) {
                mHwDevice->stop_recognition(mHwDevice, model->mHandle);
                // keep model in ACTIVE state so that event is processed by onCallbackEvent()
                struct sound_trigger_phrase_recognition_event phraseEvent;
                memset(&phraseEvent, 0, sizeof(struct sound_trigger_phrase_recognition_event));
                switch (model->mType) {
                case SOUND_MODEL_TYPE_KEYPHRASE:
                    phraseEvent.num_phrases = model->mConfig.num_phrases;
                    for (size_t i = 0; i < phraseEvent.num_phrases; i++) {
                        phraseEvent.phrase_extras[i] = model->mConfig.phrases[i];
                    }
                    break;
                case SOUND_MODEL_TYPE_UNKNOWN:
                default:
                    break;
                if (model->mType == SOUND_MODEL_TYPE_KEYPHRASE) {
                    struct sound_trigger_phrase_recognition_event event;
                    memset(&event, 0, sizeof(struct sound_trigger_phrase_recognition_event));
                    event.num_phrases = model->mConfig.num_phrases;
                    for (size_t i = 0; i < event.num_phrases; i++) {
                        event.phrase_extras[i] = model->mConfig.phrases[i];
                    }
                    event.common.status = RECOGNITION_STATUS_ABORT;
                    event.common.type = model->mType;
                    event.common.model = model->mHandle;
                    event.common.data_size = 0;
                    sp<IMemory> eventMemory = service->prepareRecognitionEvent_l(&event.common);
                    if (eventMemory != 0) {
                        events.add(eventMemory);
                    }
                phraseEvent.common.status = RECOGNITION_STATUS_ABORT;
                phraseEvent.common.type = model->mType;
                phraseEvent.common.model = model->mHandle;
                phraseEvent.common.data_size = 0;
                sp<IMemory> eventMemory = service->prepareRecognitionEvent_l(&phraseEvent.common);
                } else if (model->mType == SOUND_MODEL_TYPE_GENERIC) {
                    struct sound_trigger_generic_recognition_event event;
                    memset(&event, 0, sizeof(struct sound_trigger_generic_recognition_event));
                    event.common.status = RECOGNITION_STATUS_ABORT;
                    event.common.type = model->mType;
                    event.common.model = model->mHandle;
                    event.common.data_size = 0;
                    sp<IMemory> eventMemory = service->prepareRecognitionEvent_l(&event.common);
                    if (eventMemory != 0) {
                        events.add(eventMemory);
                    }
                } else {
                    goto exit;
                }
            }
        }
    }