Converting sound trigger v2.2 getModelState to be asynchronous
Test: built android with checkbuild flag
Change-Id: I4c6f2388c93b6e577113fc7f2cd19242628ee50f
Bug-Id: 70206501
diff --git a/core/jni/android_hardware_SoundTrigger.cpp b/core/jni/android_hardware_SoundTrigger.cpp
index b417a56..98bc735 100644
--- a/core/jni/android_hardware_SoundTrigger.cpp
+++ b/core/jni/android_hardware_SoundTrigger.cpp
@@ -788,61 +788,18 @@
return status;
}
-static jobject
+static jint
android_hardware_SoundTrigger_getModelState(JNIEnv *env, jobject thiz,
jint jHandle)
{
+ jint status = SOUNDTRIGGER_STATUS_OK;
ALOGV("getModelState");
sp<SoundTrigger> module = getSoundTrigger(env, thiz);
if (module == NULL) {
- return NULL;
+ return SOUNDTRIGGER_STATUS_ERROR;
}
- sp<IMemory> memory;
- jint status = module->getModelState(jHandle, memory);
- if (status != 0 || memory == NULL) {
- ALOGW("getModelState, failed to get model state, status: %d", status);
- return NULL;
- }
- struct sound_trigger_recognition_event* event =
- (struct sound_trigger_recognition_event *)memory->pointer();
- if (event == NULL) {
- return NULL;
- }
- if (event->type != SOUND_MODEL_TYPE_GENERIC) {
- ALOGW("getModelState, unsupported model type: %d", event->type);
- return NULL;
- }
-
- jbyteArray jData = NULL;
- if (event->data_size) {
- jData = env->NewByteArray(event->data_size);
- jbyte *nData = env->GetByteArrayElements(jData, NULL);
- memcpy(nData, (char *)event + event->data_offset, event->data_size);
- env->ReleaseByteArrayElements(jData, nData, 0);
- }
-
- jobject jAudioFormat = NULL;
- if (event->trigger_in_data || event->capture_available) {
- jAudioFormat = env->NewObject(gAudioFormatClass,
- gAudioFormatCstor,
- audioFormatFromNative(event->audio_config.format),
- event->audio_config.sample_rate,
- inChannelMaskFromNative(event->audio_config.channel_mask));
-
- }
- jobject jEvent = NULL;
- jEvent = env->NewObject(gGenericRecognitionEventClass, gGenericRecognitionEventCstor,
- event->status, event->model, event->capture_available,
- event->capture_session, event->capture_delay_ms,
- event->capture_preamble_ms, event->trigger_in_data,
- jAudioFormat, jData);
- if (jAudioFormat != NULL) {
- env->DeleteLocalRef(jAudioFormat);
- }
- if (jData != NULL) {
- env->DeleteLocalRef(jData);
- }
- return jEvent;
+ status = module->getModelState(jHandle);
+ return status;
}
static const JNINativeMethod gMethods[] = {
@@ -875,7 +832,7 @@
"(I)I",
(void *)android_hardware_SoundTrigger_stopRecognition},
{"getModelState",
- "(I)Landroid/hardware/soundtrigger/SoundTrigger$RecognitionEvent;",
+ "(I)I",
(void *)android_hardware_SoundTrigger_getModelState},
};