AudioService: SpatializerHelper: native head tracking callback

Migrate native Spatializer callbacks to use new
specific head tracking callback.

Bug: 188502620
Test: make
Change-Id: Ib004153070f44e448f67bd9ac4ed5b5d58bf01d5
This commit is contained in:
Eric Laurent
2021-09-17 11:27:19 +02:00
parent 57f7ff4c0b
commit d709886eaf

View File

@@ -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) {