summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorRoman Birg <roman@cyngn.com>2016-05-03 11:54:28 -0700
committerGerrit Code Review <gerrit@cyanogenmod.org>2016-05-04 13:52:19 -0700
commite67a2babcccf11e5209afc39d368eb79b1d35c21 (patch)
tree7cd7b3386d285be982796e23012def141680b0c8 /services
parentbcd1d7c5905d66aa682c4b5a9dfe59189aeecabd (diff)
downloadframeworks_av-e67a2babcccf11e5209afc39d368eb79b1d35c21.zip
frameworks_av-e67a2babcccf11e5209afc39d368eb79b1d35c21.tar.gz
frameworks_av-e67a2babcccf11e5209afc39d368eb79b1d35c21.tar.bz2
soundtrigger: fill in default extras from dsp
We seem to get an improper offset when getting the value from the DSP (offset 100, data size 1), when this happens, return a new phrase event with valid extras which are initialized to some default values. Change-Id: Ie041f78fec6bdbcd82286b54a7b7fb0c98c740f5 Signed-off-by: Roman Birg <roman@cyngn.com>
Diffstat (limited to 'services')
-rw-r--r--services/soundtrigger/SoundTriggerHwService.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/services/soundtrigger/SoundTriggerHwService.cpp b/services/soundtrigger/SoundTriggerHwService.cpp
index 9de6fe2..371c81a 100644
--- a/services/soundtrigger/SoundTriggerHwService.cpp
+++ b/services/soundtrigger/SoundTriggerHwService.cpp
@@ -270,6 +270,37 @@ void SoundTriggerHwService::sendRecognitionEvent(struct sound_trigger_recognitio
if (module == NULL) {
return;
}
+ if (event-> type == SOUND_MODEL_TYPE_KEYPHRASE && event->data_size != 0
+ && event->data_offset != sizeof(struct sound_trigger_phrase_recognition_event)) {
+ // set some defaults for the phrase if the recognition event won't be parsed properly
+ // TODO: read defaults from the config
+
+ struct sound_trigger_phrase_recognition_event newEvent;
+ memset(&newEvent, 0, sizeof(struct sound_trigger_phrase_recognition_event));
+
+ sp<Model> model = module->getModel(event->model);
+
+ newEvent.num_phrases = 1;
+ newEvent.phrase_extras[0].id = 100;
+ newEvent.phrase_extras[0].recognition_modes = RECOGNITION_MODE_VOICE_TRIGGER;
+ newEvent.phrase_extras[0].confidence_level = 100;
+ newEvent.phrase_extras[0].num_levels = 1;
+ newEvent.phrase_extras[0].levels[0].level = 100;
+ newEvent.phrase_extras[0].levels[0].user_id = 100;
+ newEvent.common.status = event->status;
+ newEvent.common.type = event->type;
+ newEvent.common.model = event->model;
+ newEvent.common.capture_available = event->capture_available;
+ newEvent.common.capture_session = event->capture_session;
+ newEvent.common.capture_delay_ms = event->capture_delay_ms;
+ newEvent.common.capture_preamble_ms = event->capture_preamble_ms;
+ newEvent.common.trigger_in_data = event->trigger_in_data;
+ newEvent.common.audio_config = event->audio_config;
+ newEvent.common.data_size = event->data_size;
+ newEvent.common.data_offset = sizeof(struct sound_trigger_phrase_recognition_event);
+
+ event = &newEvent.common;
+ }
sp<IMemory> eventMemory = prepareRecognitionEvent_l(event);
if (eventMemory == 0) {
return;