diff options
18 files changed, 735 insertions, 0 deletions
diff --git a/media/Android.bp b/media/Android.bp index b77c701c78e8..20a9656e0479 100644 --- a/media/Android.bp +++ b/media/Android.bp @@ -133,3 +133,41 @@ aidl_interface { }, } +aidl_interface { + name: "soundtrigger_middleware-aidl", + local_include_dir: "java", + srcs: [ + "java/android/media/soundtrigger_middleware/ConfidenceLevel.aidl", + "java/android/media/soundtrigger_middleware/ISoundTriggerCallback.aidl", + "java/android/media/soundtrigger_middleware/ISoundTriggerMiddlewareService.aidl", + "java/android/media/soundtrigger_middleware/ISoundTriggerModule.aidl", + "java/android/media/soundtrigger_middleware/Phrase.aidl", + "java/android/media/soundtrigger_middleware/PhraseRecognitionEvent.aidl", + "java/android/media/soundtrigger_middleware/PhraseRecognitionExtra.aidl", + "java/android/media/soundtrigger_middleware/PhraseSoundModel.aidl", + "java/android/media/soundtrigger_middleware/RecognitionConfig.aidl", + "java/android/media/soundtrigger_middleware/RecognitionEvent.aidl", + "java/android/media/soundtrigger_middleware/RecognitionMode.aidl", + "java/android/media/soundtrigger_middleware/RecognitionStatus.aidl", + "java/android/media/soundtrigger_middleware/SoundModel.aidl", + "java/android/media/soundtrigger_middleware/SoundModelType.aidl", + "java/android/media/soundtrigger_middleware/SoundTriggerModuleDescriptor.aidl", + "java/android/media/soundtrigger_middleware/SoundTriggerModuleProperties.aidl", + "java/android/media/soundtrigger_middleware/Status.aidl", + ], + backend: + { + cpp: { + enabled: true, + }, + java: { + // Already generated as part of the entire media java library. + enabled: false, + }, + ndk: { + // Not currently needed, and disabled because of b/146172425 + enabled: false, + }, + }, + imports: [ "audio_common-aidl" ], +} diff --git a/media/java/android/media/soundtrigger_middleware/ConfidenceLevel.aidl b/media/java/android/media/soundtrigger_middleware/ConfidenceLevel.aidl new file mode 100644 index 000000000000..3dbc70556bd3 --- /dev/null +++ b/media/java/android/media/soundtrigger_middleware/ConfidenceLevel.aidl @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.media.soundtrigger_middleware; + +/** + * A recognition confidence level. + * This type is used to represent either a threshold or an actual detection confidence level. + * + * {@hide} + */ +parcelable ConfidenceLevel { + /** user ID. */ + int userId; + /** + * Confidence level in percent (0 - 100). + * <ul> + * <li>Min level for recognition configuration + * <li>Detected level for recognition event. + * </ul> + */ + int levelPercent; +} diff --git a/media/java/android/media/soundtrigger_middleware/ISoundTriggerCallback.aidl b/media/java/android/media/soundtrigger_middleware/ISoundTriggerCallback.aidl new file mode 100644 index 000000000000..149c1cd0447b --- /dev/null +++ b/media/java/android/media/soundtrigger_middleware/ISoundTriggerCallback.aidl @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.media.soundtrigger_middleware; + +import android.media.soundtrigger_middleware.RecognitionEvent; +import android.media.soundtrigger_middleware.PhraseRecognitionEvent; + +/** + * Main interface for a client to get notifications of events coming from this module. + * + * {@hide} + */ +oneway interface ISoundTriggerCallback { + /** + * Invoked whenever a recognition event is triggered (typically, on recognition, but also in + * case of external aborting of a recognition or a forced recognition event - see the status + * code in the event for determining). + */ + void onRecognition(int modelHandle, in RecognitionEvent event); + /** + * Invoked whenever a phrase recognition event is triggered (typically, on recognition, but + * also in case of external aborting of a recognition or a forced recognition event - see the + * status code in the event for determining). + */ + void onPhraseRecognition(int modelHandle, in PhraseRecognitionEvent event); + /** + * Notifies the client the recognition has become available after previously having been + * unavailable, or vice versa. This method will always be invoked once immediately after + * attachment, and then every time there is a change in availability. + * When availability changes from available to unavailable, all active recognitions are aborted, + * and this event will be sent in addition to the abort event. + */ + void onRecognitionAvailabilityChange(boolean available); +} diff --git a/media/java/android/media/soundtrigger_middleware/ISoundTriggerMiddlewareService.aidl b/media/java/android/media/soundtrigger_middleware/ISoundTriggerMiddlewareService.aidl new file mode 100644 index 000000000000..80333070b7ce --- /dev/null +++ b/media/java/android/media/soundtrigger_middleware/ISoundTriggerMiddlewareService.aidl @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.media.soundtrigger_middleware; + +import android.media.soundtrigger_middleware.ISoundTriggerModule; +import android.media.soundtrigger_middleware.ISoundTriggerCallback; +import android.media.soundtrigger_middleware.SoundTriggerModuleDescriptor; + +/** + * Main entry point into this module. + * + * Allows the client to enumerate the available soundtrigger devices and their capabilities, then + * attach to either one of them in order to use it. + * + * {@hide} + */ +interface ISoundTriggerMiddlewareService { + /** + * Query the available modules and their capabilities. + */ + SoundTriggerModuleDescriptor[] listModules(); + + /** + * Attach to one of the available modules. + * listModules() must be called prior to calling this method and the provided handle must be + * one of the handles from the returned list. + */ + ISoundTriggerModule attach(int handle, ISoundTriggerCallback callback); + + /** + * Notify the service that external input capture is taking place. This may cause some of the + * active recognitions to be aborted. + */ + void setExternalCaptureState(boolean active); +}
\ No newline at end of file diff --git a/media/java/android/media/soundtrigger_middleware/ISoundTriggerModule.aidl b/media/java/android/media/soundtrigger_middleware/ISoundTriggerModule.aidl new file mode 100644 index 000000000000..202595a9d89c --- /dev/null +++ b/media/java/android/media/soundtrigger_middleware/ISoundTriggerModule.aidl @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.media.soundtrigger_middleware; + +import android.media.soundtrigger_middleware.SoundModel; +import android.media.soundtrigger_middleware.PhraseSoundModel; +import android.media.soundtrigger_middleware.RecognitionConfig; + +/** + * A sound-trigger module. + * + * This interface allows a client to operate a sound-trigger device, intended for low-power + * detection of various sound patterns, represented by a "sound model". + * + * Basic operation is to load a sound model (either a generic one or a "phrase" model), then + * initiate recognition on this model. A trigger will be delivered asynchronously via a callback + * provided by the caller earlier, when attaching to this interface. + * + * In additon to recognition events, this module will also produce abort events in cases where + * recognition has been externally preempted. + * + * {@hide} + */ +interface ISoundTriggerModule { + /** + * Load a sound model. Will return a handle to the model on success or will throw a + * ServiceSpecificException with one of the {@link Status} error codes upon a recoverable error + * (for example, lack of resources of loading a model at the time of call. + * Model must eventually be unloaded using {@link #unloadModel(int)} prior to detaching. + * + * May throw a ServiceSpecificException with an RESOURCE_CONTENTION status to indicate that + * resources required for loading the model are currently consumed by other clients. + */ + int loadModel(in SoundModel model); + + /** + * Load a phrase sound model. Will return a handle to the model on success or will throw a + * ServiceSpecificException with one of the {@link Status} error codes upon a recoverable error + * (for example, lack of resources of loading a model at the time of call. + * Model must eventually be unloaded using unloadModel prior to detaching. + * + * May throw a ServiceSpecificException with an RESOURCE_CONTENTION status to indicate that + * resources required for loading the model are currently consumed by other clients. + */ + int loadPhraseModel(in PhraseSoundModel model); + + /** + * Unload a model, previously loaded with loadModel or loadPhraseModel. After unloading, model + * can no longer be used for recognition and the resources occupied by it are released. + * Model must not be active at the time of unloading. Cient may call stopRecognition to ensure + * that. + */ + void unloadModel(int modelHandle); + + /** + * Initiate recognition on a previously loaded model. + * Recognition event would eventually be delivered via the client-provided callback, typically + * supplied during attachment to this interface. + * + * Once a recognition event is passed to the client, the recognition automatically become + * inactive, unless the event is of the RecognitionStatus.FORCED kind. Client can also shut down + * the recognition explicitly, via stopRecognition. + */ + void startRecognition(int modelHandle, in RecognitionConfig config); + + /** + * Stop a recognition of a previously active recognition. Will NOT generate a recognition event. + * This call is idempotent - calling it on an inactive model has no effect. However, it must + * only be used with a loaded model handle. + */ + void stopRecognition(int modelHandle); + + /** + * Force generation of a recognition event. Handle must be that of a loaded model. If + * recognition is inactive, will do nothing. If recognition is active, will asynchronously + * deliever an event with RecognitionStatus.FORCED status and leave recognition in active state. + * To avoid any race conditions, once an event signalling the automatic stopping of recognition + * is sent, no more forced events will get sent (even if previously requested) until recognition + * is explicitly started again. + * + * Since not all module implementations support this feature, may throw a + * ServiceSpecificException with an OPERATION_NOT_SUPPORTED status. + */ + void forceRecognitionEvent(int modelHandle); + + /** + * Detach from the module, releasing any active resources. + * This will ensure the client callback is no longer called after this call returns. + * All models must have been unloaded prior to calling this method. + */ + void detach(); +}
\ No newline at end of file diff --git a/media/java/android/media/soundtrigger_middleware/Phrase.aidl b/media/java/android/media/soundtrigger_middleware/Phrase.aidl new file mode 100644 index 000000000000..98a489f8a6a9 --- /dev/null +++ b/media/java/android/media/soundtrigger_middleware/Phrase.aidl @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.media.soundtrigger_middleware; + +/** + * Key phrase descriptor. + * + * {@hide} + */ +parcelable Phrase { + /** Unique keyphrase ID assigned at enrollment time. */ + int id; + /** Recognition modes supported by this key phrase (bitfield of RecognitionMode enum). */ + int recognitionModes; + /** List of users IDs associated with this key phrase. */ + int[] users; + /** Locale - Java Locale style (e.g. en_US). */ + String locale; + /** Phrase text. */ + String text; +} diff --git a/media/java/android/media/soundtrigger_middleware/PhraseRecognitionEvent.aidl b/media/java/android/media/soundtrigger_middleware/PhraseRecognitionEvent.aidl new file mode 100644 index 000000000000..6a3ec61d1ebf --- /dev/null +++ b/media/java/android/media/soundtrigger_middleware/PhraseRecognitionEvent.aidl @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.media.soundtrigger_middleware; + +import android.media.soundtrigger_middleware.PhraseRecognitionExtra; +import android.media.soundtrigger_middleware.RecognitionEvent; + +/** + * An event that gets sent to indicate a phrase recognition (or aborting of the recognition + process). + * {@hide} + */ +parcelable PhraseRecognitionEvent { + /** Common recognition event. */ + RecognitionEvent common; + /** List of descriptors for each recognized key phrase */ + PhraseRecognitionExtra[] phraseExtras; +} diff --git a/media/java/android/media/soundtrigger_middleware/PhraseRecognitionExtra.aidl b/media/java/android/media/soundtrigger_middleware/PhraseRecognitionExtra.aidl new file mode 100644 index 000000000000..cb96bf37a95d --- /dev/null +++ b/media/java/android/media/soundtrigger_middleware/PhraseRecognitionExtra.aidl @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.media.soundtrigger_middleware; + +import android.media.soundtrigger_middleware.ConfidenceLevel; + +/** + * Specialized recognition event for key phrase detection. + * {@hide} + */ +parcelable PhraseRecognitionExtra { + // TODO(ytai): Constants / enums. + + /** keyphrase ID */ + int id; + /** recognition modes used for this keyphrase */ + int recognitionModes; + /** confidence level for mode RECOGNITION_MODE_VOICE_TRIGGER */ + int confidenceLevel; + /** number of user confidence levels */ + ConfidenceLevel[] levels; +} diff --git a/media/java/android/media/soundtrigger_middleware/PhraseSoundModel.aidl b/media/java/android/media/soundtrigger_middleware/PhraseSoundModel.aidl new file mode 100644 index 000000000000..81028c1608ea --- /dev/null +++ b/media/java/android/media/soundtrigger_middleware/PhraseSoundModel.aidl @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.media.soundtrigger_middleware; + +import android.media.soundtrigger_middleware.SoundModel; +import android.media.soundtrigger_middleware.Phrase; + +/** + * Specialized sound model for key phrase detection. + * Proprietary representation of key phrases in binary data must match + * information indicated by phrases field. + * {@hide} + */ +parcelable PhraseSoundModel { + /** Common part of sound model descriptor */ + SoundModel common; + /** List of descriptors for key phrases supported by this sound model */ + Phrase[] phrases; +} diff --git a/media/java/android/media/soundtrigger_middleware/RecognitionConfig.aidl b/media/java/android/media/soundtrigger_middleware/RecognitionConfig.aidl new file mode 100644 index 000000000000..c7642e8c1241 --- /dev/null +++ b/media/java/android/media/soundtrigger_middleware/RecognitionConfig.aidl @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.media.soundtrigger_middleware; + +import android.media.soundtrigger_middleware.PhraseRecognitionExtra; + +/** + * Configuration for tuning behavior of an active recognition process. + * {@hide} + */ +parcelable RecognitionConfig { + /* Capture and buffer audio for this recognition instance. */ + boolean captureRequested; + + /* Configuration for each key phrase. */ + PhraseRecognitionExtra[] phraseRecognitionExtras; + + /** Opaque capture configuration data. */ + byte[] data; +} diff --git a/media/java/android/media/soundtrigger_middleware/RecognitionEvent.aidl b/media/java/android/media/soundtrigger_middleware/RecognitionEvent.aidl new file mode 100644 index 000000000000..de4d060ce484 --- /dev/null +++ b/media/java/android/media/soundtrigger_middleware/RecognitionEvent.aidl @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.media.soundtrigger_middleware; + +import android.media.audio.common.AudioConfig; +import android.media.soundtrigger_middleware.RecognitionStatus; +import android.media.soundtrigger_middleware.SoundModelType; + +/** + * An event that gets sent to indicate a recognition (or aborting of the recognition process). + * {@hide} + */ +parcelable RecognitionEvent { + /** Recognition status. */ + RecognitionStatus status; + /** Event type, same as sound model type. */ + SoundModelType type; + /** Is it possible to capture audio from this utterance buffered by the implementation. */ + boolean captureAvailable; + /* Audio session ID. framework use. */ + int captureSession; + /** + * Delay in ms between end of model detection and start of audio available for capture. + * A negative value is possible (e.g. if key phrase is also available for Capture. + */ + int captureDelayMs; + /** Duration in ms of audio captured before the start of the trigger. 0 if none. */ + int capturePreambleMs; + /** If true, the 'data' field below contains the capture of the trigger sound. */ + boolean triggerInData; + /** + * Audio format of either the trigger in event data or to use for capture of the rest of the + * utterance. + */ + AudioConfig audioConfig; + /** Additional data. */ + byte[] data; +} diff --git a/media/java/android/media/soundtrigger_middleware/RecognitionMode.aidl b/media/java/android/media/soundtrigger_middleware/RecognitionMode.aidl new file mode 100644 index 000000000000..d8bfff4bec6f --- /dev/null +++ b/media/java/android/media/soundtrigger_middleware/RecognitionMode.aidl @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.media.soundtrigger_middleware; + +/** + * Recognition mode. + * {@hide} + */ +@Backing(type="int") +enum RecognitionMode { + /** Simple voice trigger. */ + VOICE_TRIGGER = 0x1, + /** Trigger only if one user in model identified. */ + USER_IDENTIFICATION = 0x2, + /** Trigger only if one user in model authenticated. */ + USER_AUTHENTICATION = 0x4, + /** Generic sound trigger. */ + GENERIC_TRIGGER = 0x8, +} diff --git a/media/java/android/media/soundtrigger_middleware/RecognitionStatus.aidl b/media/java/android/media/soundtrigger_middleware/RecognitionStatus.aidl new file mode 100644 index 000000000000..d563edca547d --- /dev/null +++ b/media/java/android/media/soundtrigger_middleware/RecognitionStatus.aidl @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.media.soundtrigger_middleware; + +/** + * A status for indicating the type of a recognition event. + * {@hide} + */ +@Backing(type="int") +enum RecognitionStatus { + /** Recognition success. */ + SUCCESS = 0, + /** Recognition aborted (e.g. capture preempted by another use-case. */ + ABORTED = 1, + /** Recognition failure. */ + FAILURE = 2, + /** + * Recognition event was triggered by a forceRecognitionEvent request, not by the DSP. + * Note that forced detections *do not* stop the active recognition, unlike the other types. + */ + FORCED = 3 +} diff --git a/media/java/android/media/soundtrigger_middleware/SoundModel.aidl b/media/java/android/media/soundtrigger_middleware/SoundModel.aidl new file mode 100644 index 000000000000..fba1ee507836 --- /dev/null +++ b/media/java/android/media/soundtrigger_middleware/SoundModel.aidl @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.media.soundtrigger_middleware; + +import android.media.soundtrigger_middleware.SoundModelType; + +/** + * Base sound model descriptor. This struct can be extended for various specific types by way of + * aggregation. + * {@hide} + */ +parcelable SoundModel { + /** Model type. */ + SoundModelType type; + /** Unique sound model ID. */ + String uuid; + /** + * Unique vendor ID. Identifies the engine the sound model + * was build for */ + String vendorUuid; + /** Opaque data transparent to Android framework */ + byte[] data; +} diff --git a/media/java/android/media/soundtrigger_middleware/SoundModelType.aidl b/media/java/android/media/soundtrigger_middleware/SoundModelType.aidl new file mode 100644 index 000000000000..f2abc9af7780 --- /dev/null +++ b/media/java/android/media/soundtrigger_middleware/SoundModelType.aidl @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.media.soundtrigger_middleware; + +/** + * Sound model type. + * {@hide} + */ +@Backing(type="int") +enum SoundModelType { + /** Unspecified sound model type */ + UNKNOWN = -1, + /** Key phrase sound models */ + KEYPHRASE = 0, + /** All models other than keyphrase */ + GENERIC = 1, +} diff --git a/media/java/android/media/soundtrigger_middleware/SoundTriggerModuleDescriptor.aidl b/media/java/android/media/soundtrigger_middleware/SoundTriggerModuleDescriptor.aidl new file mode 100644 index 000000000000..667135ff61b9 --- /dev/null +++ b/media/java/android/media/soundtrigger_middleware/SoundTriggerModuleDescriptor.aidl @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.media.soundtrigger_middleware; + +import android.media.soundtrigger_middleware.SoundTriggerModuleProperties; + +/** + * A descriptor of an available sound trigger module, containing the handle used to reference the + * module, as well its capabilities. + * {@hide} + */ +parcelable SoundTriggerModuleDescriptor { + /** Module handle to be used for attaching to it. */ + int handle; + /** Module capabilities. */ + SoundTriggerModuleProperties properties; +} + diff --git a/media/java/android/media/soundtrigger_middleware/SoundTriggerModuleProperties.aidl b/media/java/android/media/soundtrigger_middleware/SoundTriggerModuleProperties.aidl new file mode 100644 index 000000000000..1a3b40261a62 --- /dev/null +++ b/media/java/android/media/soundtrigger_middleware/SoundTriggerModuleProperties.aidl @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.media.soundtrigger_middleware; + +/** + * Capabilities of a sound trigger module. + * {@hide} + */ +parcelable SoundTriggerModuleProperties { + /** Implementor name */ + String implementor; + /** Implementation description */ + String description; + /** Implementation version */ + int version; + /** + * Unique implementation ID. The UUID must change with each version of + the engine implementation */ + String uuid; + /** Maximum number of concurrent sound models loaded */ + int maxSoundModels; + /** Maximum number of key phrases */ + int maxKeyPhrases; + /** Maximum number of concurrent users detected */ + int maxUsers; + /** All supported modes. e.g RecognitionMode.VOICE_TRIGGER */ + int recognitionModes; + /** Supports seamless transition from detection to capture */ + boolean captureTransition; + /** Maximum buffering capacity in ms if captureTransition is true */ + int maxBufferMs; + /** Supports capture by other use cases while detection is active */ + boolean concurrentCapture; + /** Returns the trigger capture in event */ + boolean triggerInEvent; + /** + * Rated power consumption when detection is active with TDB + * silence/sound/speech ratio */ + int powerConsumptionMw; +} diff --git a/media/java/android/media/soundtrigger_middleware/Status.aidl b/media/java/android/media/soundtrigger_middleware/Status.aidl new file mode 100644 index 000000000000..d8f9d8f7e891 --- /dev/null +++ b/media/java/android/media/soundtrigger_middleware/Status.aidl @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.media.soundtrigger_middleware; + +/** + * {@hide} + */ +@Backing(type="int") +enum Status { + /** Success. */ + SUCCESS = 0, + /** Failure due to resource contention. This is typically a temporary condition. */ + RESOURCE_CONTENTION = 1, + /** Operation is not supported in this implementation. This is a permanent condition. */ + OPERATION_NOT_SUPPORTED = 2, +} |