audio spatializer: monitor screen sensor only when needed
Only monitor the screen sensor when the head sensor must also
be monitored:
- spatialization is enabled
- head tracking is requested
- a head pose sensor is registered
- tracks are active on the spatializer output
Also remove excessive verbose log.
Bug: 224623509
Test: boot and check sensors
Change-Id: Icf0e4f69d3d342048decb127c23bf79ff196b8d4
diff --git a/services/audiopolicy/service/Spatializer.cpp b/services/audiopolicy/service/Spatializer.cpp
index d9e89aa..579b852 100644
--- a/services/audiopolicy/service/Spatializer.cpp
+++ b/services/audiopolicy/service/Spatializer.cpp
@@ -300,7 +300,7 @@
if (levelChanged && mEngine != nullptr) {
setEffectParameter_l(SPATIALIZER_PARAM_LEVEL, std::vector<SpatializationLevel>{level});
}
- checkHeadSensor_l();
+ checkSensorsState_l();
}
if (levelChanged) {
@@ -375,7 +375,7 @@
if (mPoseController != nullptr) {
mPoseController->setDesiredMode(mDesiredHeadTrackingMode);
- checkHeadSensor_l();
+ checkSensorsState_l();
}
return Status::ok();
@@ -449,9 +449,7 @@
}
std::lock_guard lock(mLock);
mHeadSensor = sensorHandle;
- if (mPoseController != nullptr) {
- checkHeadSensor_l();
- }
+ checkSensorsState_l();
return Status::ok();
}
@@ -462,9 +460,7 @@
}
std::lock_guard lock(mLock);
mScreenSensor = sensorHandle;
- if (mPoseController != nullptr) {
- mPoseController->setScreenSensor(mScreenSensor);
- }
+ checkSensorsState_l();
return Status::ok();
}
@@ -669,8 +665,7 @@
mPoseController->setDesiredMode(mDesiredHeadTrackingMode);
mNumActiveTracks = numActiveTracks;
- checkHeadSensor_l();
- mPoseController->setScreenSensor(mScreenSensor);
+ checkSensorsState_l();
mPoseController->setDisplayOrientation(mDisplayOrientation);
poseController = mPoseController;
}
@@ -715,17 +710,19 @@
void Spatializer::updateActiveTracks(size_t numActiveTracks) {
std::lock_guard lock(mLock);
mNumActiveTracks = numActiveTracks;
- checkHeadSensor_l();
+ checkSensorsState_l();
}
-void Spatializer::checkHeadSensor_l() {
+void Spatializer::checkSensorsState_l() {
if (mSupportsHeadTracking && mPoseController != nullptr) {
- if(mNumActiveTracks > 0 && mLevel != SpatializationLevel::NONE
+ if (mNumActiveTracks > 0 && mLevel != SpatializationLevel::NONE
&& mDesiredHeadTrackingMode != HeadTrackingMode::STATIC
&& mHeadSensor != SpatializerPoseController::INVALID_SENSOR) {
mPoseController->setHeadSensor(mHeadSensor);
+ mPoseController->setScreenSensor(mScreenSensor);
} else {
mPoseController->setHeadSensor(SpatializerPoseController::INVALID_SENSOR);
+ mPoseController->setScreenSensor(SpatializerPoseController::INVALID_SENSOR);
}
}
}
@@ -746,11 +743,11 @@
switch (event) {
case AudioEffect::EVENT_FRAMES_PROCESSED: {
int frames = info == nullptr ? 0 : *(int*)info;
- ALOGD("%s frames processed %d for me %p", __func__, frames, me);
+ ALOGV("%s frames processed %d for me %p", __func__, frames, me);
me->postFramesProcessedMsg(frames);
} break;
default:
- ALOGD("%s event %d", __func__, event);
+ ALOGV("%s event %d", __func__, event);
break;
}
}