• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef LOG_TAG
17 #define LOG_TAG "HpaePolicyManager"
18 #endif
19 
20 #include "hpae_policy_manager.h"
21 #include <string>
22 #include "audio_errors.h"
23 #include "audio_effect_chain_manager.h"
24 #include "audio_enhance_chain_manager.h"
25 #include "manager/hdi_adapter_manager.h"
26 #include "audio_engine_log.h"
27 
28 namespace OHOS {
29 namespace AudioStandard {
30 namespace HPAE {
31 
GetInstance()32 HpaePolicyManager &HpaePolicyManager::GetInstance()
33 {
34     static HpaePolicyManager hpaePolicyManager;
35     return hpaePolicyManager;
36 }
37 
HpaePolicyManager()38 HpaePolicyManager::HpaePolicyManager()
39 {
40     AUDIO_DEBUG_LOG("Hpae policy manager created");
41 }
42 
~HpaePolicyManager()43 HpaePolicyManager::~HpaePolicyManager()
44 {
45     AUDIO_WARNING_LOG("Hpae policy manager destroyed");
46 }
47 
InitAudioEffectChainManager(const std::vector<EffectChain> & effectChains,const EffectChainManagerParam & effectChainManagerParam,const std::vector<std::shared_ptr<AudioEffectLibEntry>> & effectLibraryList)48 void HpaePolicyManager::InitAudioEffectChainManager(const std::vector<EffectChain> &effectChains,
49     const EffectChainManagerParam &effectChainManagerParam,
50     const std::vector<std::shared_ptr<AudioEffectLibEntry>> &effectLibraryList)
51 {
52     AudioEffectChainManager::GetInstance()->InitAudioEffectChainManager(effectChains,
53         effectChainManagerParam, effectLibraryList);
54 }
55 
SetOutputDeviceSink(int32_t device,const std::string & sinkName)56 void HpaePolicyManager::SetOutputDeviceSink(int32_t device, const std::string &sinkName)
57 {
58     AudioEffectChainManager::GetInstance()->SetOutputDeviceSink(device, sinkName);
59 }
60 
UpdateSpatializationState(AudioSpatializationState spatializationState)61 int32_t HpaePolicyManager::UpdateSpatializationState(AudioSpatializationState spatializationState)
62 {
63     return AudioEffectChainManager::GetInstance()->UpdateSpatializationState(spatializationState);
64 }
65 
UpdateSpatialDeviceType(AudioSpatialDeviceType spatialDeviceType)66 int32_t HpaePolicyManager::UpdateSpatialDeviceType(AudioSpatialDeviceType spatialDeviceType)
67 {
68     return AudioEffectChainManager::GetInstance()->UpdateSpatialDeviceType(spatialDeviceType);
69 }
70 
SetSpatializationSceneType(AudioSpatializationSceneType spatializationSceneType)71 int32_t HpaePolicyManager::SetSpatializationSceneType(AudioSpatializationSceneType spatializationSceneType)
72 {
73     return AudioEffectChainManager::GetInstance()->SetSpatializationSceneType(spatializationSceneType);
74 }
75 
EffectRotationUpdate(const uint32_t rotationState)76 int32_t HpaePolicyManager::EffectRotationUpdate(const uint32_t rotationState)
77 {
78     return AudioEffectChainManager::GetInstance()->EffectRotationUpdate(rotationState);
79 }
80 
SetEffectSystemVolume(const int32_t systemVolumeType,const float systemVolume)81 int32_t HpaePolicyManager::SetEffectSystemVolume(const int32_t systemVolumeType, const float systemVolume)
82 {
83     return AudioEffectChainManager::GetInstance()->SetEffectSystemVolume(systemVolumeType, systemVolume);
84 }
85 
SetAbsVolumeStateToEffect(const bool absVolumeState)86 int32_t HpaePolicyManager::SetAbsVolumeStateToEffect(const bool absVolumeState)
87 {
88     return AudioEffectChainManager::GetInstance()->SetAbsVolumeStateToEffect(absVolumeState);
89 }
90 
SetAudioEffectProperty(const AudioEffectPropertyArrayV3 & propertyArray)91 int32_t HpaePolicyManager::SetAudioEffectProperty(const AudioEffectPropertyArrayV3 &propertyArray)
92 {
93     return AudioEffectChainManager::GetInstance()->SetAudioEffectProperty(propertyArray);
94 }
95 
GetAudioEffectProperty(AudioEffectPropertyArrayV3 & propertyArray)96 int32_t HpaePolicyManager::GetAudioEffectProperty(AudioEffectPropertyArrayV3 &propertyArray)
97 {
98     return AudioEffectChainManager::GetInstance()->GetAudioEffectProperty(propertyArray);
99 }
100 
SetAudioEffectProperty(const AudioEffectPropertyArray & propertyArray)101 int32_t HpaePolicyManager::SetAudioEffectProperty(const AudioEffectPropertyArray &propertyArray)
102 {
103     return AudioEffectChainManager::GetInstance()->SetAudioEffectProperty(propertyArray);
104 }
105 
GetAudioEffectProperty(AudioEffectPropertyArray & propertyArray)106 int32_t HpaePolicyManager::GetAudioEffectProperty(AudioEffectPropertyArray &propertyArray)
107 {
108     return AudioEffectChainManager::GetInstance()->GetAudioEffectProperty(propertyArray);
109 }
110 
InitHdiState()111 void HpaePolicyManager::InitHdiState()
112 {
113     AudioEffectChainManager::GetInstance()->InitHdiState();
114 }
115 
UpdateEffectBtOffloadSupported(const bool & isSupported)116 void HpaePolicyManager::UpdateEffectBtOffloadSupported(const bool &isSupported)
117 {
118     AudioEffectChainManager::GetInstance()->UpdateEffectBtOffloadSupported(isSupported);
119 }
120 
UpdateParamExtra(const std::string & mainkey,const std::string & subkey,const std::string & value)121 void HpaePolicyManager::UpdateParamExtra(const std::string &mainkey, const std::string &subkey,
122     const std::string &value)
123 {
124     AudioEffectChainManager::GetInstance()->UpdateParamExtra(mainkey, subkey, value);
125 }
126 
InitAudioEnhanceChainManager(const std::vector<EffectChain> & enhanceChains,const EffectChainManagerParam & managerParam,const std::vector<std::shared_ptr<AudioEffectLibEntry>> & enhanceLibraryList)127 void HpaePolicyManager::InitAudioEnhanceChainManager(const std::vector<EffectChain> &enhanceChains,
128     const EffectChainManagerParam &managerParam,
129     const std::vector<std::shared_ptr<AudioEffectLibEntry>> &enhanceLibraryList)
130 {
131     AudioEnhanceChainManager::GetInstance()->InitAudioEnhanceChainManager(enhanceChains, managerParam,
132         enhanceLibraryList);
133 }
134 
SetInputDevice(const uint32_t & captureId,const DeviceType & inputDevice,const std::string & deviceName)135 int32_t HpaePolicyManager::SetInputDevice(const uint32_t &captureId, const DeviceType &inputDevice,
136     const std::string &deviceName)
137 {
138     return AudioEnhanceChainManager::GetInstance()->SetInputDevice(captureId, inputDevice, deviceName);
139 }
140 
SetOutputDevice(const uint32_t & renderId,const DeviceType & outputDevice)141 int32_t HpaePolicyManager::SetOutputDevice(const uint32_t &renderId, const DeviceType &outputDevice)
142 {
143     return AudioEnhanceChainManager::GetInstance()->SetOutputDevice(renderId, outputDevice);
144 }
145 
SetVolumeInfo(const AudioVolumeType & volumeType,const float & systemVol)146 int32_t HpaePolicyManager::SetVolumeInfo(const AudioVolumeType &volumeType, const float &systemVol)
147 {
148     return AudioEnhanceChainManager::GetInstance()->SetVolumeInfo(volumeType, systemVol);
149 }
150 
SetMicrophoneMuteInfo(const bool & isMute)151 int32_t HpaePolicyManager::SetMicrophoneMuteInfo(const bool &isMute)
152 {
153     return AudioEnhanceChainManager::GetInstance()->SetMicrophoneMuteInfo(isMute);
154 }
155 
SetStreamVolumeInfo(const uint32_t & sessionId,const float & streamVol)156 int32_t HpaePolicyManager::SetStreamVolumeInfo(const uint32_t &sessionId, const float &streamVol)
157 {
158     return AudioEnhanceChainManager::GetInstance()->SetStreamVolumeInfo(sessionId, streamVol);
159 }
160 
SetAudioEnhanceProperty(const AudioEffectPropertyArrayV3 & propertyArray,DeviceType deviceType)161 int32_t HpaePolicyManager::SetAudioEnhanceProperty(const AudioEffectPropertyArrayV3 &propertyArray,
162     DeviceType deviceType)
163 {
164     return AudioEnhanceChainManager::GetInstance()->SetAudioEnhanceProperty(propertyArray, deviceType);
165 }
166 
GetAudioEnhanceProperty(AudioEffectPropertyArrayV3 & propertyArray,DeviceType deviceType)167 int32_t HpaePolicyManager::GetAudioEnhanceProperty(AudioEffectPropertyArrayV3 &propertyArray,
168     DeviceType deviceType)
169 {
170     return AudioEnhanceChainManager::GetInstance()->GetAudioEnhanceProperty(propertyArray, deviceType);
171 }
172 
SetAudioEnhanceProperty(const AudioEnhancePropertyArray & propertyArray,DeviceType deviceType)173 int32_t HpaePolicyManager::SetAudioEnhanceProperty(const AudioEnhancePropertyArray &propertyArray,
174     DeviceType deviceType)
175 {
176     return AudioEnhanceChainManager::GetInstance()->SetAudioEnhanceProperty(propertyArray, deviceType);
177 }
178 
179 // todo: change to callback mode
GetAudioEnhanceProperty(AudioEnhancePropertyArray & propertyArray,DeviceType deviceType)180 int32_t HpaePolicyManager::GetAudioEnhanceProperty(AudioEnhancePropertyArray &propertyArray,
181     DeviceType deviceType)
182 {
183     return AudioEnhanceChainManager::GetInstance()->GetAudioEnhanceProperty(propertyArray, deviceType);
184 }
185 
UpdateExtraSceneType(const std::string & mainkey,const std::string & subkey,const std::string & extraSceneType)186 void HpaePolicyManager::UpdateExtraSceneType(const std::string &mainkey, const std::string &subkey,
187     const std::string &extraSceneType)
188 {
189     return AudioEnhanceChainManager::GetInstance()->UpdateExtraSceneType(mainkey, subkey, extraSceneType);
190 }
191 
LoadEffectProperties()192 void HpaePolicyManager::LoadEffectProperties()
193 {
194     return AudioEffectChainManager::GetInstance()->LoadEffectProperties();
195 }
196 
GetAudioParameter(const std::string & adapterName,const AudioParamKey key,const std::string & condition)197 std::string HpaePolicyManager::GetAudioParameter(const std::string &adapterName, const AudioParamKey key,
198     const std::string &condition)
199 {
200     HdiAdapterManager &manager = HdiAdapterManager::GetInstance();
201     std::shared_ptr<IDeviceManager> deviceManager = manager.GetDeviceManager(HDI_DEVICE_MANAGER_TYPE_LOCAL);
202     CHECK_AND_RETURN_RET_LOG(deviceManager != nullptr, "false", "local device manager is nullptr");
203     return deviceManager->GetAudioParameter(adapterName, key, condition);
204 }
205 
SetAudioParameter(const std::string & adapterName,const AudioParamKey key,const std::string & condition,const std::string & value)206 void HpaePolicyManager::SetAudioParameter(const std::string &adapterName, const AudioParamKey key,
207     const std::string &condition, const std::string &value)
208 {
209     HdiAdapterManager &manager = HdiAdapterManager::GetInstance();
210     std::shared_ptr<IDeviceManager> deviceManager = manager.GetDeviceManager(HDI_DEVICE_MANAGER_TYPE_LOCAL);
211     CHECK_AND_RETURN_LOG(deviceManager != nullptr, "local device manager is nullptr");
212     deviceManager->SetAudioParameter(adapterName, key, condition, value);
213 }
214 
SendInitCommandToAlgo()215 void HpaePolicyManager::SendInitCommandToAlgo()
216 {
217     AudioEnhanceChainManager *audioEnhanceChainManager = AudioEnhanceChainManager::GetInstance();
218     CHECK_AND_RETURN_LOG(audioEnhanceChainManager != nullptr, "audioEnhanceChainManager is null");
219     audioEnhanceChainManager->SendInitCommand();
220 }
221 
AddStreamVolumeToEffect(const std::string stringSessionId,const float streamVolume)222 void HpaePolicyManager::AddStreamVolumeToEffect(const std::string stringSessionId, const float streamVolume)
223 {
224     AudioEffectChainManager *audioEffectChainManager = AudioEffectChainManager::GetInstance();
225     CHECK_AND_RETURN_LOG(audioEffectChainManager != nullptr, "null audioEffectChainManager");
226     audioEffectChainManager->StreamVolumeUpdate(stringSessionId, streamVolume);
227 }
228 
DeleteStreamVolumeToEffect(const std::string stringSessionId)229 void HpaePolicyManager::DeleteStreamVolumeToEffect(const std::string stringSessionId)
230 {
231     AudioEffectChainManager *audioEffectChainManager = AudioEffectChainManager::GetInstance();
232     CHECK_AND_RETURN_LOG(audioEffectChainManager != nullptr, "null audioEffectChainManager");
233     audioEffectChainManager->DeleteStreamVolume(stringSessionId);
234 }
235 }  // namespace HPAE
236 }  // namespace AudioStandard
237 }  // namespace OHOS
238