SpatializerHelper: fix setting desired head tracking mode
When the desired head tracking mode changes, do not compare against current actual mode, as transient mode could be equal to the desired mode. Instead always set the desired mode when the value changes. Also move head tracker / screen sensor init to dedicated methods for code readability. Bug: 225220771 Test: 5.1 playback with head tracker Change-Id: I1147f6fa5c74a017c32edfe2ff19a578d6b38470
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user