summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jean-Michel Trivi <jmtrivi@google.com> 2022-01-17 11:36:24 -0800
committer Jean-Michel Trivi <jmtrivi@google.com> 2022-01-17 13:49:51 -0800
commitc3681aa19306c819547fee7bf76505d7a16c0834 (patch)
tree2ce31d8667d73bf4ea6022978c753fe97d6ca6a5
parent9b33de7b01e0ddaccbc5344b2eeec7ef5c264715 (diff)
SpatializerHelper: head tracking init / dump
When initializing the sensors, also set the headtracking mode to the desired mode, which defaults to RELATIVE_WORLD. When changing the desired tracking mode, compare against the current tracking mode instead of the previous desired mode. Dump state information from AudioService dump. Bug: 210803914 Test: atest SpatializerTest#testHeadTrackingListener Change-Id: I5144d3218223f241cf047d00f843c518c1e617b8
-rw-r--r--media/java/android/media/Spatializer.java23
-rw-r--r--services/core/java/com/android/server/audio/AudioService.java1
-rw-r--r--services/core/java/com/android/server/audio/SpatializerHelper.java29
3 files changed, 49 insertions, 4 deletions
diff --git a/media/java/android/media/Spatializer.java b/media/java/android/media/Spatializer.java
index f3f8bbe22637..030d212825ee 100644
--- a/media/java/android/media/Spatializer.java
+++ b/media/java/android/media/Spatializer.java
@@ -215,6 +215,29 @@ public class Spatializer {
public static final int HEAD_TRACKING_MODE_RELATIVE_DEVICE = 2;
/**
+ * @hide
+ * Head tracking mode to string conversion
+ * @param mode a valid head tracking mode
+ * @return a string containing the matching constant name
+ */
+ public static final String headtrackingModeToString(int mode) {
+ switch(mode) {
+ case HEAD_TRACKING_MODE_UNSUPPORTED:
+ return "HEAD_TRACKING_MODE_UNSUPPORTED";
+ case HEAD_TRACKING_MODE_DISABLED:
+ return "HEAD_TRACKING_MODE_DISABLED";
+ case HEAD_TRACKING_MODE_OTHER:
+ return "HEAD_TRACKING_MODE_OTHER";
+ case HEAD_TRACKING_MODE_RELATIVE_WORLD:
+ return "HEAD_TRACKING_MODE_RELATIVE_WORLD";
+ case HEAD_TRACKING_MODE_RELATIVE_DEVICE:
+ return "HEAD_TRACKING_MODE_RELATIVE_DEVICE";
+ default:
+ return "head tracking mode unknown " + mode;
+ }
+ }
+
+ /**
* Return the level of support for the spatialization feature on this device.
* This level of support is independent of whether the {@code Spatializer} is currently
* enabled or available and will not change over time.
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java
index 346ae0fed2e1..57ae36ed906b 100644
--- a/services/core/java/com/android/server/audio/AudioService.java
+++ b/services/core/java/com/android/server/audio/AudioService.java
@@ -9408,6 +9408,7 @@ public class AudioService extends IAudioService.Stub
pw.println("mHasSpatializerEffect:" + mHasSpatializerEffect);
pw.println("isSpatializerEnabled:" + isSpatializerEnabled());
pw.println("isSpatialAudioEnabled:" + isSpatialAudioEnabled());
+ mSpatializerHelper.dump(pw);
mAudioSystem.dump(pw);
}
diff --git a/services/core/java/com/android/server/audio/SpatializerHelper.java b/services/core/java/com/android/server/audio/SpatializerHelper.java
index b47ea4f7a4b8..e6789d5e1d49 100644
--- a/services/core/java/com/android/server/audio/SpatializerHelper.java
+++ b/services/core/java/com/android/server/audio/SpatializerHelper.java
@@ -39,6 +39,7 @@ import android.os.RemoteCallbackList;
import android.os.RemoteException;
import android.util.Log;
+import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
@@ -84,7 +85,7 @@ public class SpatializerHelper {
private int mSpatLevel = Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_NONE;
private int mCapableSpatLevel = Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_NONE;
private int mActualHeadTrackingMode = Spatializer.HEAD_TRACKING_MODE_UNSUPPORTED;
- private int mDesiredHeadTrackingMode = Spatializer.HEAD_TRACKING_MODE_UNSUPPORTED;
+ private int mDesiredHeadTrackingMode = Spatializer.HEAD_TRACKING_MODE_RELATIVE_WORLD;
private int mSpatOutput = 0;
private @Nullable ISpatializer mSpat;
private @Nullable SpatializerCallback mSpatCallback;
@@ -681,12 +682,13 @@ public class SpatializerHelper {
return;
}
try {
- if (mode != mDesiredHeadTrackingMode) {
- mSpat.setDesiredHeadTrackingMode(spatializerIntToHeadTrackingModeType(mode));
+ if (mDesiredHeadTrackingMode != mode) {
mDesiredHeadTrackingMode = mode;
dispatchDesiredHeadTrackingMode(mode);
}
-
+ if (mode != headTrackingModeTypeToSpatializerInt(mSpat.getActualHeadTrackingMode())) {
+ mSpat.setDesiredHeadTrackingMode(spatializerIntToHeadTrackingModeType(mode));
+ }
} catch (RemoteException e) {
Log.e(TAG, "Error calling setDesiredHeadTrackingMode", e);
}
@@ -937,6 +939,7 @@ public class SpatializerHelper {
} catch (Exception e) {
Log.e(TAG, "Error calling setHeadSensor:" + headHandle, e);
}
+ setDesiredHeadTrackingMode(mDesiredHeadTrackingMode);
}
//------------------------------------------------------
@@ -983,4 +986,22 @@ public class SpatializerHelper {
throw(new IllegalArgumentException("Unexpected spatializer level:" + level));
}
}
+
+ void dump(PrintWriter pw) {
+ pw.println("SpatializerHelper:");
+ pw.println("\tmState:" + mState);
+ pw.println("\tmSpatLevel:" + mSpatLevel);
+ pw.println("\tmCapableSpatLevel:" + mCapableSpatLevel);
+ pw.println("\tmActualHeadTrackingMode:"
+ + Spatializer.headtrackingModeToString(mActualHeadTrackingMode));
+ pw.println("\tmDesiredHeadTrackingMode:"
+ + Spatializer.headtrackingModeToString(mDesiredHeadTrackingMode));
+ String modesString = "";
+ int[] modes = getSupportedHeadTrackingModes();
+ for (int mode : modes) {
+ modesString += Spatializer.headtrackingModeToString(mode) + " ";
+ }
+ pw.println("\tsupported head tracking modes:" + modesString);
+ pw.println("\tmSpatOutput:" + mSpatOutput);
+ }
}