diff options
| author | 2020-01-10 17:09:00 +0000 | |
|---|---|---|
| committer | 2020-01-10 17:09:00 +0000 | |
| commit | bcc216f21251131e31edce8bbc3d1e01972e65f2 (patch) | |
| tree | 3861e2036f659f5b95277c849705fb0c1970fb10 | |
| parent | b2a5c297964caccb07345beef5ca6fd9a583a7df (diff) | |
| parent | 38027cd86019378a50b5d211852809df4d7d439e (diff) | |
Merge "add supportedModelArch to SoundTrigger properties"
9 files changed, 115 insertions, 18 deletions
diff --git a/api/system-current.txt b/api/system-current.txt index 63a8b4d6ca91..b7ea0e617cef 100755 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -3566,6 +3566,7 @@ package android.hardware.soundtrigger { field public final int powerConsumptionMw; field public final int recognitionModes; field public final boolean returnsTriggerInEvent; + field @NonNull public final String supportedModelArch; field public final boolean supportsCaptureTransition; field public final boolean supportsConcurrentCapture; field @NonNull public final java.util.UUID uuid; diff --git a/core/java/android/hardware/soundtrigger/ConversionUtil.java b/core/java/android/hardware/soundtrigger/ConversionUtil.java index d2721018ef52..43f3787e15da 100644 --- a/core/java/android/hardware/soundtrigger/ConversionUtil.java +++ b/core/java/android/hardware/soundtrigger/ConversionUtil.java @@ -47,6 +47,7 @@ class ConversionUtil { properties.description, properties.uuid, properties.version, + properties.supportedModelArch, properties.maxSoundModels, properties.maxKeyPhrases, properties.maxUsers, diff --git a/core/java/android/hardware/soundtrigger/SoundTrigger.java b/core/java/android/hardware/soundtrigger/SoundTrigger.java index 2f0752b7c209..d87200931830 100644 --- a/core/java/android/hardware/soundtrigger/SoundTrigger.java +++ b/core/java/android/hardware/soundtrigger/SoundTrigger.java @@ -101,6 +101,14 @@ public class SoundTrigger { /** Voice detection engine version */ public final int version; + /** + * String naming the architecture used for running the supported models. + * (eg. a platform running models on a DSP could implement this string to convey the DSP + * architecture used) + */ + @NonNull + public final String supportedModelArch; + /** Maximum number of active sound models */ public final int maxSoundModels; @@ -130,15 +138,17 @@ public class SoundTrigger { public final boolean returnsTriggerInEvent; ModuleProperties(int id, @NonNull String implementor, @NonNull String description, - @NonNull String uuid, int version, int maxSoundModels, int maxKeyphrases, - int maxUsers, int recognitionModes, boolean supportsCaptureTransition, - int maxBufferMs, boolean supportsConcurrentCapture, - int powerConsumptionMw, boolean returnsTriggerInEvent) { + @NonNull String uuid, int version, @NonNull String supportedModelArch, + int maxSoundModels, int maxKeyphrases, int maxUsers, int recognitionModes, + boolean supportsCaptureTransition, int maxBufferMs, + boolean supportsConcurrentCapture, int powerConsumptionMw, + boolean returnsTriggerInEvent) { this.id = id; this.implementor = requireNonNull(implementor); this.description = requireNonNull(description); this.uuid = UUID.fromString(requireNonNull(uuid)); this.version = version; + this.supportedModelArch = requireNonNull(supportedModelArch); this.maxSoundModels = maxSoundModels; this.maxKeyphrases = maxKeyphrases; this.maxUsers = maxUsers; @@ -167,6 +177,7 @@ public class SoundTrigger { String description = in.readString(); String uuid = in.readString(); int version = in.readInt(); + String supportedModelArch = in.readString(); int maxSoundModels = in.readInt(); int maxKeyphrases = in.readInt(); int maxUsers = in.readInt(); @@ -177,7 +188,7 @@ public class SoundTrigger { int powerConsumptionMw = in.readInt(); boolean returnsTriggerInEvent = in.readByte() == 1; return new ModuleProperties(id, implementor, description, uuid, version, - maxSoundModels, maxKeyphrases, maxUsers, recognitionModes, + supportedModelArch, maxSoundModels, maxKeyphrases, maxUsers, recognitionModes, supportsCaptureTransition, maxBufferMs, supportsConcurrentCapture, powerConsumptionMw, returnsTriggerInEvent); } @@ -189,6 +200,7 @@ public class SoundTrigger { dest.writeString(description); dest.writeString(uuid.toString()); dest.writeInt(version); + dest.writeString(supportedModelArch); dest.writeInt(maxSoundModels); dest.writeInt(maxKeyphrases); dest.writeInt(maxUsers); @@ -208,7 +220,8 @@ public class SoundTrigger { @Override public String toString() { return "ModuleProperties [id=" + id + ", implementor=" + implementor + ", description=" - + description + ", uuid=" + uuid + ", version=" + version + ", maxSoundModels=" + + description + ", uuid=" + uuid + ", version=" + version + + " , supportedModelArch=" + supportedModelArch + ", maxSoundModels=" + maxSoundModels + ", maxKeyphrases=" + maxKeyphrases + ", maxUsers=" + maxUsers + ", recognitionModes=" + recognitionModes + ", supportsCaptureTransition=" + supportsCaptureTransition + ", maxBufferMs=" diff --git a/media/java/android/media/soundtrigger_middleware/SoundTriggerModuleProperties.aidl b/media/java/android/media/soundtrigger_middleware/SoundTriggerModuleProperties.aidl index 1a3b40261a62..909f1a00006f 100644 --- a/media/java/android/media/soundtrigger_middleware/SoundTriggerModuleProperties.aidl +++ b/media/java/android/media/soundtrigger_middleware/SoundTriggerModuleProperties.aidl @@ -30,6 +30,14 @@ parcelable SoundTriggerModuleProperties { * Unique implementation ID. The UUID must change with each version of the engine implementation */ String uuid; + /** + * String naming the architecture used for running the supported models. + * (eg. a platform running models on a DSP could implement this string to convey the DSP + * architecture used) + * This property is supported for soundtrigger HAL v2.3 and above. + * If running a previous version, the string will be empty. + */ + String supportedModelArch; /** Maximum number of concurrent sound models loaded */ int maxSoundModels; /** Maximum number of key phrases */ diff --git a/services/core/java/com/android/server/soundtrigger_middleware/ConversionUtil.java b/services/core/java/com/android/server/soundtrigger_middleware/ConversionUtil.java index 0b89646bbed1..8385f406f13d 100644 --- a/services/core/java/com/android/server/soundtrigger_middleware/ConversionUtil.java +++ b/services/core/java/com/android/server/soundtrigger_middleware/ConversionUtil.java @@ -21,6 +21,7 @@ import android.annotation.Nullable; import android.hardware.audio.common.V2_0.Uuid; import android.hardware.soundtrigger.V2_1.ISoundTriggerHwCallback; import android.hardware.soundtrigger.V2_3.ISoundTriggerHw; +import android.hardware.soundtrigger.V2_3.Properties; import android.media.audio.common.AudioConfig; import android.media.audio.common.AudioOffloadInfo; import android.media.soundtrigger_middleware.ConfidenceLevel; @@ -69,6 +70,13 @@ class ConversionUtil { return aidlProperties; } + static @NonNull SoundTriggerModuleProperties hidl2aidlProperties( + @NonNull Properties hidlProperties) { + SoundTriggerModuleProperties aidlProperties = hidl2aidlProperties(hidlProperties.base); + aidlProperties.supportedModelArch = hidlProperties.supportedModelArch; + return aidlProperties; + } + static @NonNull String hidl2aidlUuid(@NonNull Uuid hidlUuid) { if (hidlUuid.node == null || hidlUuid.node.length != 6) { diff --git a/services/core/java/com/android/server/soundtrigger_middleware/Hw2CompatUtil.java b/services/core/java/com/android/server/soundtrigger_middleware/Hw2CompatUtil.java index f0a0d8305bc6..dbf91a984bda 100644 --- a/services/core/java/com/android/server/soundtrigger_middleware/Hw2CompatUtil.java +++ b/services/core/java/com/android/server/soundtrigger_middleware/Hw2CompatUtil.java @@ -74,4 +74,12 @@ class Hw2CompatUtil { config_2_0.data = HidlMemoryUtil.hidlMemoryToByteList(config.data); return config_2_0; } + + static android.hardware.soundtrigger.V2_3.Properties convertProperties_2_0_to_2_3( + android.hardware.soundtrigger.V2_0.ISoundTriggerHw.Properties properties) { + android.hardware.soundtrigger.V2_3.Properties properties_2_3 = + new android.hardware.soundtrigger.V2_3.Properties(); + properties_2_3.base = properties; + return properties_2_3; + } } diff --git a/services/core/java/com/android/server/soundtrigger_middleware/ISoundTriggerHw2.java b/services/core/java/com/android/server/soundtrigger_middleware/ISoundTriggerHw2.java index 81252c9a8c14..2f024a50a276 100644 --- a/services/core/java/com/android/server/soundtrigger_middleware/ISoundTriggerHw2.java +++ b/services/core/java/com/android/server/soundtrigger_middleware/ISoundTriggerHw2.java @@ -16,7 +16,6 @@ package com.android.server.soundtrigger_middleware; -import android.hardware.soundtrigger.V2_3.ISoundTriggerHw; import android.hardware.soundtrigger.V2_3.ModelParameterRange; import android.hidl.base.V1_0.IBase; import android.os.IHwBinder; @@ -54,9 +53,10 @@ import android.os.IHwBinder; */ public interface ISoundTriggerHw2 { /** - * @see android.hardware.soundtrigger.V2_2.ISoundTriggerHw#getProperties(android.hardware.soundtrigger.V2_0.ISoundTriggerHw.getPropertiesCallback + * @see android.hardware.soundtrigger.V2_3.ISoundTriggerHw#getPropertiesEx( + * android.hardware.soundtrigger.V2_3.ISoundTriggerHw.getPropertiesExCallback) */ - android.hardware.soundtrigger.V2_1.ISoundTriggerHw.Properties getProperties(); + android.hardware.soundtrigger.V2_3.Properties getProperties(); /** * @see android.hardware.soundtrigger.V2_2.ISoundTriggerHw#loadSoundModel_2_1(android.hardware.soundtrigger.V2_1.ISoundTriggerHw.SoundModel, diff --git a/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerHw2Compat.java b/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerHw2Compat.java index 4a852c4b68e8..3354c561b57a 100644 --- a/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerHw2Compat.java +++ b/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerHw2Compat.java @@ -112,18 +112,23 @@ final class SoundTriggerHw2Compat implements ISoundTriggerHw2 { } @Override - public android.hardware.soundtrigger.V2_1.ISoundTriggerHw.Properties getProperties() { + public android.hardware.soundtrigger.V2_3.Properties getProperties() { try { AtomicInteger retval = new AtomicInteger(-1); - AtomicReference<android.hardware.soundtrigger.V2_1.ISoundTriggerHw.Properties> + AtomicReference<android.hardware.soundtrigger.V2_3.Properties> properties = new AtomicReference<>(); - as2_0().getProperties( - (r, p) -> { - retval.set(r); - properties.set(p); - }); - handleHalStatus(retval.get(), "getProperties"); + try { + as2_3().getProperties_2_3( + (r, p) -> { + retval.set(r); + properties.set(p); + }); + } catch (NotSupported e) { + // Fall-back to the 2.0 version: + return getProperties_2_0(); + } + handleHalStatus(retval.get(), "getProperties_2_3"); return properties.get(); } catch (RemoteException e) { throw e.rethrowAsRuntimeException(); @@ -312,6 +317,21 @@ final class SoundTriggerHw2Compat implements ISoundTriggerHw2 { return as2_0().interfaceDescriptor(); } + private android.hardware.soundtrigger.V2_3.Properties getProperties_2_0() + throws RemoteException { + AtomicInteger retval = new AtomicInteger(-1); + AtomicReference<android.hardware.soundtrigger.V2_0.ISoundTriggerHw.Properties> + properties = + new AtomicReference<>(); + as2_0().getProperties( + (r, p) -> { + retval.set(r); + properties.set(p); + }); + handleHalStatus(retval.get(), "getProperties"); + return Hw2CompatUtil.convertProperties_2_0_to_2_3(properties.get()); + } + private int loadSoundModel_2_0( android.hardware.soundtrigger.V2_1.ISoundTriggerHw.SoundModel soundModel, Callback callback, int cookie) diff --git a/services/tests/servicestests/src/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImplTest.java b/services/tests/servicestests/src/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImplTest.java index f8915c06b555..0f75816082fd 100644 --- a/services/tests/servicestests/src/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImplTest.java +++ b/services/tests/servicestests/src/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImplTest.java @@ -155,7 +155,16 @@ public class SoundTriggerMiddlewareImplTest { return properties; } - private static void validateDefaultProperties(SoundTriggerModuleProperties properties, + private static android.hardware.soundtrigger.V2_3.Properties createDefaultProperties_2_3( + boolean supportConcurrentCapture) { + android.hardware.soundtrigger.V2_3.Properties properties = + new android.hardware.soundtrigger.V2_3.Properties(); + properties.base = createDefaultProperties(supportConcurrentCapture); + properties.supportedModelArch = "supportedModelArch"; + return properties; + } + + private void validateDefaultProperties(SoundTriggerModuleProperties properties, boolean supportConcurrentCapture) { assertEquals("implementor", properties.implementor); assertEquals("description", properties.description); @@ -173,8 +182,20 @@ public class SoundTriggerMiddlewareImplTest { assertEquals(supportConcurrentCapture, properties.concurrentCapture); assertTrue(properties.triggerInEvent); assertEquals(432, properties.powerConsumptionMw); + + if (mHalDriver instanceof android.hardware.soundtrigger.V2_3.ISoundTriggerHw) { + assertEquals("supportedModelArch", properties.supportedModelArch); + } else { + assertEquals("", properties.supportedModelArch); + } } + private void verifyNotGetProperties() throws RemoteException { + if (mHalDriver instanceof android.hardware.soundtrigger.V2_3.ISoundTriggerHw) { + verify((android.hardware.soundtrigger.V2_3.ISoundTriggerHw) mHalDriver, + never()).getProperties(any()); + } + } private static android.hardware.soundtrigger.V2_0.ISoundTriggerHwCallback.RecognitionEvent createRecognitionEvent_2_0( int hwHandle, @@ -290,6 +311,22 @@ public class SoundTriggerMiddlewareImplTest { properties); return null; }).when(mHalDriver).getProperties(any()); + + if (mHalDriver instanceof android.hardware.soundtrigger.V2_3.ISoundTriggerHw) { + android.hardware.soundtrigger.V2_3.ISoundTriggerHw driver = + (android.hardware.soundtrigger.V2_3.ISoundTriggerHw) mHalDriver; + doAnswer(invocation -> { + android.hardware.soundtrigger.V2_3.Properties properties = + createDefaultProperties_2_3( + supportConcurrentCapture); + ((android.hardware.soundtrigger.V2_3.ISoundTriggerHw.getProperties_2_3Callback) + invocation.getArgument( + 0)).onValues(0, + properties); + return null; + }).when(driver).getProperties_2_3(any()); + } + mService = new SoundTriggerMiddlewareImpl(mHalDriver, mAudioSessionProvider); } @@ -716,6 +753,7 @@ public class SoundTriggerMiddlewareImplTest { SoundTriggerModuleProperties properties = allDescriptors[0].properties; validateDefaultProperties(properties, true); + verifyNotGetProperties(); } @Test |