• 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 "AudioGeneralManager"
18 #endif
19 
20 #include "audio_general_manager.h"
21 
22 #include <mutex>
23 #include <unistd.h>
24 #include "audio_common_log.h"
25 #include "audio_errors.h"
26 #include "audio_focus_info_change_callback_impl.h"
27 #include "audio_policy_manager.h"
28 #include "audio_utils.h"
29 #include "iservice_registry.h"
30 #include "system_ability_definition.h"
31 
32 namespace OHOS {
33 namespace AudioStandard {
34 constexpr unsigned int XCOLLIE_TIME_OUT_SECONDS = 10;
35 std::mutex g_asManagerProxyMutex;
36 sptr<IStandardAudioService> g_asManagerProxy = nullptr;
37 
GetInstance()38 AudioGeneralManager *AudioGeneralManager::GetInstance()
39 {
40     static AudioGeneralManager AudioGeneralManager;
41     return &AudioGeneralManager;
42 }
43 
AudioGeneralManager()44 AudioGeneralManager::AudioGeneralManager()
45 {
46     AUDIO_DEBUG_LOG("AudioGeneralManager start");
47 }
48 
~AudioGeneralManager()49 AudioGeneralManager::~AudioGeneralManager()
50 {
51     AUDIO_DEBUG_LOG("AudioGeneralManager end");
52 }
53 
GetCallingPid()54 int32_t AudioGeneralManager::GetCallingPid()
55 {
56     return getpid();
57 }
58 
SetAudioDeviceRefinerCallback(const std::shared_ptr<AudioDeviceRefiner> & callback)59 int32_t AudioGeneralManager::SetAudioDeviceRefinerCallback(const std::shared_ptr<AudioDeviceRefiner> &callback)
60 {
61     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
62 
63     return AudioPolicyManager::GetInstance().SetAudioDeviceRefinerCallback(callback);
64 }
65 
SetAudioClientInfoMgrCallback(const std::shared_ptr<AudioClientInfoMgrCallback> & callback)66 int32_t AudioGeneralManager::SetAudioClientInfoMgrCallback(
67     const std::shared_ptr<AudioClientInfoMgrCallback> &callback)
68 {
69     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
70 
71     return AudioPolicyManager::GetInstance().SetAudioClientInfoMgrCallback(callback);
72 }
73 
GetPreferredOutputDeviceForRendererInfo(AudioRendererInfo rendererInfo,std::vector<std::shared_ptr<AudioDeviceDescriptor>> & desc)74 int32_t AudioGeneralManager::GetPreferredOutputDeviceForRendererInfo(AudioRendererInfo rendererInfo,
75     std::vector<std::shared_ptr<AudioDeviceDescriptor>> &desc)
76 {
77     desc = AudioPolicyManager::GetInstance().GetPreferredOutputDeviceDescriptors(rendererInfo);
78 
79     return SUCCESS;
80 }
81 
UnsetAudioDeviceRefinerCallback()82 int32_t AudioGeneralManager::UnsetAudioDeviceRefinerCallback()
83 {
84     return AudioPolicyManager::GetInstance().UnsetAudioDeviceRefinerCallback();
85 }
86 
SaveRemoteInfo(const std::string & networkId,DeviceType deviceType)87 void AudioGeneralManager::SaveRemoteInfo(const std::string &networkId, DeviceType deviceType)
88 {
89     AudioPolicyManager::GetInstance().SaveRemoteInfo(networkId, deviceType);
90 }
91 
TriggerFetchDevice(AudioStreamDeviceChangeReasonExt reason)92 int32_t AudioGeneralManager::TriggerFetchDevice(AudioStreamDeviceChangeReasonExt reason)
93 {
94     return AudioPolicyManager::GetInstance().TriggerFetchDevice(reason);
95 }
96 
SetPreferredDevice(const PreferredType preferredType,const std::shared_ptr<AudioDeviceDescriptor> & desc,const int32_t uid)97 int32_t AudioGeneralManager::SetPreferredDevice(const PreferredType preferredType,
98     const std::shared_ptr<AudioDeviceDescriptor> &desc, const int32_t uid)
99 {
100     return AudioPolicyManager::GetInstance().SetPreferredDevice(preferredType, desc, uid);
101 }
102 
SetPreferredOutputDeviceChangeCallback(AudioRendererInfo rendererInfo,const std::shared_ptr<AudioPreferredOutputDeviceChangeCallback> & callback)103 int32_t AudioGeneralManager::SetPreferredOutputDeviceChangeCallback(AudioRendererInfo rendererInfo,
104     const std::shared_ptr<AudioPreferredOutputDeviceChangeCallback>& callback)
105 {
106     AUDIO_INFO_LOG("Entered %{public}s", __func__);
107     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
108 
109     return AudioPolicyManager::GetInstance().SetPreferredOutputDeviceChangeCallback(rendererInfo, callback);
110 }
111 
RegisterFocusInfoChangeCallback(const std::shared_ptr<AudioFocusInfoChangeCallback> & callback)112 int32_t AudioGeneralManager::RegisterFocusInfoChangeCallback(
113     const std::shared_ptr<AudioFocusInfoChangeCallback> &callback)
114 {
115     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is null");
116 
117     int32_t clientId = GetCallingPid();
118     AUDIO_DEBUG_LOG("RegisterFocusInfoChangeCallback clientId:%{public}d", clientId);
119     if (audioFocusInfoCallback_ == nullptr) {
120         audioFocusInfoCallback_ = std::make_shared<AudioFocusInfoChangeCallbackImpl>();
121         CHECK_AND_RETURN_RET_LOG(audioFocusInfoCallback_ != nullptr, ERROR,
122             "Failed to allocate memory for audioInterruptCallback");
123         int32_t ret = AudioPolicyManager::GetInstance().RegisterFocusInfoChangeCallback(clientId,
124             audioFocusInfoCallback_);
125         CHECK_AND_RETURN_RET_LOG(ret == SUCCESS, ERROR, "Failed set callback");
126     }
127 
128     std::shared_ptr<AudioFocusInfoChangeCallbackImpl> cbFocusInfo =
129         std::static_pointer_cast<AudioFocusInfoChangeCallbackImpl>(audioFocusInfoCallback_);
130     CHECK_AND_RETURN_RET_LOG(cbFocusInfo != nullptr, ERROR, "cbFocusInfo is nullptr");
131     cbFocusInfo->SaveCallback(callback);
132 
133     return SUCCESS;
134 }
135 
GetDevicesInner(DeviceFlag deviceFlag)136 std::vector<std::shared_ptr<AudioDeviceDescriptor>> AudioGeneralManager::GetDevicesInner(DeviceFlag deviceFlag)
137 {
138     return AudioPolicyManager::GetInstance().GetDevicesInner(deviceFlag);
139 }
140 
SetDeviceChangeCallback(const DeviceFlag flag,const std::shared_ptr<AudioManagerDeviceChangeCallback> & callback)141 int32_t AudioGeneralManager::SetDeviceChangeCallback(const DeviceFlag flag,
142     const std::shared_ptr<AudioManagerDeviceChangeCallback>& callback)
143 {
144     AUDIO_INFO_LOG("Entered %{public}s", __func__);
145     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
146 
147     int32_t clientId = GetCallingPid();
148     return AudioPolicyManager::GetInstance().SetDeviceChangeCallback(clientId, flag, callback);
149 }
150 
SetDistribuitedOutputChangeCallback(const std::shared_ptr<AudioDistribuitedOutputChangeCallback> & cb)151 int32_t AudioGeneralManager::SetDistribuitedOutputChangeCallback(
152     const std::shared_ptr<AudioDistribuitedOutputChangeCallback> &cb)
153 {
154     AUDIO_INFO_LOG("Entry.");
155     CHECK_AND_RETURN_RET_LOG(cb, ERR_INVALID_PARAM, "callback is nullptr");
156     return AudioPolicyManager::GetInstance().SetDistribuitedOutputChangeCallback(cb);
157 }
158 
SetQueryClientTypeCallback(const std::shared_ptr<AudioQueryClientTypeCallback> & callback)159 int32_t AudioGeneralManager::SetQueryClientTypeCallback(const std::shared_ptr<AudioQueryClientTypeCallback>& callback)
160 {
161     AUDIO_INFO_LOG("Entered");
162     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
163     return AudioPolicyManager::GetInstance().SetQueryClientTypeCallback(callback);
164 }
165 
GetAudioGeneralManagerProxy()166 const sptr<IStandardAudioService> AudioGeneralManager::GetAudioGeneralManagerProxy()
167 {
168     AudioXCollie xcollieGetAudioSystemManagerProxy("GetAudioGeneralManagerProxy", XCOLLIE_TIME_OUT_SECONDS);
169     std::lock_guard<std::mutex> lock(g_asManagerProxyMutex);
170     if (g_asManagerProxy == nullptr) {
171         AudioXCollie xcollieGetSystemAbilityManager("GetSystemAbilityManager", XCOLLIE_TIME_OUT_SECONDS);
172         auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
173         CHECK_AND_RETURN_RET_LOG(samgr != nullptr, nullptr, "get sa manager failed");
174         xcollieGetSystemAbilityManager.CancelXCollieTimer();
175 
176         AudioXCollie xcollieGetSystemAbility("GetSystemAbility", XCOLLIE_TIME_OUT_SECONDS);
177         sptr<IRemoteObject> object = samgr->GetSystemAbility(AUDIO_DISTRIBUTED_SERVICE_ID);
178         CHECK_AND_RETURN_RET_LOG(object != nullptr, nullptr, "get audio service remote object failed");
179         g_asManagerProxy = iface_cast<IStandardAudioService>(object);
180         CHECK_AND_RETURN_RET_LOG(g_asManagerProxy != nullptr, nullptr, "get audio service proxy failed");
181         xcollieGetSystemAbility.CancelXCollieTimer();
182     }
183     sptr<IStandardAudioService> gasp = g_asManagerProxy;
184     return gasp;
185 }
186 
SetExtraParameters(const std::string & key,const std::vector<std::pair<std::string,std::string>> & kvpairs)187 int32_t AudioGeneralManager::SetExtraParameters(const std::string &key,
188     const std::vector<std::pair<std::string, std::string>> &kvpairs)
189 {
190     const sptr<IStandardAudioService> gasp = GetAudioGeneralManagerProxy();
191     CHECK_AND_RETURN_RET_LOG(gasp != nullptr, 0, "Audio service unavailable.");
192     return gasp->SetExtraParameters(key, kvpairs);
193 }
194 
GetVolume(AudioVolumeType volumeType) const195 int32_t AudioGeneralManager::GetVolume(AudioVolumeType volumeType) const
196 {
197     switch (volumeType) {
198         case STREAM_MUSIC:
199         case STREAM_RING:
200         case STREAM_NOTIFICATION:
201         case STREAM_VOICE_CALL:
202         case STREAM_VOICE_COMMUNICATION:
203         case STREAM_VOICE_ASSISTANT:
204         case STREAM_ALARM:
205         case STREAM_SYSTEM:
206         case STREAM_ACCESSIBILITY:
207         case STREAM_VOICE_RING:
208             break;
209         case STREAM_ULTRASONIC:
210         case STREAM_ALL:{
211             bool ret = PermissionUtil::VerifySelfPermission();
212             CHECK_AND_RETURN_RET_LOG(ret, ERR_PERMISSION_DENIED, "No system permission");
213             break;
214         }
215         default:
216             AUDIO_ERR_LOG("volumeType[%{public}d] is not supported", volumeType);
217             return ERR_NOT_SUPPORTED;
218     }
219 
220     return AudioPolicyManager::GetInstance().GetSystemVolumeLevel(volumeType);
221 }
222 
UnregisterVolumeKeyEventCallback(const int32_t clientPid,const std::shared_ptr<VolumeKeyEventCallback> & callback)223 int32_t AudioGeneralManager::UnregisterVolumeKeyEventCallback(const int32_t clientPid,
224     const std::shared_ptr<VolumeKeyEventCallback> &callback)
225 {
226     AUDIO_DEBUG_LOG("UnregisterVolumeKeyEventCallback");
227     int32_t ret = AudioPolicyManager::GetInstance().UnsetVolumeKeyEventCallback(callback);
228     if (!ret) {
229         AUDIO_DEBUG_LOG("UnsetVolumeKeyEventCallback success");
230         volumeChangeClientPid_ = -1;
231     }
232     return ret;
233 }
234 
GetActiveOutputDevice()235 DeviceType AudioGeneralManager::GetActiveOutputDevice()
236 {
237     return AudioPolicyManager::GetInstance().GetActiveOutputDevice();
238 }
239 
GetAudioScene() const240 AudioScene AudioGeneralManager::GetAudioScene() const
241 {
242     return AudioPolicyManager::GetInstance().GetAudioScene();
243 }
244 
SetAudioSceneChangeCallback(const std::shared_ptr<AudioManagerAudioSceneChangedCallback> & callback)245 int32_t AudioGeneralManager::SetAudioSceneChangeCallback(
246     const std::shared_ptr<AudioManagerAudioSceneChangedCallback> &callback)
247 {
248     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
249 
250     int32_t clientId = GetCallingPid();
251     return AudioPolicyManager::GetInstance().SetAudioSceneChangeCallback(clientId, callback);
252 }
253 
GetMaxVolume(AudioVolumeType volumeType)254 int32_t AudioGeneralManager::GetMaxVolume(AudioVolumeType volumeType)
255 {
256     if (volumeType == STREAM_ALL) {
257         bool ret = PermissionUtil::VerifySelfPermission();
258         CHECK_AND_RETURN_RET_LOG(ret, ERR_PERMISSION_DENIED, "No system permission");
259     }
260 
261     if (volumeType == STREAM_ULTRASONIC) {
262         bool ret = PermissionUtil::VerifySelfPermission();
263         CHECK_AND_RETURN_RET_LOG(ret, ERR_PERMISSION_DENIED, "No system permission");
264     }
265 
266     return AudioPolicyManager::GetInstance().GetMaxVolumeLevel(volumeType);
267 }
268 
UnregisterFocusInfoChangeCallback(const std::shared_ptr<AudioFocusInfoChangeCallback> & callback)269 int32_t AudioGeneralManager::UnregisterFocusInfoChangeCallback(
270     const std::shared_ptr<AudioFocusInfoChangeCallback> &callback)
271 {
272     int32_t clientId = GetCallingPid();
273     int32_t ret = 0;
274 
275     if (callback == nullptr) {
276         ret = AudioPolicyManager::GetInstance().UnregisterFocusInfoChangeCallback(clientId);
277         audioFocusInfoCallback_.reset();
278         audioFocusInfoCallback_ = nullptr;
279         if (!ret) {
280             AUDIO_DEBUG_LOG("AudioSystemManager::UnregisterVolumeKeyEventCallback success");
281         }
282         return ret;
283     }
284     CHECK_AND_RETURN_RET_LOG(audioFocusInfoCallback_ != nullptr, ERROR,
285         "Failed to allocate memory for audioInterruptCallback");
286     std::shared_ptr<AudioFocusInfoChangeCallbackImpl> cbFocusInfo =
287         std::static_pointer_cast<AudioFocusInfoChangeCallbackImpl>(audioFocusInfoCallback_);
288     cbFocusInfo->RemoveCallback(callback);
289 
290     return ret;
291 }
292 
GetAudioFocusInfoList(std::list<std::pair<AudioInterrupt,AudioFocuState>> & focusInfoList)293 int32_t AudioGeneralManager::GetAudioFocusInfoList(std::list<std::pair<AudioInterrupt, AudioFocuState>> &focusInfoList)
294 {
295     AUDIO_DEBUG_LOG("Entered %{public}s", __func__);
296     return AudioPolicyManager::GetInstance().GetAudioFocusInfoList(focusInfoList);
297 }
298 
SelectOutputDevice(std::vector<std::shared_ptr<AudioDeviceDescriptor>> audioDeviceDescriptors) const299 int32_t AudioGeneralManager::SelectOutputDevice(
300     std::vector<std::shared_ptr<AudioDeviceDescriptor>> audioDeviceDescriptors) const
301 {
302     CHECK_AND_RETURN_RET_LOG(audioDeviceDescriptors.size() == 1 && audioDeviceDescriptors[0] != nullptr,
303         ERR_INVALID_PARAM, "invalid parameter");
304     CHECK_AND_RETURN_RET_LOG(audioDeviceDescriptors[0]->deviceRole_ == DeviceRole::OUTPUT_DEVICE,
305         ERR_INVALID_OPERATION, "not an output device.");
306     size_t validSize = 64;
307     if (audioDeviceDescriptors[0]->networkId_ != LOCAL_NETWORK_ID &&
308         audioDeviceDescriptors[0]->networkId_.size() != validSize) {
309         AUDIO_ERR_LOG("SelectOutputDevice: invalid networkId.");
310         return ERR_INVALID_PARAM;
311     }
312     sptr<AudioRendererFilter> audioRendererFilter = new(std::nothrow) AudioRendererFilter();
313     audioRendererFilter->uid = -1;
314     int32_t ret = AudioPolicyManager::GetInstance().SelectOutputDevice(audioRendererFilter, audioDeviceDescriptors);
315     return ret;
316 }
317 
RegisterVolumeKeyEventCallback(const int32_t clientPid,const std::shared_ptr<VolumeKeyEventCallback> & callback,API_VERSION api_v)318 int32_t AudioGeneralManager::RegisterVolumeKeyEventCallback(const int32_t clientPid,
319     const std::shared_ptr<VolumeKeyEventCallback> &callback, API_VERSION api_v)
320 {
321     AUDIO_DEBUG_LOG("AudioGeneralManager RegisterVolumeKeyEventCallback");
322 
323     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM,
324         "RegisterVolumeKeyEventCallbackcallback is nullptr");
325     volumeChangeClientPid_ = clientPid;
326 
327     return AudioPolicyManager::GetInstance().SetVolumeKeyEventCallback(clientPid, callback, api_v);
328 }
329 
RegisterAudioCapturerEventListener(const int32_t clientPid,const std::shared_ptr<AudioCapturerStateChangeCallback> & callback)330 int32_t AudioGeneralManager::RegisterAudioCapturerEventListener(const int32_t clientPid,
331     const std::shared_ptr<AudioCapturerStateChangeCallback> &callback)
332 {
333     AUDIO_INFO_LOG("client id: %{public}d", clientPid);
334     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is null");
335     return AudioPolicyManager::GetInstance().RegisterAudioCapturerEventListener(clientPid, callback);
336 }
337 
GetCurrentRendererChangeInfos(std::vector<std::shared_ptr<AudioRendererChangeInfo>> & audioRendererChangeInfos)338 int32_t AudioGeneralManager::GetCurrentRendererChangeInfos(
339     std::vector<std::shared_ptr<AudioRendererChangeInfo>> &audioRendererChangeInfos)
340 {
341     AUDIO_DEBUG_LOG("GetCurrentRendererChangeInfos");
342     return AudioPolicyManager::GetInstance().GetCurrentRendererChangeInfos(audioRendererChangeInfos);
343 }
344 
RegisterAudioRendererEventListener(const std::shared_ptr<AudioRendererStateChangeCallback> & callback)345 int32_t AudioGeneralManager::RegisterAudioRendererEventListener(
346     const std::shared_ptr<AudioRendererStateChangeCallback> &callback)
347 {
348     AUDIO_INFO_LOG("in");
349     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is null");
350 
351     int32_t ret = AudioPolicyManager::GetInstance().RegisterAudioRendererEventListener(callback);
352     CHECK_AND_RETURN_RET_LOG(ret == SUCCESS, ERR_INVALID_PARAM, "ret: %{public}d", ret);
353 
354     return ret;
355 }
356 
AudioFocusInfoChangeCallbackImpl()357 AudioFocusInfoChangeCallbackImpl::AudioFocusInfoChangeCallbackImpl()
358 {
359     AUDIO_INFO_LOG("AudioFocusInfoChangeCallbackImpl constructor");
360 }
361 
~AudioFocusInfoChangeCallbackImpl()362 AudioFocusInfoChangeCallbackImpl::~AudioFocusInfoChangeCallbackImpl()
363 {
364     AUDIO_INFO_LOG("AudioFocusInfoChangeCallbackImpl: destroy");
365 }
366 
SaveCallback(const std::weak_ptr<AudioFocusInfoChangeCallback> & callback)367 void AudioFocusInfoChangeCallbackImpl::SaveCallback(const std::weak_ptr<AudioFocusInfoChangeCallback> &callback)
368 {
369     AUDIO_INFO_LOG("Entered %{public}s", __func__);
370     bool hasCallback = false;
371     std::lock_guard<std::mutex> cbListLock(cbListMutex_);
372     for (auto it = callbackList_.begin(); it != callbackList_.end(); ++it) {
373         if ((*it).lock() == callback.lock()) {
374             hasCallback = true;
375         }
376     }
377     if (!hasCallback) {
378         callbackList_.push_back(callback);
379     }
380 }
381 
RemoveCallback(const std::weak_ptr<AudioFocusInfoChangeCallback> & callback)382 void AudioFocusInfoChangeCallbackImpl::RemoveCallback(const std::weak_ptr<AudioFocusInfoChangeCallback> &callback)
383 {
384     AUDIO_INFO_LOG("Entered %{public}s", __func__);
385     std::lock_guard<std::mutex> cbListLock(cbListMutex_);
386     callbackList_.remove_if([&callback](std::weak_ptr<AudioFocusInfoChangeCallback> &callback_) {
387         return callback_.lock() == callback.lock();
388     });
389 }
390 
GetPreferredInputDeviceForCapturerInfo(AudioCapturerInfo captureInfo,std::vector<std::shared_ptr<AudioDeviceDescriptor>> & desc)391 int32_t AudioGeneralManager::GetPreferredInputDeviceForCapturerInfo(
392     AudioCapturerInfo captureInfo, std::vector<std::shared_ptr<AudioDeviceDescriptor>> &desc)
393 {
394     desc = AudioPolicyManager::GetInstance().GetPreferredInputDeviceDescriptors(captureInfo);
395     return SUCCESS;
396 }
397 
SetPreferredInputDeviceChangeCallback(AudioCapturerInfo & capturerInfo,const std::shared_ptr<AudioPreferredInputDeviceChangeCallback> & callback)398 int32_t AudioGeneralManager::SetPreferredInputDeviceChangeCallback(
399     AudioCapturerInfo &capturerInfo, const std::shared_ptr<AudioPreferredInputDeviceChangeCallback> &callback)
400 {
401     AUDIO_INFO_LOG("Entered %{public}s", __func__);
402     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
403 
404     return AudioPolicyManager::GetInstance().SetPreferredInputDeviceChangeCallback(capturerInfo, callback);
405 }
406 
GetCurrentCapturerChangeInfos(std::vector<std::shared_ptr<AudioCapturerChangeInfo>> & audioCapturerChangeInfos)407 int32_t AudioGeneralManager::GetCurrentCapturerChangeInfos(
408     std::vector<std::shared_ptr<AudioCapturerChangeInfo>> &audioCapturerChangeInfos)
409 {
410     AUDIO_DEBUG_LOG("GetCurrentCapturerChangeInfos");
411     return AudioPolicyManager::GetInstance().GetCurrentCapturerChangeInfos(audioCapturerChangeInfos);
412 }
413 
414 } // namespace AudioStandard
415 } // namespace OHOS
416