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

Commit 2961a353 authored by Ryan Bavetta's avatar Ryan Bavetta Committed by Android (Google) Code Review
Browse files

Merge "Add SoundTrigger GenericSoundModel type"

parents feb76cc0 00a727c4
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;
                }
            }
        }
    }