summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Thornton <thorntonc@google.com>2017-04-30 19:46:39 -0700
committerChris Thornton <thorntonc@google.com>2017-05-03 17:49:39 -0700
commit7554ff0e8413c83e43f6092bb359678508564fc7 (patch)
tree91807b516b5b3efb988021b10320e3b0d992a068
parent9328f3238211d787af8acf7e07ee7173939e42e7 (diff)
Add getData() member to SoundTriggerDetector.EventPayload.
If the HAL populates the recognition event with data that isn't trigger audio, it's currently impossible for clients to actually read that opaque data. By adding this getter, clients who understand how the detection engine works can react to whatever is in the data blob. Test: Modify SoundTriggerTestApp to verify that the data is accessible. Change-Id: I8a9feccab98e2d15653dd55f28a43095f8ee1e44
-rw-r--r--media/java/android/media/soundtrigger/SoundTriggerDetector.java20
-rw-r--r--tests/SoundTriggerTestApp/src/com/android/test/soundtrigger/SoundTriggerTestService.java16
2 files changed, 33 insertions, 3 deletions
diff --git a/media/java/android/media/soundtrigger/SoundTriggerDetector.java b/media/java/android/media/soundtrigger/SoundTriggerDetector.java
index d5296ae42031..c091c84df657 100644
--- a/media/java/android/media/soundtrigger/SoundTriggerDetector.java
+++ b/media/java/android/media/soundtrigger/SoundTriggerDetector.java
@@ -137,7 +137,7 @@ public final class SoundTriggerDetector {
}
/**
- * Gets the raw audio that triggered the keyphrase.
+ * Gets the raw audio that triggered the detector.
* This may be null if the trigger audio isn't available.
* If non-null, the format of the audio can be obtained by calling
* {@link #getCaptureAudioFormat()}.
@@ -154,6 +154,24 @@ public final class SoundTriggerDetector {
}
/**
+ * Gets the opaque data passed from the detection engine for the event.
+ * This may be null if it was not populated by the engine, or if the data is known to
+ * contain the trigger audio.
+ *
+ * @see #getTriggerAudio
+ *
+ * @hide
+ */
+ @Nullable
+ public byte[] getData() {
+ if (!mTriggerAvailable) {
+ return mData;
+ } else {
+ return null;
+ }
+ }
+
+ /**
* Gets the session ID to start a capture from the DSP.
* This may be null if streaming capture isn't possible.
* If non-null, the format of the audio that can be captured can be
diff --git a/tests/SoundTriggerTestApp/src/com/android/test/soundtrigger/SoundTriggerTestService.java b/tests/SoundTriggerTestApp/src/com/android/test/soundtrigger/SoundTriggerTestService.java
index b550cfad74cf..00bf33ad691e 100644
--- a/tests/SoundTriggerTestApp/src/com/android/test/soundtrigger/SoundTriggerTestService.java
+++ b/tests/SoundTriggerTestApp/src/com/android/test/soundtrigger/SoundTriggerTestService.java
@@ -689,8 +689,20 @@ public class SoundTriggerTestService extends Service {
AudioFormat format = event.getCaptureAudioFormat();
result = result + "AudioFormat: " + ((format == null) ? "null" : format.toString());
byte[] triggerAudio = event.getTriggerAudio();
- result = result + "TriggerAudio: " + (triggerAudio == null ? "null" : triggerAudio.length);
- result = result + "CaptureSession: " + event.getCaptureSession();
+ result = result + ", TriggerAudio: " + (triggerAudio == null ? "null" : triggerAudio.length);
+ byte[] data = event.getData();
+ result = result + ", Data: " + (data == null ? "null" : data.length);
+ if (data != null) {
+ try {
+ String decodedData = new String(data, "UTF-8");
+ if (decodedData.chars().allMatch(c -> (c >= 32 && c < 128) || c == 0)) {
+ result = result + ", Decoded Data: '" + decodedData + "'";
+ }
+ } catch (Exception e) {
+ Log.e(TAG, "Failed to decode data");
+ }
+ }
+ result = result + ", CaptureSession: " + event.getCaptureSession();
result += " )";
return result;
}