spatialier: more head pose controller optimizations

Spatializer:
- do not suppress pose updates when actual head tracking mode is
  disabled
- remove redundant check on mode changed in onActualModeChangeMsg()
- do not wait for pose calculation when creating the head pose
  controller

SpatializerPoseController:
- fix potential race condition between mShouldExit and mShouldCalculate
- allow constuction without maxUpdatePeriod

Bug: 227740874
Test: Spatial audio playback with and without head pose sensor
Change-Id: I92fa5158ba7ffda564a021b03e81b6ff3d124351
diff --git a/services/audiopolicy/service/SpatializerPoseController.h b/services/audiopolicy/service/SpatializerPoseController.h
index 2b5c189..2c6d79a 100644
--- a/services/audiopolicy/service/SpatializerPoseController.h
+++ b/services/audiopolicy/service/SpatializerPoseController.h
@@ -60,10 +60,10 @@
      * Ctor.
      * sensorPeriod determines how often to receive updates from the sensors (input rate).
      * maxUpdatePeriod determines how often to produce an output when calculateAsync() isn't
-     * invoked.
+     * invoked; passing nullopt means an output is never produced.
      */
     SpatializerPoseController(Listener* listener, std::chrono::microseconds sensorPeriod,
-                               std::chrono::microseconds maxUpdatePeriod);
+                               std::optional<std::chrono::microseconds> maxUpdatePeriod);
 
     /** Dtor. */
     ~SpatializerPoseController();