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
diff --git a/media/java/android/media/Spatializer.java b/media/java/android/media/Spatializer.java
index f3f8bbe..030d212 100644
--- a/media/java/android/media/Spatializer.java
+++ b/media/java/android/media/Spatializer.java
@@ -215,6 +215,29 @@
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 346ae0f..57ae36ed 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 @@
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 b47ea4f..e6789d5 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.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 @@
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 @@
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 @@
} catch (Exception e) {
Log.e(TAG, "Error calling setHeadSensor:" + headHandle, e);
}
+ setDesiredHeadTrackingMode(mDesiredHeadTrackingMode);
}
//------------------------------------------------------
@@ -983,4 +986,22 @@
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);
+ }
}