Loading services/audiopolicy/service/Spatializer.cpp +4 −17 Original line number Diff line number Diff line Loading @@ -459,9 +459,7 @@ Status Spatializer::setScreenSensor(int sensorHandle) { } std::lock_guard lock(mLock); mScreenSensor = sensorHandle; if (mPoseController != nullptr) { mPoseController->setScreenSensor(mScreenSensor); } checkSensorsState_l(); return Status::ok(); } Loading Loading @@ -569,9 +567,6 @@ void Spatializer::onHeadToStagePoseMsg(const std::vector<float>& headToStage) { sp<media::ISpatializerHeadTrackingCallback> callback; { std::lock_guard lock(mLock); if (mActualHeadTrackingMode == SpatializerHeadTrackingMode::DISABLED) { return; } callback = mHeadTrackingCallback; if (mEngine != nullptr) { setEffectParameter_l(SPATIALIZER_PARAM_HEAD_TO_STAGE, headToStage); Loading @@ -595,7 +590,6 @@ void Spatializer::onActualModeChangeMsg(HeadTrackingMode mode) { ALOGV("%s(%d)", __func__, (int) mode); sp<media::ISpatializerHeadTrackingCallback> callback; SpatializerHeadTrackingMode spatializerMode; bool modeChanged = false; { std::lock_guard lock(mLock); if (!mSupportsHeadTracking) { Loading @@ -615,21 +609,19 @@ void Spatializer::onActualModeChangeMsg(HeadTrackingMode mode) { LOG_ALWAYS_FATAL("Unknown mode: %d", mode); } } modeChanged = mActualHeadTrackingMode != spatializerMode; mActualHeadTrackingMode = spatializerMode; if (modeChanged && mEngine != nullptr) { if (mEngine != nullptr) { setEffectParameter_l(SPATIALIZER_PARAM_HEADTRACKING_MODE, std::vector<SpatializerHeadTrackingMode>{spatializerMode}); } callback = mHeadTrackingCallback; } if (callback != nullptr && modeChanged) { if (callback != nullptr) { callback->onHeadTrackingModeChanged(spatializerMode); } } status_t Spatializer::attachOutput(audio_io_handle_t output, size_t numActiveTracks) { std::shared_ptr<SpatializerPoseController> poseController; bool outputChanged = false; sp<media::INativeSpatializerCallback> callback; Loading Loading @@ -663,14 +655,9 @@ status_t Spatializer::attachOutput(audio_io_handle_t output, size_t numActiveTra if (mSupportsHeadTracking) { checkPoseController_l(); checkSensorsState_l(); poseController = mPoseController; } callback = mSpatializerCallback; } if (poseController != nullptr) { poseController->calculateAsync(); poseController->waitUntilCalculated(); } if (outputChanged && callback != nullptr) { callback->onOutputChanged(output); Loading Loading @@ -750,7 +737,7 @@ void Spatializer::checkPoseController_l() { if (isControllerNeeded && mPoseController == nullptr) { mPoseController = std::make_shared<SpatializerPoseController>( static_cast<SpatializerPoseController::Listener*>(this), 10ms, std::chrono::microseconds::max()); 10ms, std::nullopt); LOG_ALWAYS_FATAL_IF(mPoseController == nullptr, "%s could not allocate pose controller", __func__); mPoseController->setDisplayOrientation(mDisplayOrientation); Loading services/audiopolicy/service/SpatializerPoseController.cpp +8 −4 Original line number Diff line number Diff line Loading @@ -80,7 +80,7 @@ constexpr auto kTicksPerSecond = Ticks::period::den; SpatializerPoseController::SpatializerPoseController(Listener* listener, std::chrono::microseconds sensorPeriod, std::chrono::microseconds maxUpdatePeriod) std::optional<std::chrono::microseconds> maxUpdatePeriod) : mListener(listener), mSensorPeriod(sensorPeriod), mProcessor(createHeadTrackingProcessor(HeadTrackingProcessor::Options{ Loading @@ -102,8 +102,12 @@ SpatializerPoseController::SpatializerPoseController(Listener* listener, std::optional<HeadTrackingMode> modeIfChanged; { std::unique_lock lock(mMutex); mCondVar.wait_for(lock, maxUpdatePeriod, if (maxUpdatePeriod.has_value()) { mCondVar.wait_for(lock, maxUpdatePeriod.value(), [this] { return mShouldExit || mShouldCalculate; }); } else { mCondVar.wait(lock, [this] { return mShouldExit || mShouldCalculate; }); } if (mShouldExit) { ALOGV("Exiting thread"); return; Loading services/audiopolicy/service/SpatializerPoseController.h +2 −2 Original line number Diff line number Diff line Loading @@ -60,10 +60,10 @@ class SpatializerPoseController : private media::SensorPoseProvider::Listener { * 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(); Loading Loading
services/audiopolicy/service/Spatializer.cpp +4 −17 Original line number Diff line number Diff line Loading @@ -459,9 +459,7 @@ Status Spatializer::setScreenSensor(int sensorHandle) { } std::lock_guard lock(mLock); mScreenSensor = sensorHandle; if (mPoseController != nullptr) { mPoseController->setScreenSensor(mScreenSensor); } checkSensorsState_l(); return Status::ok(); } Loading Loading @@ -569,9 +567,6 @@ void Spatializer::onHeadToStagePoseMsg(const std::vector<float>& headToStage) { sp<media::ISpatializerHeadTrackingCallback> callback; { std::lock_guard lock(mLock); if (mActualHeadTrackingMode == SpatializerHeadTrackingMode::DISABLED) { return; } callback = mHeadTrackingCallback; if (mEngine != nullptr) { setEffectParameter_l(SPATIALIZER_PARAM_HEAD_TO_STAGE, headToStage); Loading @@ -595,7 +590,6 @@ void Spatializer::onActualModeChangeMsg(HeadTrackingMode mode) { ALOGV("%s(%d)", __func__, (int) mode); sp<media::ISpatializerHeadTrackingCallback> callback; SpatializerHeadTrackingMode spatializerMode; bool modeChanged = false; { std::lock_guard lock(mLock); if (!mSupportsHeadTracking) { Loading @@ -615,21 +609,19 @@ void Spatializer::onActualModeChangeMsg(HeadTrackingMode mode) { LOG_ALWAYS_FATAL("Unknown mode: %d", mode); } } modeChanged = mActualHeadTrackingMode != spatializerMode; mActualHeadTrackingMode = spatializerMode; if (modeChanged && mEngine != nullptr) { if (mEngine != nullptr) { setEffectParameter_l(SPATIALIZER_PARAM_HEADTRACKING_MODE, std::vector<SpatializerHeadTrackingMode>{spatializerMode}); } callback = mHeadTrackingCallback; } if (callback != nullptr && modeChanged) { if (callback != nullptr) { callback->onHeadTrackingModeChanged(spatializerMode); } } status_t Spatializer::attachOutput(audio_io_handle_t output, size_t numActiveTracks) { std::shared_ptr<SpatializerPoseController> poseController; bool outputChanged = false; sp<media::INativeSpatializerCallback> callback; Loading Loading @@ -663,14 +655,9 @@ status_t Spatializer::attachOutput(audio_io_handle_t output, size_t numActiveTra if (mSupportsHeadTracking) { checkPoseController_l(); checkSensorsState_l(); poseController = mPoseController; } callback = mSpatializerCallback; } if (poseController != nullptr) { poseController->calculateAsync(); poseController->waitUntilCalculated(); } if (outputChanged && callback != nullptr) { callback->onOutputChanged(output); Loading Loading @@ -750,7 +737,7 @@ void Spatializer::checkPoseController_l() { if (isControllerNeeded && mPoseController == nullptr) { mPoseController = std::make_shared<SpatializerPoseController>( static_cast<SpatializerPoseController::Listener*>(this), 10ms, std::chrono::microseconds::max()); 10ms, std::nullopt); LOG_ALWAYS_FATAL_IF(mPoseController == nullptr, "%s could not allocate pose controller", __func__); mPoseController->setDisplayOrientation(mDisplayOrientation); Loading
services/audiopolicy/service/SpatializerPoseController.cpp +8 −4 Original line number Diff line number Diff line Loading @@ -80,7 +80,7 @@ constexpr auto kTicksPerSecond = Ticks::period::den; SpatializerPoseController::SpatializerPoseController(Listener* listener, std::chrono::microseconds sensorPeriod, std::chrono::microseconds maxUpdatePeriod) std::optional<std::chrono::microseconds> maxUpdatePeriod) : mListener(listener), mSensorPeriod(sensorPeriod), mProcessor(createHeadTrackingProcessor(HeadTrackingProcessor::Options{ Loading @@ -102,8 +102,12 @@ SpatializerPoseController::SpatializerPoseController(Listener* listener, std::optional<HeadTrackingMode> modeIfChanged; { std::unique_lock lock(mMutex); mCondVar.wait_for(lock, maxUpdatePeriod, if (maxUpdatePeriod.has_value()) { mCondVar.wait_for(lock, maxUpdatePeriod.value(), [this] { return mShouldExit || mShouldCalculate; }); } else { mCondVar.wait(lock, [this] { return mShouldExit || mShouldCalculate; }); } if (mShouldExit) { ALOGV("Exiting thread"); return; Loading
services/audiopolicy/service/SpatializerPoseController.h +2 −2 Original line number Diff line number Diff line Loading @@ -60,10 +60,10 @@ class SpatializerPoseController : private media::SensorPoseProvider::Listener { * 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(); Loading