Merge "SpatializerHelper: fix setting desired head tracking mode" into tm-dev

This commit is contained in:
Jean-Michel Trivi
2022-03-28 23:29:02 +00:00
committed by Android (Google) Code Review

View File

@@ -1024,9 +1024,9 @@ public class SpatializerHelper {
mDesiredHeadTrackingMode = mode;
dispatchDesiredHeadTrackingMode(mode);
}
if (mode != headTrackingModeTypeToSpatializerInt(mSpat.getActualHeadTrackingMode())) {
mSpat.setDesiredHeadTrackingMode(spatializerIntToHeadTrackingModeType(mode));
}
Log.i(TAG, "setDesiredHeadTrackingMode("
+ Spatializer.headtrackingModeToString(mode) + ")");
mSpat.setDesiredHeadTrackingMode(spatializerIntToHeadTrackingModeType(mode));
} catch (RemoteException e) {
Log.e(TAG, "Error calling setDesiredHeadTrackingMode", e);
}
@@ -1340,32 +1340,14 @@ public class SpatializerHelper {
}
}
// initialize sensor handles
UUID routingDeviceUuid = mAudioService.getDeviceSensorUuid(ROUTING_DEVICES[0]);
List<Sensor> sensors = new ArrayList<Sensor>(0);
sensors.addAll(mSensorManager.getDynamicSensorList(Sensor.TYPE_HEAD_TRACKER));
sensors.addAll(mSensorManager.getDynamicSensorList(Sensor.TYPE_DEVICE_PRIVATE_BASE));
for (Sensor sensor : sensors) {
if (sensor.getType() == Sensor.TYPE_HEAD_TRACKER
|| sensor.getStringType().equals(HEADTRACKER_SENSOR)) {
UUID uuid = sensor.getUuid();
if (uuid.equals(routingDeviceUuid)) {
headHandle = sensor.getHandle();
// TODO check risk of race condition:
// does this happen before routing is updated?
// avoid by supporting adding device here AND in onRoutingUpdated()
if (!setHasHeadTracker(ROUTING_DEVICES[0])) {
headHandle = -1;
}
break;
}
if (uuid.equals(UuidUtils.STANDALONE_UUID)) {
headHandle = sensor.getHandle();
}
}
}
Sensor screenSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR);
screenHandle = screenSensor.getHandle();
// TODO check risk of race condition for updating the association of a head tracker
// and an audio device:
// does this happen before routing is updated?
// avoid by supporting adding device here AND in onRoutingUpdated()
headHandle = getHeadSensorHandleUpdateTracker();
Log.i(TAG, "head tracker sensor handle initialized to " + headHandle);
screenHandle = getScreenSensorHandle();
Log.i(TAG, "found screen sensor handle initialized to " + screenHandle);
} else {
if (mSensorManager != null && mDynSensorCallback != null) {
mSensorManager.unregisterDynamicSensorCallback(mDynSensorCallback);
@@ -1498,4 +1480,39 @@ public class SpatializerHelper {
}
return false;
}
private int getHeadSensorHandleUpdateTracker() {
int headHandle = -1;
UUID routingDeviceUuid = mAudioService.getDeviceSensorUuid(ROUTING_DEVICES[0]);
List<Sensor> sensors = new ArrayList<Sensor>(0);
sensors.addAll(mSensorManager.getDynamicSensorList(Sensor.TYPE_HEAD_TRACKER));
sensors.addAll(mSensorManager.getDynamicSensorList(Sensor.TYPE_DEVICE_PRIVATE_BASE));
for (Sensor sensor : sensors) {
if (sensor.getType() == Sensor.TYPE_HEAD_TRACKER
|| sensor.getStringType().equals(HEADTRACKER_SENSOR)) {
UUID uuid = sensor.getUuid();
if (uuid.equals(routingDeviceUuid)) {
headHandle = sensor.getHandle();
if (!setHasHeadTracker(ROUTING_DEVICES[0])) {
headHandle = -1;
}
break;
}
if (uuid.equals(UuidUtils.STANDALONE_UUID)) {
headHandle = sensor.getHandle();
break;
}
}
}
return headHandle;
}
private int getScreenSensorHandle() {
int screenHandle = -1;
Sensor screenSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR);
if (screenSensor != null) {
screenHandle = screenSensor.getHandle();
}
return screenHandle;
}
}