diff --git a/frameworks/native/audioeffect/include/audio_head_tracker.h b/frameworks/native/audioeffect/include/audio_head_tracker.h index d1925e108aedb1d476be3006c07825163c160058..7a0409ca1ac63da8413750afd66f6e5473e30cef 100644 --- a/frameworks/native/audioeffect/include/audio_head_tracker.h +++ b/frameworks/native/audioeffect/include/audio_head_tracker.h @@ -39,6 +39,7 @@ public: int32_t SensorSetConfig(int32_t spatializerEngineState); int32_t SensorActive(); int32_t SensorDeactive(); + int32_t SensorUnsubscribe(); HeadPostureData GetHeadPostureData(); void SetHeadPostureData(HeadPostureData headPostureData); private: diff --git a/frameworks/native/audioeffect/src/audio_effect_chain_manager.cpp b/frameworks/native/audioeffect/src/audio_effect_chain_manager.cpp index 9c779769bf2fd2e10e4756d0d3272260b8e0fe4b..fad8c588d2eba457ebf3f96ce3dc50ca7bfbfd64 100644 --- a/frameworks/native/audioeffect/src/audio_effect_chain_manager.cpp +++ b/frameworks/native/audioeffect/src/audio_effect_chain_manager.cpp @@ -558,7 +558,6 @@ AudioEffectChainManager::AudioEffectChainManager() #ifdef SENSOR_ENABLE headTracker_ = std::make_shared(); - headTracker_->SensorInit(); #endif audioEffectHdi_ = std::make_shared(); @@ -882,6 +881,10 @@ bool AudioEffectChainManager::ExistAudioEffectChain(std::string sceneType, std:: } #endif + if (offloadEnabled_) { + return false; + } + if ((spatializationEnabled == "0") && (GetDeviceTypeName() == "DEVICE_TYPE_BLUETOOTH_A2DP")) { return false; } @@ -983,7 +986,8 @@ int32_t AudioEffectChainManager::UpdateSpatializationState(std::vector spa AUDIO_INFO_LOG("set hdi init."); ret = audioEffectHdi_->UpdateHdiState(effectHdiInput); if (ret != 0) { - AUDIO_WARNING_LOG("set hdi init failed"); + AUDIO_ERR_LOG("set hdi init failed"); + offloadEnabled_ = false; return ERROR; } else { offloadEnabled_ = true; @@ -993,9 +997,10 @@ int32_t AudioEffectChainManager::UpdateSpatializationState(std::vector spa AUDIO_INFO_LOG("set hdi destory."); ret = audioEffectHdi_->UpdateHdiState(effectHdiInput); if (ret != 0) { - AUDIO_WARNING_LOG("set hdi destory failed"); + AUDIO_ERR_LOG("set hdi destory failed"); return ERROR; } + offloadEnabled_ = false; } } if (headTrackingEnabled_ != spatializationState[1]) { @@ -1100,20 +1105,19 @@ void AudioEffectChainManager::UpdateSensorState() { effectHdiInput[0] = HDI_HEAD_MODE; effectHdiInput[1] = headTrackingEnabled_ == true ? 1 : 0; - int32_t ret; - if (headTrackingEnabled_) { - if (offloadEnabled_) { - AUDIO_INFO_LOG("set hdi head mode enable."); - ret = audioEffectHdi_->UpdateHdiState(effectHdiInput); - if (ret != 0) { - AUDIO_ERR_LOG("set hdi head mode enable failed"); - } - } + AUDIO_INFO_LOG("set hdi head mode."); + int32_t ret = audioEffectHdi_->UpdateHdiState(effectHdiInput); + if (ret != 0) { + AUDIO_WARNING_LOG("set hdi head mode failed"); + } + if (headTrackingEnabled_) { #ifdef SENSOR_ENABLE if (offloadEnabled_) { + headTracker_->SensorInit(); headTracker_->SensorSetConfig(DSP_SPATIALIZER_ENGINE); } else { + headTracker_->SensorInit(); headTracker_->SensorSetConfig(ARM_SPATIALIZER_ENGINE); } @@ -1125,11 +1129,6 @@ void AudioEffectChainManager::UpdateSensorState() } if (offloadEnabled_) { - AUDIO_INFO_LOG("set hdi head mode disable."); - ret = audioEffectHdi_->UpdateHdiState(effectHdiInput); - if (ret != 0) { - AUDIO_ERR_LOG("set hdi head mode disable failed"); - } return; } @@ -1137,6 +1136,7 @@ void AudioEffectChainManager::UpdateSensorState() if (headTracker_->SensorDeactive() != 0) { AUDIO_ERR_LOG("SensorDeactive failed"); } + headTracker_->SensorUnsubscribe(); HeadPostureData headPostureData = {1, 1.0, 0.0, 0.0, 0.0}; // ori head posturedata headTracker_->SetHeadPostureData(headPostureData); for (auto it = SceneTypeToEffectChainMap_.begin(); it != SceneTypeToEffectChainMap_.end(); ++it) { diff --git a/frameworks/native/audioeffect/src/audio_head_tracker.cpp b/frameworks/native/audioeffect/src/audio_head_tracker.cpp index 1036185b7b8d002021152fc4d094692a98f02c8f..10150181b3b113cd39825092e58a910746f09ece 100644 --- a/frameworks/native/audioeffect/src/audio_head_tracker.cpp +++ b/frameworks/native/audioeffect/src/audio_head_tracker.cpp @@ -51,12 +51,12 @@ void HeadTracker::HeadPostureDataProcCb(SensorEvent *event) HeadTracker::HeadTracker() { - AUDIO_INFO_LOG("HeadTracker ctor!"); + AUDIO_INFO_LOG("HeadTracker created!"); } HeadTracker::~HeadTracker() { - UnsubscribeSensor(SENSOR_TYPE_ID_HEADPOSTURE, &sensorUser_); + AUDIO_INFO_LOG("HeadTracker destroyed!"); } int32_t HeadTracker::SensorInit() @@ -101,6 +101,11 @@ int32_t HeadTracker::SensorDeactive() return DeactivateSensor(SENSOR_TYPE_ID_HEADPOSTURE, &sensorUser_); } +int32_t HeadTracker::SensorUnsubscribe() +{ + return UnsubscribeSensor(SENSOR_TYPE_ID_HEADPOSTURE, &sensorUser_); +} + HeadPostureData HeadTracker::GetHeadPostureData() { std::lock_guard lock(headTrackerMutex_);