From d709886eaf0b469b4a53fca095d0b698f30dca07 Mon Sep 17 00:00:00 2001 From: Eric Laurent Date: Fri, 17 Sep 2021 11:27:19 +0200 Subject: [PATCH] AudioService: SpatializerHelper: native head tracking callback Migrate native Spatializer callbacks to use new specific head tracking callback. Bug: 188502620 Test: make Change-Id: Ib004153070f44e448f67bd9ac4ed5b5d58bf01d5 --- .../server/audio/SpatializerHelper.java | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/services/core/java/com/android/server/audio/SpatializerHelper.java b/services/core/java/com/android/server/audio/SpatializerHelper.java index 1d8597497a2c0..6fd5365be1477 100644 --- a/services/core/java/com/android/server/audio/SpatializerHelper.java +++ b/services/core/java/com/android/server/audio/SpatializerHelper.java @@ -26,6 +26,7 @@ import android.media.INativeSpatializerCallback; import android.media.ISpatializer; import android.media.ISpatializerCallback; import android.media.ISpatializerHeadToSoundStagePoseCallback; +import android.media.ISpatializerHeadTrackingCallback; import android.media.ISpatializerHeadTrackingModeCallback; import android.media.Spatializer; import android.media.SpatializerHeadTrackingMode; @@ -71,6 +72,8 @@ public class SpatializerHelper { private int mDesiredHeadTrackingMode = Spatializer.HEAD_TRACKING_MODE_UNSUPPORTED; private @Nullable ISpatializer mSpat; private @Nullable SpatializerCallback mSpatCallback; + private @Nullable SpatializerHeadTrackingCallback mSpatHeadTrackingCallback; + // default attributes and format that determine basic availability of spatialization private static final AudioAttributes DEFAULT_ATTRIBUTES = new AudioAttributes.Builder() @@ -192,9 +195,13 @@ public class SpatializerHelper { } // TODO use reported spat level to change state } + }; + // spatializer head tracking callback from native + private final class SpatializerHeadTrackingCallback + extends ISpatializerHeadTrackingCallback.Stub { public void onHeadTrackingModeChanged(byte mode) { - logd("SpatializerCallback.onHeadTrackingModeChanged mode:" + mode); + logd("SpatializerHeadTrackingCallback.onHeadTrackingModeChanged mode:" + mode); int oldMode, newMode; synchronized (this) { oldMode = mActualHeadTrackingMode; @@ -208,12 +215,13 @@ public class SpatializerHelper { public void onHeadToSoundStagePoseUpdated(float[] headToStage) { if (headToStage == null) { - Log.e(TAG, "SpatializerCallback.onHeadToStagePoseUpdated null transform"); + Log.e(TAG, "SpatializerHeadTrackingCallback.onHeadToStagePoseUpdated" + + "null transform"); return; } if (headToStage.length != 6) { - Log.e(TAG, "SpatializerCallback.onHeadToStagePoseUpdated invalid transform length" - + headToStage.length); + Log.e(TAG, "SpatializerHeadTrackingCallback.onHeadToStagePoseUpdated" + + " invalid transform length" + headToStage.length); return; } if (DEBUG) { @@ -222,7 +230,7 @@ public class SpatializerHelper { for (float val : headToStage) { t.append("[").append(String.format(Locale.ENGLISH, "%.3f", val)).append("]"); } - logd("SpatializerCallback.onHeadToStagePoseUpdated headToStage:" + t); + logd("SpatializerHeadTrackingCallback.onHeadToStagePoseUpdated headToStage:" + t); } dispatchPoseUpdate(headToStage); } @@ -433,9 +441,14 @@ public class SpatializerHelper { private void createSpat() { if (mSpat == null) { mSpatCallback = new SpatializerCallback(); + mSpatHeadTrackingCallback = new SpatializerHeadTrackingCallback(); mSpat = AudioSystem.getSpatializer(mSpatCallback); try { mSpat.setLevel((byte) Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_MULTICHANNEL); + //TODO: register heatracking callback only when sensors are registered + if (mSpat.isHeadTrackingSupported()) { + mSpat.registerHeadTrackingCallback(mSpatHeadTrackingCallback); + } } catch (RemoteException e) { Log.e(TAG, "Can't set spatializer level", e); mState = STATE_NOT_SUPPORTED; @@ -451,6 +464,7 @@ public class SpatializerHelper { if (mSpat != null) { mSpatCallback = null; try { + mSpat.registerHeadTrackingCallback(null); mSpat.release(); mSpat = null; } catch (RemoteException e) {