Loading services/soundtrigger/SoundTriggerHwService.cpp +34 −19 Original line number Diff line number Diff line Loading @@ -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), Loading Loading @@ -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; } } } } Loading Loading
services/soundtrigger/SoundTriggerHwService.cpp +34 −19 Original line number Diff line number Diff line Loading @@ -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), Loading Loading @@ -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; } } } } Loading