diff options
| author | 2022-01-17 11:36:24 -0800 | |
|---|---|---|
| committer | 2022-01-17 13:49:51 -0800 | |
| commit | c3681aa19306c819547fee7bf76505d7a16c0834 (patch) | |
| tree | 2ce31d8667d73bf4ea6022978c753fe97d6ca6a5 | |
| parent | 9b33de7b01e0ddaccbc5344b2eeec7ef5c264715 (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
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); + } } |