1 /*
2 * Copyright (c) 2021-2022 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 #include "audio_policy_manager.h"
17 #include "audio_errors.h"
18 #include "audio_policy_proxy.h"
19 #include "audio_server_death_recipient.h"
20 #include "audio_log.h"
21 #include "audio_utils.h"
22 #include "iservice_registry.h"
23 #include "system_ability_definition.h"
24
25 namespace OHOS {
26 namespace AudioStandard {
27 using namespace std;
28
29 static sptr<IAudioPolicy> g_apProxy = nullptr;
30 mutex g_apProxyMutex;
31 constexpr int64_t SLEEP_TIME = 1;
32 constexpr int32_t RETRY_TIMES = 3;
33 std::mutex g_cBMapMutex;
34 std::mutex g_cBDiedMapMutex;
35 std::unordered_map<int32_t, std::weak_ptr<AudioRendererPolicyServiceDiedCallback>> AudioPolicyManager::rendererCBMap_;
36 sptr<AudioPolicyClientStubImpl> AudioPolicyManager::audioStaticPolicyClientStubCB_;
37 std::vector<std::shared_ptr<AudioStreamPolicyServiceDiedCallback>> AudioPolicyManager::audioStreamCBMap_;
38
GetAudioPolicyManagerProxy()39 inline const sptr<IAudioPolicy> GetAudioPolicyManagerProxy()
40 {
41 AUDIO_DEBUG_LOG("Start to get audio manager service proxy.");
42 lock_guard<mutex> lock(g_apProxyMutex);
43
44 if (g_apProxy == nullptr) {
45 auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
46 CHECK_AND_RETURN_RET_LOG(samgr != nullptr, nullptr, "samgr init failed.");
47
48 sptr<IRemoteObject> object = samgr->GetSystemAbility(AUDIO_POLICY_SERVICE_ID);
49 CHECK_AND_RETURN_RET_LOG(object != nullptr, nullptr, "Object is NULL.");
50
51 g_apProxy = iface_cast<IAudioPolicy>(object);
52 CHECK_AND_RETURN_RET_LOG(g_apProxy != nullptr, nullptr, "Init g_apProxy is NULL.");
53
54 AUDIO_DEBUG_LOG("Init g_apProxy is assigned.");
55 pid_t pid = 0;
56 sptr<AudioServerDeathRecipient> deathRecipient_ = new(std::nothrow) AudioServerDeathRecipient(pid);
57 if (deathRecipient_ != nullptr) {
58 deathRecipient_->SetNotifyCb(std::bind(&AudioPolicyManager::AudioPolicyServerDied,
59 std::placeholders::_1));
60 AUDIO_DEBUG_LOG("Register audio policy server death recipient");
61 bool result = object->AddDeathRecipient(deathRecipient_);
62 if (!result) {
63 AUDIO_ERR_LOG("failed to add deathRecipient");
64 }
65 }
66 }
67
68 const sptr<IAudioPolicy> gsp = g_apProxy;
69 return gsp;
70 }
71
RegisterPolicyCallbackClientFunc(const sptr<IAudioPolicy> & gsp)72 int32_t AudioPolicyManager::RegisterPolicyCallbackClientFunc(const sptr<IAudioPolicy> &gsp)
73 {
74 std::unique_lock<std::mutex> lock(registerCallbackMutex_);
75 audioPolicyClientStubCB_ = new(std::nothrow) AudioPolicyClientStubImpl();
76 audioStaticPolicyClientStubCB_ = audioPolicyClientStubCB_;
77 sptr<IRemoteObject> object = audioPolicyClientStubCB_->AsObject();
78 if (object == nullptr) {
79 AUDIO_ERR_LOG("audioPolicyClientStubCB_->AsObject is nullptr");
80 lock.unlock();
81 return ERROR;
82 }
83 lock.unlock();
84
85 return gsp->RegisterPolicyCallbackClient(object);
86 }
87
RecoverAudioPolicyCallbackClient()88 void AudioPolicyManager::RecoverAudioPolicyCallbackClient()
89 {
90 if (audioStaticPolicyClientStubCB_ == nullptr) {
91 AUDIO_ERR_LOG("audioPolicyClientStubCB_ is null.");
92 return;
93 }
94
95 int32_t retry = RETRY_TIMES;
96 sptr<IAudioPolicy> gsp = nullptr;
97 while (retry--) {
98 // Sleep and wait for 1 second;
99 sleep(SLEEP_TIME);
100 gsp = GetAudioPolicyManagerProxy();
101 if (gsp != nullptr) {
102 AUDIO_INFO_LOG("Reconnect audio policy service success!");
103 break;
104 }
105 }
106
107 CHECK_AND_RETURN_LOG(gsp != nullptr, "Reconnect audio policy service fail!");
108
109 sptr<IRemoteObject> object = audioStaticPolicyClientStubCB_->AsObject();
110 if (object == nullptr) {
111 AUDIO_ERR_LOG("RegisterPolicyCallbackClientFunc: audioPolicyClientStubCB_->AsObject is nullptr");
112 return;
113 }
114
115 gsp->RegisterPolicyCallbackClient(object);
116 }
117
AudioPolicyServerDied(pid_t pid)118 void AudioPolicyManager::AudioPolicyServerDied(pid_t pid)
119 {
120 if (g_apProxy == nullptr) {
121 AUDIO_ERR_LOG("Audio policy server has already died!");
122 return;
123 }
124 {
125 std::lock_guard<std::mutex> lockCbMap(g_cBMapMutex);
126 AUDIO_INFO_LOG("Audio policy server died: reestablish connection");
127 std::shared_ptr<AudioRendererPolicyServiceDiedCallback> cb;
128 for (auto it = rendererCBMap_.begin(); it != rendererCBMap_.end(); ++it) {
129 cb = it->second.lock();
130 if (cb != nullptr) {
131 cb->OnAudioPolicyServiceDied();
132 }
133 }
134 }
135 {
136 std::lock_guard<std::mutex> lock(g_apProxyMutex);
137 g_apProxy = nullptr;
138 }
139 RecoverAudioPolicyCallbackClient();
140
141 {
142 std::lock_guard<std::mutex> lockCbMap(g_cBDiedMapMutex);
143 if (audioStreamCBMap_.size() != 0) {
144 for (auto it = audioStreamCBMap_.begin(); it != audioStreamCBMap_.end(); ++it) {
145 if (*it != nullptr) {
146 (*it)->OnAudioPolicyServiceDied();
147 }
148 }
149 }
150 }
151 }
152
GetMaxVolumeLevel(AudioVolumeType volumeType)153 int32_t AudioPolicyManager::GetMaxVolumeLevel(AudioVolumeType volumeType)
154 {
155 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
156 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
157
158 return gsp->GetMaxVolumeLevel(volumeType);
159 }
160
GetMinVolumeLevel(AudioVolumeType volumeType)161 int32_t AudioPolicyManager::GetMinVolumeLevel(AudioVolumeType volumeType)
162 {
163 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
164 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
165
166 return gsp->GetMinVolumeLevel(volumeType);
167 }
168
SetSystemVolumeLevel(AudioVolumeType volumeType,int32_t volumeLevel,API_VERSION api_v)169 int32_t AudioPolicyManager::SetSystemVolumeLevel(AudioVolumeType volumeType, int32_t volumeLevel, API_VERSION api_v)
170 {
171 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
172 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
173
174 return gsp->SetSystemVolumeLevel(volumeType, volumeLevel, api_v);
175 }
176
SetRingerMode(AudioRingerMode ringMode,API_VERSION api_v)177 int32_t AudioPolicyManager::SetRingerMode(AudioRingerMode ringMode, API_VERSION api_v)
178 {
179 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
180 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
181 return gsp->SetRingerMode(ringMode, api_v);
182 }
183
GetRingerMode()184 AudioRingerMode AudioPolicyManager::GetRingerMode()
185 {
186 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
187 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, RINGER_MODE_NORMAL, "audio policy manager proxy is NULL.");
188 return gsp->GetRingerMode();
189 }
190
SetAudioScene(AudioScene scene)191 int32_t AudioPolicyManager::SetAudioScene(AudioScene scene)
192 {
193 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
194 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
195 return gsp->SetAudioScene(scene);
196 }
197
SetMicrophoneMute(bool isMute)198 int32_t AudioPolicyManager::SetMicrophoneMute(bool isMute)
199 {
200 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
201 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
202 return gsp->SetMicrophoneMute(isMute);
203 }
204
SetMicrophoneMuteAudioConfig(bool isMute)205 int32_t AudioPolicyManager::SetMicrophoneMuteAudioConfig(bool isMute)
206 {
207 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
208 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
209 return gsp->SetMicrophoneMuteAudioConfig(isMute);
210 }
211
IsMicrophoneMute(API_VERSION api_v)212 bool AudioPolicyManager::IsMicrophoneMute(API_VERSION api_v)
213 {
214 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
215 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
216 return gsp->IsMicrophoneMute(api_v);
217 }
218
GetAudioScene()219 AudioScene AudioPolicyManager::GetAudioScene()
220 {
221 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
222 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, AUDIO_SCENE_DEFAULT, "audio policy manager proxy is NULL.");
223 return gsp->GetAudioScene();
224 }
225
GetSystemVolumeLevel(AudioVolumeType volumeType)226 int32_t AudioPolicyManager::GetSystemVolumeLevel(AudioVolumeType volumeType)
227 {
228 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
229 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
230 return gsp->GetSystemVolumeLevel(volumeType);
231 }
232
SetStreamMute(AudioVolumeType volumeType,bool mute,API_VERSION api_v)233 int32_t AudioPolicyManager::SetStreamMute(AudioVolumeType volumeType, bool mute, API_VERSION api_v)
234 {
235 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
236 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
237 return gsp->SetStreamMute(volumeType, mute, api_v);
238 }
239
GetStreamMute(AudioVolumeType volumeType)240 bool AudioPolicyManager::GetStreamMute(AudioVolumeType volumeType)
241 {
242 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
243 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
244 return gsp->GetStreamMute(volumeType);
245 }
246
SetLowPowerVolume(int32_t streamId,float volume)247 int32_t AudioPolicyManager::SetLowPowerVolume(int32_t streamId, float volume)
248 {
249 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
250 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
251 return gsp->SetLowPowerVolume(streamId, volume);
252 }
253
GetLowPowerVolume(int32_t streamId)254 float AudioPolicyManager::GetLowPowerVolume(int32_t streamId)
255 {
256 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
257 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
258 return gsp->GetLowPowerVolume(streamId);
259 }
260
GetSingleStreamVolume(int32_t streamId)261 float AudioPolicyManager::GetSingleStreamVolume(int32_t streamId)
262 {
263 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
264 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
265 return gsp->GetSingleStreamVolume(streamId);
266 }
267
IsStreamActive(AudioVolumeType volumeType)268 bool AudioPolicyManager::IsStreamActive(AudioVolumeType volumeType)
269 {
270 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
271 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
272 return gsp->IsStreamActive(volumeType);
273 }
274
SelectOutputDevice(sptr<AudioRendererFilter> audioRendererFilter,std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)275 int32_t AudioPolicyManager::SelectOutputDevice(sptr<AudioRendererFilter> audioRendererFilter,
276 std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)
277 {
278 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
279 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
280 return gsp->SelectOutputDevice(audioRendererFilter, audioDeviceDescriptors);
281 }
282
GetSelectedDeviceInfo(int32_t uid,int32_t pid,AudioStreamType streamType)283 std::string AudioPolicyManager::GetSelectedDeviceInfo(int32_t uid, int32_t pid, AudioStreamType streamType)
284 {
285 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
286 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, "", "audio policy manager proxy is NULL.");
287 return gsp->GetSelectedDeviceInfo(uid, pid, streamType);
288 }
289
SelectInputDevice(sptr<AudioCapturerFilter> audioCapturerFilter,std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)290 int32_t AudioPolicyManager::SelectInputDevice(sptr<AudioCapturerFilter> audioCapturerFilter,
291 std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)
292 {
293 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
294 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
295 return gsp->SelectInputDevice(audioCapturerFilter, audioDeviceDescriptors);
296 }
297
GetDevices(DeviceFlag deviceFlag)298 std::vector<sptr<AudioDeviceDescriptor>> AudioPolicyManager::GetDevices(DeviceFlag deviceFlag)
299 {
300 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
301 if (gsp == nullptr) {
302 AUDIO_ERR_LOG("GetDevices: audio policy manager proxy is NULL.");
303 std::vector<sptr<AudioDeviceDescriptor>> deviceInfo;
304 return deviceInfo;
305 }
306 return gsp->GetDevices(deviceFlag);
307 }
308
GetPreferredOutputDeviceDescriptors(AudioRendererInfo & rendererInfo)309 std::vector<sptr<AudioDeviceDescriptor>> AudioPolicyManager::GetPreferredOutputDeviceDescriptors(
310 AudioRendererInfo &rendererInfo)
311 {
312 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
313 if (gsp == nullptr) {
314 AUDIO_ERR_LOG("GetPreferredOutputDeviceDescriptors: audio policy manager proxy is NULL.");
315 std::vector<sptr<AudioDeviceDescriptor>> deviceInfo;
316 return deviceInfo;
317 }
318 return gsp->GetPreferredOutputDeviceDescriptors(rendererInfo);
319 }
320
GetPreferredInputDeviceDescriptors(AudioCapturerInfo & captureInfo)321 std::vector<sptr<AudioDeviceDescriptor>> AudioPolicyManager::GetPreferredInputDeviceDescriptors(
322 AudioCapturerInfo &captureInfo)
323 {
324 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
325 if (gsp == nullptr) {
326 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
327 std::vector<sptr<AudioDeviceDescriptor>> deviceInfo;
328 return deviceInfo;
329 }
330 return gsp->GetPreferredInputDeviceDescriptors(captureInfo);
331 }
332
GetAudioFocusInfoList(std::list<std::pair<AudioInterrupt,AudioFocuState>> & focusInfoList,const int32_t zoneID)333 int32_t AudioPolicyManager::GetAudioFocusInfoList(std::list<std::pair<AudioInterrupt, AudioFocuState>> &focusInfoList,
334 const int32_t zoneID)
335 {
336 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
337 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
338 return gsp->GetAudioFocusInfoList(focusInfoList, zoneID);
339 }
340
RegisterFocusInfoChangeCallback(const int32_t clientId,const std::shared_ptr<AudioFocusInfoChangeCallback> & callback)341 int32_t AudioPolicyManager::RegisterFocusInfoChangeCallback(const int32_t clientId,
342 const std::shared_ptr<AudioFocusInfoChangeCallback> &callback)
343 {
344 AUDIO_DEBUG_LOG("AudioPolicyManager::RegisterFocusInfoChangeCallback");
345 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
346 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
347 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM,
348 "RegisterFocusInfoChangeCallback: callback is nullptr");
349
350 if (audioPolicyClientStubCB_ == nullptr) {
351 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
352 if (ret != SUCCESS) {
353 return ret;
354 }
355 }
356
357 audioPolicyClientStubCB_->AddFocusInfoChangeCallback(callback);
358 return SUCCESS;
359 }
360
UnregisterFocusInfoChangeCallback(const int32_t clientId)361 int32_t AudioPolicyManager::UnregisterFocusInfoChangeCallback(const int32_t clientId)
362 {
363 AUDIO_DEBUG_LOG("AudioPolicyManager::UnregisterFocusInfoChangeCallback");
364 if (audioPolicyClientStubCB_ != nullptr) {
365 audioPolicyClientStubCB_->RemoveFocusInfoChangeCallback();
366 }
367 return SUCCESS;
368 }
369
370 #ifdef FEATURE_DTMF_TONE
GetSupportedTones()371 std::vector<int32_t> AudioPolicyManager::GetSupportedTones()
372 {
373 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
374 if (gsp == nullptr) {
375 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
376 std::vector<int> lSupportedToneList = {};
377 return lSupportedToneList;
378 }
379 return gsp->GetSupportedTones();
380 }
381
GetToneConfig(int32_t ltonetype)382 std::shared_ptr<ToneInfo> AudioPolicyManager::GetToneConfig(int32_t ltonetype)
383 {
384 AUDIO_DEBUG_LOG("AudioPolicyManager::GetToneConfig");
385
386 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
387 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, nullptr, "audio policy manager proxy is NULL.");
388 return gsp->GetToneConfig(ltonetype);
389 }
390 #endif
391
SetDeviceActive(InternalDeviceType deviceType,bool active)392 int32_t AudioPolicyManager::SetDeviceActive(InternalDeviceType deviceType, bool active)
393 {
394 AUDIO_INFO_LOG("SetDeviceActive deviceType: %{public}d, active: %{public}d", deviceType, active);
395 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
396 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
397 return gsp->SetDeviceActive(deviceType, active);
398 }
399
IsDeviceActive(InternalDeviceType deviceType)400 bool AudioPolicyManager::IsDeviceActive(InternalDeviceType deviceType)
401 {
402 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
403 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
404 return gsp->IsDeviceActive(deviceType);
405 }
406
GetActiveOutputDevice()407 DeviceType AudioPolicyManager::GetActiveOutputDevice()
408 {
409 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
410 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, DEVICE_TYPE_INVALID, "audio policy manager proxy is NULL.");
411 return gsp->GetActiveOutputDevice();
412 }
413
GetActiveInputDevice()414 DeviceType AudioPolicyManager::GetActiveInputDevice()
415 {
416 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
417 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, DEVICE_TYPE_INVALID, "audio policy manager proxy is NULL.");
418 return gsp->GetActiveInputDevice();
419 }
420
SetRingerModeCallback(const int32_t clientId,const std::shared_ptr<AudioRingerModeCallback> & callback,API_VERSION api_v)421 int32_t AudioPolicyManager::SetRingerModeCallback(const int32_t clientId,
422 const std::shared_ptr<AudioRingerModeCallback> &callback, API_VERSION api_v)
423 {
424 AUDIO_DEBUG_LOG("AudioPolicyManager::SetRingerModeCallback");
425 if (api_v == API_8 && !PermissionUtil::VerifySystemPermission()) {
426 AUDIO_ERR_LOG("SetRingerModeCallback: No system permission");
427 return ERR_PERMISSION_DENIED;
428 }
429
430 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
431 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
432 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
433
434 if (audioPolicyClientStubCB_ == nullptr) {
435 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
436 if (ret != SUCCESS) {
437 return ret;
438 }
439 }
440 audioPolicyClientStubCB_->AddRingerModeCallback(callback);
441 return SUCCESS;
442 }
443
UnsetRingerModeCallback(const int32_t clientId)444 int32_t AudioPolicyManager::UnsetRingerModeCallback(const int32_t clientId)
445 {
446 AUDIO_DEBUG_LOG("Remove all ringer mode callbacks");
447 if (audioPolicyClientStubCB_ != nullptr) {
448 audioPolicyClientStubCB_->RemoveRingerModeCallback();
449 }
450 return SUCCESS;
451 }
452
UnsetRingerModeCallback(const int32_t clientId,const std::shared_ptr<AudioRingerModeCallback> & callback)453 int32_t AudioPolicyManager::UnsetRingerModeCallback(const int32_t clientId,
454 const std::shared_ptr<AudioRingerModeCallback> &callback)
455 {
456 AUDIO_DEBUG_LOG("Remove one ringer mode callback");
457 if (audioPolicyClientStubCB_ != nullptr) {
458 audioPolicyClientStubCB_->RemoveRingerModeCallback(callback);
459 }
460 return SUCCESS;
461 }
462
SetDeviceChangeCallback(const int32_t clientId,const DeviceFlag flag,const std::shared_ptr<AudioManagerDeviceChangeCallback> & callback)463 int32_t AudioPolicyManager::SetDeviceChangeCallback(const int32_t clientId, const DeviceFlag flag,
464 const std::shared_ptr<AudioManagerDeviceChangeCallback> &callback)
465 {
466 AUDIO_DEBUG_LOG("AudioPolicyManager::SetDeviceChangeCallback");
467 bool hasSystemPermission = PermissionUtil::VerifySystemPermission();
468 switch (flag) {
469 case NONE_DEVICES_FLAG:
470 case DISTRIBUTED_OUTPUT_DEVICES_FLAG:
471 case DISTRIBUTED_INPUT_DEVICES_FLAG:
472 case ALL_DISTRIBUTED_DEVICES_FLAG:
473 case ALL_L_D_DEVICES_FLAG:
474 if (!hasSystemPermission) {
475 AUDIO_ERR_LOG("SetDeviceChangeCallback: No system permission");
476 return ERR_PERMISSION_DENIED;
477 }
478 break;
479 default:
480 break;
481 }
482
483 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
484 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
485 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "SetDeviceChangeCallback: callback is nullptr");
486
487 if (audioPolicyClientStubCB_ == nullptr) {
488 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
489 if (ret != SUCCESS) {
490 return ret;
491 }
492 }
493
494 audioPolicyClientStubCB_->AddDeviceChangeCallback(flag, callback);
495 return SUCCESS;
496 }
497
UnsetDeviceChangeCallback(const int32_t clientId,DeviceFlag flag)498 int32_t AudioPolicyManager::UnsetDeviceChangeCallback(const int32_t clientId, DeviceFlag flag)
499 {
500 AUDIO_DEBUG_LOG("AudioPolicyManager::UnsetDeviceChangeCallback");
501 if (audioPolicyClientStubCB_ != nullptr) {
502 audioPolicyClientStubCB_->RemoveDeviceChangeCallback();
503 }
504 return SUCCESS;
505 }
506
SetPreferredOutputDeviceChangeCallback(const int32_t clientId,const std::shared_ptr<AudioPreferredOutputDeviceChangeCallback> & callback)507 int32_t AudioPolicyManager::SetPreferredOutputDeviceChangeCallback(const int32_t clientId,
508 const std::shared_ptr<AudioPreferredOutputDeviceChangeCallback> &callback)
509 {
510 AUDIO_DEBUG_LOG("AudioPolicyManager::SetPreferredOutputDeviceChangeCallback");
511 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
512 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
513 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
514
515 if (audioPolicyClientStubCB_ == nullptr) {
516 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
517 if (ret != SUCCESS) {
518 return ret;
519 }
520 }
521
522 audioPolicyClientStubCB_->AddPreferredOutputDeviceChangeCallback(callback);
523 return SUCCESS;
524 }
525
SetPreferredInputDeviceChangeCallback(const std::shared_ptr<AudioPreferredInputDeviceChangeCallback> & callback)526 int32_t AudioPolicyManager::SetPreferredInputDeviceChangeCallback(
527 const std::shared_ptr<AudioPreferredInputDeviceChangeCallback> &callback)
528 {
529 AUDIO_DEBUG_LOG("AudioPolicyManager::SetPreferredInputDeviceChangeCallback");
530 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
531 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
532 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
533
534 if (audioPolicyClientStubCB_ == nullptr) {
535 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
536 if (ret != SUCCESS) {
537 return ret;
538 }
539 }
540
541 audioPolicyClientStubCB_->AddPreferredInputDeviceChangeCallback(callback);
542 return SUCCESS;
543 }
544
UnsetPreferredOutputDeviceChangeCallback(const int32_t clientId)545 int32_t AudioPolicyManager::UnsetPreferredOutputDeviceChangeCallback(const int32_t clientId)
546 {
547 AUDIO_DEBUG_LOG("AudioPolicyManager::UnsetPreferredOutputDeviceChangeCallback");
548 if (audioPolicyClientStubCB_ != nullptr) {
549 audioPolicyClientStubCB_->RemovePreferredOutputDeviceChangeCallback();
550 }
551 return SUCCESS;
552 }
553
UnsetPreferredInputDeviceChangeCallback()554 int32_t AudioPolicyManager::UnsetPreferredInputDeviceChangeCallback()
555 {
556 AUDIO_DEBUG_LOG("AudioPolicyManager::UnsetPreferredInputDeviceChangeCallback");
557 if (audioPolicyClientStubCB_ != nullptr) {
558 audioPolicyClientStubCB_->RemovePreferredInputDeviceChangeCallback();
559 }
560 return SUCCESS;
561 }
562
SetMicStateChangeCallback(const int32_t clientId,const std::shared_ptr<AudioManagerMicStateChangeCallback> & callback)563 int32_t AudioPolicyManager::SetMicStateChangeCallback(const int32_t clientId,
564 const std::shared_ptr<AudioManagerMicStateChangeCallback> &callback)
565 {
566 AUDIO_DEBUG_LOG("AudioPolicyManager::SetMicStateChangeCallback");
567 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
568 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
569 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
570
571 if (audioPolicyClientStubCB_ == nullptr) {
572 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
573 if (ret != SUCCESS) {
574 return ret;
575 }
576 }
577
578 audioPolicyClientStubCB_->AddMicStateChangeCallback(callback);
579 return SUCCESS;
580 }
581
SetAudioInterruptCallback(const uint32_t sessionID,const std::shared_ptr<AudioInterruptCallback> & callback,const int32_t zoneID)582 int32_t AudioPolicyManager::SetAudioInterruptCallback(const uint32_t sessionID,
583 const std::shared_ptr<AudioInterruptCallback> &callback, const int32_t zoneID)
584 {
585 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
586 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
587 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
588
589 sptr<AudioPolicyManagerListenerStub> listener = new(std::nothrow) AudioPolicyManagerListenerStub();
590 CHECK_AND_RETURN_RET_LOG(listener != nullptr, ERROR, "object null");
591 listener->SetInterruptCallback(callback);
592
593 sptr<IRemoteObject> object = listener->AsObject();
594 CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "listenerStub->AsObject is nullptr..");
595
596 return gsp->SetAudioInterruptCallback(sessionID, object, zoneID);
597 }
598
UnsetAudioInterruptCallback(const uint32_t sessionID,const int32_t zoneID)599 int32_t AudioPolicyManager::UnsetAudioInterruptCallback(const uint32_t sessionID, const int32_t zoneID)
600 {
601 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
602 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
603 return gsp->UnsetAudioInterruptCallback(sessionID, zoneID);
604 }
605
ActivateAudioInterrupt(const AudioInterrupt & audioInterrupt,const int32_t zoneID)606 int32_t AudioPolicyManager::ActivateAudioInterrupt(const AudioInterrupt &audioInterrupt, const int32_t zoneID)
607 {
608 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
609 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
610 return gsp->ActivateAudioInterrupt(audioInterrupt, zoneID);
611 }
612
DeactivateAudioInterrupt(const AudioInterrupt & audioInterrupt,const int32_t zoneID)613 int32_t AudioPolicyManager::DeactivateAudioInterrupt(const AudioInterrupt &audioInterrupt, const int32_t zoneID)
614 {
615 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
616 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
617 return gsp->DeactivateAudioInterrupt(audioInterrupt, zoneID);
618 }
619
SetAudioManagerInterruptCallback(const int32_t clientId,const std::shared_ptr<AudioInterruptCallback> & callback)620 int32_t AudioPolicyManager::SetAudioManagerInterruptCallback(const int32_t clientId,
621 const std::shared_ptr<AudioInterruptCallback> &callback)
622 {
623 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
624 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
625 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
626
627 std::unique_lock<std::mutex> lock(listenerStubMutex_);
628 sptr<AudioPolicyManagerListenerStub> interruptListenerStub = new(std::nothrow) AudioPolicyManagerListenerStub();
629 CHECK_AND_RETURN_RET_LOG(interruptListenerStub != nullptr, ERROR, "object null");
630 interruptListenerStub->SetInterruptCallback(callback);
631
632 sptr<IRemoteObject> object = interruptListenerStub->AsObject();
633 CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "onInterruptListenerStub->AsObject is nullptr.");
634 lock.unlock();
635
636 return gsp->SetAudioManagerInterruptCallback(clientId, object);
637 }
638
UnsetAudioManagerInterruptCallback(const int32_t clientId)639 int32_t AudioPolicyManager::UnsetAudioManagerInterruptCallback(const int32_t clientId)
640 {
641 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
642 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
643 return gsp->UnsetAudioManagerInterruptCallback(clientId);
644 }
645
RequestAudioFocus(const int32_t clientId,const AudioInterrupt & audioInterrupt)646 int32_t AudioPolicyManager::RequestAudioFocus(const int32_t clientId, const AudioInterrupt &audioInterrupt)
647 {
648 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
649 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
650 return gsp->RequestAudioFocus(clientId, audioInterrupt);
651 }
652
AbandonAudioFocus(const int32_t clientId,const AudioInterrupt & audioInterrupt)653 int32_t AudioPolicyManager::AbandonAudioFocus(const int32_t clientId, const AudioInterrupt &audioInterrupt)
654 {
655 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
656 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
657 return gsp->AbandonAudioFocus(clientId, audioInterrupt);
658 }
659
GetStreamInFocus(const int32_t zoneID)660 AudioStreamType AudioPolicyManager::GetStreamInFocus(const int32_t zoneID)
661 {
662 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
663 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, STREAM_DEFAULT, "audio policy manager proxy is NULL.");
664 return gsp->GetStreamInFocus(zoneID);
665 }
666
GetSessionInfoInFocus(AudioInterrupt & audioInterrupt,const int32_t zoneID)667 int32_t AudioPolicyManager::GetSessionInfoInFocus(AudioInterrupt &audioInterrupt, const int32_t zoneID)
668 {
669 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
670 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
671 return gsp->GetSessionInfoInFocus(audioInterrupt, zoneID);
672 }
673
SetVolumeKeyEventCallback(const int32_t clientPid,const std::shared_ptr<VolumeKeyEventCallback> & callback,API_VERSION api_v)674 int32_t AudioPolicyManager::SetVolumeKeyEventCallback(const int32_t clientPid,
675 const std::shared_ptr<VolumeKeyEventCallback> &callback, API_VERSION api_v)
676 {
677 AUDIO_INFO_LOG("SetVolumeKeyEventCallback: client: %{public}d", clientPid);
678 if (api_v == API_8 && !PermissionUtil::VerifySystemPermission()) {
679 AUDIO_ERR_LOG("SetVolumeKeyEventCallback: No system permission");
680 return ERR_PERMISSION_DENIED;
681 }
682 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
683 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
684
685 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "volume back is nullptr");
686
687 if (audioPolicyClientStubCB_ == nullptr) {
688 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
689 if (ret != SUCCESS) {
690 return ret;
691 }
692 }
693
694 audioPolicyClientStubCB_->AddVolumeKeyEventCallback(callback);
695 return SUCCESS;
696 }
697
UnsetVolumeKeyEventCallback(const int32_t clientPid)698 int32_t AudioPolicyManager::UnsetVolumeKeyEventCallback(const int32_t clientPid)
699 {
700 AUDIO_DEBUG_LOG("AudioPolicyManager::UnsetVolumeKeyEventCallback");
701 if (audioPolicyClientStubCB_ != nullptr) {
702 audioPolicyClientStubCB_->RemoveVolumeKeyEventCallback();
703 }
704 return SUCCESS;
705 }
706
RegisterAudioRendererEventListener(const int32_t clientPid,const std::shared_ptr<AudioRendererStateChangeCallback> & callback)707 int32_t AudioPolicyManager::RegisterAudioRendererEventListener(const int32_t clientPid,
708 const std::shared_ptr<AudioRendererStateChangeCallback> &callback)
709 {
710 AUDIO_DEBUG_LOG("AudioPolicyManager::RegisterAudioRendererEventListener");
711 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
712 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
713 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "RendererEvent Listener callback is nullptr");
714
715 if (audioPolicyClientStubCB_ == nullptr) {
716 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
717 if (ret != SUCCESS) {
718 return ret;
719 }
720 }
721
722 audioPolicyClientStubCB_->AddRendererStateChangeCallback(callback);
723 isAudioRendererEventListenerRegistered = true;
724 return SUCCESS;
725 }
726
UnregisterAudioRendererEventListener(const int32_t clientPid)727 int32_t AudioPolicyManager::UnregisterAudioRendererEventListener(const int32_t clientPid)
728 {
729 AUDIO_DEBUG_LOG("AudioPolicyManager::UnregisterAudioRendererEventListener");
730 if ((audioPolicyClientStubCB_ != nullptr) && isAudioRendererEventListenerRegistered) {
731 audioPolicyClientStubCB_->RemoveRendererStateChangeCallback();
732 isAudioRendererEventListenerRegistered = false;
733 }
734 return SUCCESS;
735 }
736
RegisterAudioCapturerEventListener(const int32_t clientPid,const std::shared_ptr<AudioCapturerStateChangeCallback> & callback)737 int32_t AudioPolicyManager::RegisterAudioCapturerEventListener(const int32_t clientPid,
738 const std::shared_ptr<AudioCapturerStateChangeCallback> &callback)
739 {
740 AUDIO_DEBUG_LOG("AudioPolicyManager::RegisterAudioCapturerEventListener");
741 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
742 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
743
744 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "Capturer Event Listener callback is nullptr");
745
746 if (audioPolicyClientStubCB_ == nullptr) {
747 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
748 if (ret != SUCCESS) {
749 return ret;
750 }
751 }
752
753 audioPolicyClientStubCB_->AddCapturerStateChangeCallback(callback);
754 isAudioCapturerEventListenerRegistered = true;
755 return SUCCESS;
756 }
757
UnregisterAudioCapturerEventListener(const int32_t clientPid)758 int32_t AudioPolicyManager::UnregisterAudioCapturerEventListener(const int32_t clientPid)
759 {
760 AUDIO_DEBUG_LOG("AudioPolicyManager::UnregisterAudioCapturerEventListener");
761 if ((audioPolicyClientStubCB_ != nullptr) && isAudioCapturerEventListenerRegistered) {
762 audioPolicyClientStubCB_->RemoveCapturerStateChangeCallback();
763 isAudioCapturerEventListenerRegistered = false;
764 }
765 return SUCCESS;
766 }
767
RegisterOutputDeviceChangeWithInfoCallback(const uint32_t sessionID,const std::shared_ptr<OutputDeviceChangeWithInfoCallback> & callback)768 int32_t AudioPolicyManager::RegisterOutputDeviceChangeWithInfoCallback(
769 const uint32_t sessionID, const std::shared_ptr<OutputDeviceChangeWithInfoCallback> &callback)
770 {
771 AUDIO_DEBUG_LOG("Entered %{public}s", __func__);
772 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
773 if (gsp == nullptr) {
774 AUDIO_ERR_LOG("RegisterAudioRendererEventListener: audio policy manager proxy is NULL.");
775 return ERROR;
776 }
777
778 if (callback == nullptr) {
779 AUDIO_ERR_LOG("RegisterAudioRendererEventListener: RendererEvent Listener callback is nullptr");
780 return ERR_INVALID_PARAM;
781 }
782
783 if (audioPolicyClientStubCB_ == nullptr) {
784 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
785 if (ret != SUCCESS) {
786 return ret;
787 }
788 }
789
790 audioPolicyClientStubCB_->AddOutputDeviceChangeWithInfoCallback(sessionID, callback);
791 return SUCCESS;
792 }
793
UnregisterOutputDeviceChangeWithInfoCallback(const uint32_t sessionID)794 int32_t AudioPolicyManager::UnregisterOutputDeviceChangeWithInfoCallback(const uint32_t sessionID)
795 {
796 AUDIO_DEBUG_LOG("Entered %{public}s", __func__);
797 if (audioPolicyClientStubCB_ != nullptr) {
798 audioPolicyClientStubCB_->RemoveOutputDeviceChangeWithInfoCallback(sessionID);
799 }
800 return SUCCESS;
801 }
802
RegisterTracker(AudioMode & mode,AudioStreamChangeInfo & streamChangeInfo,const std::shared_ptr<AudioClientTracker> & clientTrackerObj)803 int32_t AudioPolicyManager::RegisterTracker(AudioMode &mode, AudioStreamChangeInfo &streamChangeInfo,
804 const std::shared_ptr<AudioClientTracker> &clientTrackerObj)
805 {
806 AUDIO_DEBUG_LOG("AudioPolicyManager::RegisterTracker");
807 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
808 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
809
810 std::unique_lock<std::mutex> lock(clientTrackerStubMutex_);
811 sptr<AudioClientTrackerCallbackStub> callback = new(std::nothrow) AudioClientTrackerCallbackStub();
812 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERROR, "clientTrackerCbStub: memory allocation failed");
813
814 callback->SetClientTrackerCallback(clientTrackerObj);
815
816 sptr<IRemoteObject> object = callback->AsObject();
817 CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "clientTrackerCbStub: IPC object creation failed");
818 lock.unlock();
819
820 return gsp->RegisterTracker(mode, streamChangeInfo, object);
821 }
822
UpdateTracker(AudioMode & mode,AudioStreamChangeInfo & streamChangeInfo)823 int32_t AudioPolicyManager::UpdateTracker(AudioMode &mode, AudioStreamChangeInfo &streamChangeInfo)
824 {
825 AUDIO_DEBUG_LOG("AudioPolicyManager::UpdateTracker");
826 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
827 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
828 return gsp->UpdateTracker(mode, streamChangeInfo);
829 }
830
CheckRecordingCreate(uint32_t appTokenId,uint64_t appFullTokenId,int32_t appUid,SourceType sourceType)831 bool AudioPolicyManager::CheckRecordingCreate(uint32_t appTokenId, uint64_t appFullTokenId, int32_t appUid,
832 SourceType sourceType)
833 {
834 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
835 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
836 return gsp->CheckRecordingCreate(appTokenId, appFullTokenId, appUid, sourceType);
837 }
838
CheckRecordingStateChange(uint32_t appTokenId,uint64_t appFullTokenId,int32_t appUid,AudioPermissionState state)839 bool AudioPolicyManager::CheckRecordingStateChange(uint32_t appTokenId, uint64_t appFullTokenId, int32_t appUid,
840 AudioPermissionState state)
841 {
842 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
843 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
844 return gsp->CheckRecordingStateChange(appTokenId, appFullTokenId, appUid, state);
845 }
846
ReconfigureAudioChannel(const uint32_t & count,DeviceType deviceType)847 int32_t AudioPolicyManager::ReconfigureAudioChannel(const uint32_t &count, DeviceType deviceType)
848 {
849 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
850 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
851 return gsp->ReconfigureAudioChannel(count, deviceType);
852 }
853
GetAudioLatencyFromXml()854 int32_t AudioPolicyManager::GetAudioLatencyFromXml()
855 {
856 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
857 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
858 return gsp->GetAudioLatencyFromXml();
859 }
860
GetSinkLatencyFromXml()861 uint32_t AudioPolicyManager::GetSinkLatencyFromXml()
862 {
863 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
864 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, 0, "audio policy manager proxy is NULL.");
865 return gsp->GetSinkLatencyFromXml();
866 }
867
GetCurrentRendererChangeInfos(vector<unique_ptr<AudioRendererChangeInfo>> & audioRendererChangeInfos)868 int32_t AudioPolicyManager::GetCurrentRendererChangeInfos(
869 vector<unique_ptr<AudioRendererChangeInfo>> &audioRendererChangeInfos)
870 {
871 AUDIO_DEBUG_LOG("GetCurrentRendererChangeInfos");
872 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
873 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
874 return gsp->GetCurrentRendererChangeInfos(audioRendererChangeInfos);
875 }
876
GetCurrentCapturerChangeInfos(vector<unique_ptr<AudioCapturerChangeInfo>> & audioCapturerChangeInfos)877 int32_t AudioPolicyManager::GetCurrentCapturerChangeInfos(
878 vector<unique_ptr<AudioCapturerChangeInfo>> &audioCapturerChangeInfos)
879 {
880 AUDIO_DEBUG_LOG("GetCurrentCapturerChangeInfos");
881 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
882 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
883 return gsp->GetCurrentCapturerChangeInfos(audioCapturerChangeInfos);
884 }
885
UpdateStreamState(const int32_t clientUid,StreamSetState streamSetState,AudioStreamType audioStreamType)886 int32_t AudioPolicyManager::UpdateStreamState(const int32_t clientUid,
887 StreamSetState streamSetState, AudioStreamType audioStreamType)
888 {
889 AUDIO_DEBUG_LOG("UpdateStreamState");
890 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
891 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
892 return gsp->UpdateStreamState(clientUid, streamSetState, audioStreamType);
893 }
894
GetVolumeGroupInfos(std::string networkId,std::vector<sptr<VolumeGroupInfo>> & infos)895 int32_t AudioPolicyManager::GetVolumeGroupInfos(std::string networkId, std::vector<sptr<VolumeGroupInfo>> &infos)
896 {
897 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
898 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
899 return gsp->GetVolumeGroupInfos(networkId, infos);
900 }
901
GetNetworkIdByGroupId(int32_t groupId,std::string & networkId)902 int32_t AudioPolicyManager::GetNetworkIdByGroupId(int32_t groupId, std::string &networkId)
903 {
904 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
905 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "GetNetworkIdByGroupId failed, g_apProxy is nullptr.");
906 return gsp->GetNetworkIdByGroupId(groupId, networkId);
907 }
908
IsAudioRendererLowLatencySupported(const AudioStreamInfo & audioStreamInfo)909 bool AudioPolicyManager::IsAudioRendererLowLatencySupported(const AudioStreamInfo &audioStreamInfo)
910 {
911 AUDIO_DEBUG_LOG("IsAudioRendererLowLatencySupported");
912 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
913 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
914 return gsp->IsAudioRendererLowLatencySupported(audioStreamInfo);
915 }
916
SetSystemSoundUri(const std::string & key,const std::string & uri)917 int32_t AudioPolicyManager::SetSystemSoundUri(const std::string &key, const std::string &uri)
918 {
919 AUDIO_DEBUG_LOG("SetSystemSoundUri: [%{public}s]: [%{public}s]", key.c_str(), uri.c_str());
920 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
921 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
922
923 return gsp->SetSystemSoundUri(key, uri);
924 }
925
GetSystemSoundUri(const std::string & key)926 std::string AudioPolicyManager::GetSystemSoundUri(const std::string &key)
927 {
928 AUDIO_DEBUG_LOG("GetSystemSoundUri: %{public}s", key.c_str());
929 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
930 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, "", "audio policy manager proxy is NULL.");
931
932 return gsp->GetSystemSoundUri(key);
933 }
934
GetMinStreamVolume()935 float AudioPolicyManager::GetMinStreamVolume()
936 {
937 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
938 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
939 return gsp->GetMinStreamVolume();
940 }
941
GetMaxStreamVolume()942 float AudioPolicyManager::GetMaxStreamVolume()
943 {
944 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
945 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
946 return gsp->GetMaxStreamVolume();
947 }
948
RegisterAudioPolicyServerDiedCb(const int32_t clientPid,const std::weak_ptr<AudioRendererPolicyServiceDiedCallback> & callback)949 int32_t AudioPolicyManager::RegisterAudioPolicyServerDiedCb(const int32_t clientPid,
950 const std::weak_ptr<AudioRendererPolicyServiceDiedCallback> &callback)
951 {
952 std::lock_guard<std::mutex> lockCbMap(g_cBMapMutex);
953 rendererCBMap_[clientPid] = callback;
954 return SUCCESS;
955 }
956
UnregisterAudioPolicyServerDiedCb(const int32_t clientPid)957 int32_t AudioPolicyManager::UnregisterAudioPolicyServerDiedCb(const int32_t clientPid)
958 {
959 std::lock_guard<std::mutex> lockCbMap(g_cBMapMutex);
960 AUDIO_DEBUG_LOG("client pid: %{public}d", clientPid);
961 for (auto it = rendererCBMap_.begin(); it != rendererCBMap_.end(); ++it) {
962 rendererCBMap_.erase(getpid());
963 }
964 return SUCCESS;
965 }
966
RegisterAudioStreamPolicyServerDiedCb(const std::shared_ptr<AudioStreamPolicyServiceDiedCallback> & callback)967 int32_t AudioPolicyManager::RegisterAudioStreamPolicyServerDiedCb(
968 const std::shared_ptr<AudioStreamPolicyServiceDiedCallback> &callback)
969 {
970 std::lock_guard<std::mutex> lockCbMap(g_cBDiedMapMutex);
971 AUDIO_DEBUG_LOG("RegisterAudioStreamPolicyServerDiedCb");
972 auto iter = find(audioStreamCBMap_.begin(), audioStreamCBMap_.end(), callback);
973 if (iter == audioStreamCBMap_.end()) {
974 audioStreamCBMap_.emplace_back(callback);
975 }
976
977 return SUCCESS;
978 }
979
UnregisterAudioStreamPolicyServerDiedCb(const std::shared_ptr<AudioStreamPolicyServiceDiedCallback> & callback)980 int32_t AudioPolicyManager::UnregisterAudioStreamPolicyServerDiedCb(
981 const std::shared_ptr<AudioStreamPolicyServiceDiedCallback> &callback)
982 {
983 std::lock_guard<std::mutex> lockCbMap(g_cBDiedMapMutex);
984 AUDIO_DEBUG_LOG("UnregisterAudioStreamPolicyServerDiedCb");
985 auto iter = find(audioStreamCBMap_.begin(), audioStreamCBMap_.end(), callback);
986 if (iter != audioStreamCBMap_.end()) {
987 audioStreamCBMap_.erase(iter);
988 }
989
990 return SUCCESS;
991 }
992
GetMaxRendererInstances()993 int32_t AudioPolicyManager::GetMaxRendererInstances()
994 {
995 AUDIO_DEBUG_LOG("AudioPolicyManager::GetMaxRendererInstances");
996 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
997 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
998
999 return gsp->GetMaxRendererInstances();
1000 }
1001
IsVolumeUnadjustable()1002 bool AudioPolicyManager::IsVolumeUnadjustable()
1003 {
1004 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1005 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1006 return gsp->IsVolumeUnadjustable();
1007 }
1008
AdjustVolumeByStep(VolumeAdjustType adjustType)1009 int32_t AudioPolicyManager::AdjustVolumeByStep(VolumeAdjustType adjustType)
1010 {
1011 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1012 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1013 return gsp->AdjustVolumeByStep(adjustType);
1014 }
1015
AdjustSystemVolumeByStep(AudioVolumeType volumeType,VolumeAdjustType adjustType)1016 int32_t AudioPolicyManager::AdjustSystemVolumeByStep(AudioVolumeType volumeType, VolumeAdjustType adjustType)
1017 {
1018 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1019 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1020 return gsp->AdjustSystemVolumeByStep(volumeType, adjustType);
1021 }
1022
GetSystemVolumeInDb(AudioVolumeType volumeType,int32_t volumeLevel,DeviceType deviceType)1023 float AudioPolicyManager::GetSystemVolumeInDb(AudioVolumeType volumeType, int32_t volumeLevel, DeviceType deviceType)
1024 {
1025 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1026 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1027 return gsp->GetSystemVolumeInDb(volumeType, volumeLevel, deviceType);
1028 }
1029
QueryEffectSceneMode(SupportedEffectConfig & supportedEffectConfig)1030 int32_t AudioPolicyManager::QueryEffectSceneMode(SupportedEffectConfig &supportedEffectConfig)
1031 {
1032 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1033 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1034 int error = gsp->QueryEffectSceneMode(supportedEffectConfig);
1035 return error;
1036 }
1037
SetPlaybackCapturerFilterInfos(const AudioPlaybackCaptureConfig & config,uint32_t appTokenId)1038 int32_t AudioPolicyManager::SetPlaybackCapturerFilterInfos(const AudioPlaybackCaptureConfig &config,
1039 uint32_t appTokenId)
1040 {
1041 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1042 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1043
1044 return gsp->SetPlaybackCapturerFilterInfos(config, appTokenId);
1045 }
1046
SetCaptureSilentState(bool state)1047 int32_t AudioPolicyManager::SetCaptureSilentState(bool state)
1048 {
1049 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1050 if (gsp == nullptr) {
1051 AUDIO_ERR_LOG("SetCaptureSilentState: audio policy manager proxy is NULL");
1052 return ERROR;
1053 }
1054
1055 return gsp->SetCaptureSilentState(state);
1056 }
1057
GetHardwareOutputSamplingRate(const sptr<AudioDeviceDescriptor> & desc)1058 int32_t AudioPolicyManager::GetHardwareOutputSamplingRate(const sptr<AudioDeviceDescriptor> &desc)
1059 {
1060 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1061 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1062 return gsp->GetHardwareOutputSamplingRate(desc);
1063 }
1064
GetAudioCapturerMicrophoneDescriptors(int32_t sessionID)1065 vector<sptr<MicrophoneDescriptor>> AudioPolicyManager::GetAudioCapturerMicrophoneDescriptors(int32_t sessionID)
1066 {
1067 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1068 if (gsp == nullptr) {
1069 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1070 std::vector<sptr<MicrophoneDescriptor>> descs;
1071 return descs;
1072 }
1073 return gsp->GetAudioCapturerMicrophoneDescriptors(sessionID);
1074 }
1075
GetAvailableMicrophones()1076 vector<sptr<MicrophoneDescriptor>> AudioPolicyManager::GetAvailableMicrophones()
1077 {
1078 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1079 if (gsp == nullptr) {
1080 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1081 std::vector<sptr<MicrophoneDescriptor>> descs;
1082 return descs;
1083 }
1084 return gsp->GetAvailableMicrophones();
1085 }
1086
SetDeviceAbsVolumeSupported(const std::string & macAddress,const bool support)1087 int32_t AudioPolicyManager::SetDeviceAbsVolumeSupported(const std::string &macAddress, const bool support)
1088 {
1089 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1090 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1091 return gsp->SetDeviceAbsVolumeSupported(macAddress, support);
1092 }
1093
IsAbsVolumeScene()1094 bool AudioPolicyManager::IsAbsVolumeScene()
1095 {
1096 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1097 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1098 return gsp->IsAbsVolumeScene();
1099 }
1100
SetA2dpDeviceVolume(const std::string & macAddress,const int32_t volume,const bool updateUi)1101 int32_t AudioPolicyManager::SetA2dpDeviceVolume(const std::string &macAddress, const int32_t volume,
1102 const bool updateUi)
1103 {
1104 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1105 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1106 return gsp->SetA2dpDeviceVolume(macAddress, volume, updateUi);
1107 }
1108
GetAvailableDevices(AudioDeviceUsage usage)1109 std::vector<std::unique_ptr<AudioDeviceDescriptor>> AudioPolicyManager::GetAvailableDevices(AudioDeviceUsage usage)
1110 {
1111 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1112 if (gsp == nullptr) {
1113 AUDIO_ERR_LOG("GetAvailableMicrophones: audio policy manager proxy is NULL.");
1114 std::vector<unique_ptr<AudioDeviceDescriptor>> descs;
1115 return descs;
1116 }
1117 return gsp->GetAvailableDevices(usage);
1118 }
1119
SetAvailableDeviceChangeCallback(const int32_t clientId,const AudioDeviceUsage usage,const std::shared_ptr<AudioManagerAvailableDeviceChangeCallback> & callback)1120 int32_t AudioPolicyManager::SetAvailableDeviceChangeCallback(const int32_t clientId, const AudioDeviceUsage usage,
1121 const std::shared_ptr<AudioManagerAvailableDeviceChangeCallback>& callback)
1122 {
1123 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1124 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1125 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
1126
1127 auto deviceChangeCbStub = new(std::nothrow) AudioPolicyManagerListenerStub();
1128 CHECK_AND_RETURN_RET_LOG(deviceChangeCbStub != nullptr, ERROR, "object null");
1129
1130 deviceChangeCbStub->SetAvailableDeviceChangeCallback(callback);
1131
1132 sptr<IRemoteObject> object = deviceChangeCbStub->AsObject();
1133 if (object == nullptr) {
1134 AUDIO_ERR_LOG("listenerStub->AsObject is nullptr..");
1135 delete deviceChangeCbStub;
1136 return ERROR;
1137 }
1138
1139 return gsp->SetAvailableDeviceChangeCallback(clientId, usage, object);
1140 }
1141
UnsetAvailableDeviceChangeCallback(const int32_t clientId,AudioDeviceUsage usage)1142 int32_t AudioPolicyManager::UnsetAvailableDeviceChangeCallback(const int32_t clientId, AudioDeviceUsage usage)
1143 {
1144 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1145 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1146 return gsp->UnsetAvailableDeviceChangeCallback(clientId, usage);
1147 }
1148
ConfigDistributedRoutingRole(sptr<AudioDeviceDescriptor> descriptor,CastType type)1149 int32_t AudioPolicyManager::ConfigDistributedRoutingRole(sptr<AudioDeviceDescriptor> descriptor, CastType type)
1150 {
1151 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1152 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1153 return gsp->ConfigDistributedRoutingRole(descriptor, type);
1154 }
1155
SetDistributedRoutingRoleCallback(const std::shared_ptr<AudioDistributedRoutingRoleCallback> & callback)1156 int32_t AudioPolicyManager::SetDistributedRoutingRoleCallback(
1157 const std::shared_ptr<AudioDistributedRoutingRoleCallback> &callback)
1158 {
1159 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1160 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1161 if (callback == nullptr) {
1162 AUDIO_ERR_LOG("SetDistributedRoutingRoleCallback: callback is nullptr");
1163 return ERR_INVALID_PARAM;
1164 }
1165
1166 std::unique_lock<std::mutex> lock(listenerStubMutex_);
1167 auto activeDistributedRoutingRoleCb = new(std::nothrow) AudioRoutingManagerListenerStub();
1168 if (activeDistributedRoutingRoleCb == nullptr) {
1169 AUDIO_ERR_LOG("SetDistributedRoutingRoleCallback: object is nullptr");
1170 return ERROR;
1171 }
1172 activeDistributedRoutingRoleCb->SetDistributedRoutingRoleCallback(callback);
1173 sptr<IRemoteObject> object = activeDistributedRoutingRoleCb->AsObject();
1174 if (object == nullptr) {
1175 AUDIO_ERR_LOG("SetDistributedRoutingRoleCallback: listenerStub is nullptr.");
1176 delete activeDistributedRoutingRoleCb;
1177 return ERROR;
1178 }
1179 return gsp->SetDistributedRoutingRoleCallback(object);
1180 }
1181
UnsetDistributedRoutingRoleCallback()1182 int32_t AudioPolicyManager::UnsetDistributedRoutingRoleCallback()
1183 {
1184 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1185 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1186 return gsp->UnsetDistributedRoutingRoleCallback();
1187 }
1188
IsSpatializationEnabled()1189 bool AudioPolicyManager::IsSpatializationEnabled()
1190 {
1191 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1192 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1193 return gsp->IsSpatializationEnabled();
1194 }
1195
SetSpatializationEnabled(const bool enable)1196 int32_t AudioPolicyManager::SetSpatializationEnabled(const bool enable)
1197 {
1198 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1199 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1200 return gsp->SetSpatializationEnabled(enable);
1201 }
1202
IsHeadTrackingEnabled()1203 bool AudioPolicyManager::IsHeadTrackingEnabled()
1204 {
1205 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1206 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1207 return gsp->IsHeadTrackingEnabled();
1208 }
1209
SetHeadTrackingEnabled(const bool enable)1210 int32_t AudioPolicyManager::SetHeadTrackingEnabled(const bool enable)
1211 {
1212 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1213 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1214 return gsp->SetHeadTrackingEnabled(enable);
1215 }
1216
RegisterSpatializationEnabledEventListener(const std::shared_ptr<AudioSpatializationEnabledChangeCallback> & callback)1217 int32_t AudioPolicyManager::RegisterSpatializationEnabledEventListener(
1218 const std::shared_ptr<AudioSpatializationEnabledChangeCallback> &callback)
1219 {
1220 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1221 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1222
1223 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "Spatialization Enabled callback is nullptr");
1224
1225 sptr<AudioSpatializationEnabledChangeListenerStub> spatializationEnabledChangeListenerStub =
1226 new(std::nothrow) AudioSpatializationEnabledChangeListenerStub();
1227 if (spatializationEnabledChangeListenerStub == nullptr) {
1228 AUDIO_ERR_LOG("RegisterSpatializationEnabledEventListener: object null");
1229 return ERROR;
1230 }
1231
1232 spatializationEnabledChangeListenerStub->SetCallback(callback);
1233
1234 sptr<IRemoteObject> object = spatializationEnabledChangeListenerStub->AsObject();
1235 CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR,
1236 "SpatializationEnabledChangeListener IPC object creation failed");
1237
1238 return gsp->RegisterSpatializationEnabledEventListener(object);
1239 }
1240
RegisterHeadTrackingEnabledEventListener(const std::shared_ptr<AudioHeadTrackingEnabledChangeCallback> & callback)1241 int32_t AudioPolicyManager::RegisterHeadTrackingEnabledEventListener(
1242 const std::shared_ptr<AudioHeadTrackingEnabledChangeCallback> &callback)
1243 {
1244 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1245 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1246
1247 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "Head Tracking Enabled callback is nullptr");
1248
1249 sptr<AudioHeadTrackingEnabledChangeListenerStub> headTrackingEnabledChangeListenerStub =
1250 new(std::nothrow) AudioHeadTrackingEnabledChangeListenerStub();
1251 CHECK_AND_RETURN_RET_LOG(headTrackingEnabledChangeListenerStub != nullptr, ERROR, "object null");
1252
1253 headTrackingEnabledChangeListenerStub->SetCallback(callback);
1254
1255 sptr<IRemoteObject> object = headTrackingEnabledChangeListenerStub->AsObject();
1256 CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR,
1257 "HeadTrackingEnabledChangeListener IPC object creation failed");
1258
1259 return gsp->RegisterHeadTrackingEnabledEventListener(object);
1260 }
1261
UnregisterSpatializationEnabledEventListener()1262 int32_t AudioPolicyManager::UnregisterSpatializationEnabledEventListener()
1263 {
1264 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1265 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1266 return gsp->UnregisterSpatializationEnabledEventListener();
1267 }
1268
UnregisterHeadTrackingEnabledEventListener()1269 int32_t AudioPolicyManager::UnregisterHeadTrackingEnabledEventListener()
1270 {
1271 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1272 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1273 return gsp->UnregisterHeadTrackingEnabledEventListener();
1274 }
1275
GetSpatializationState(const StreamUsage streamUsage)1276 AudioSpatializationState AudioPolicyManager::GetSpatializationState(const StreamUsage streamUsage)
1277 {
1278 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1279 if (gsp == nullptr) {
1280 AUDIO_ERR_LOG("GetSpatializationState: audio policy manager proxy is NULL.");
1281 AudioSpatializationState spatializationState = {false, false};
1282 return spatializationState;
1283 }
1284 return gsp->GetSpatializationState(streamUsage);
1285 }
1286
IsSpatializationSupported()1287 bool AudioPolicyManager::IsSpatializationSupported()
1288 {
1289 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1290 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1291 return gsp->IsSpatializationSupported();
1292 }
1293
IsSpatializationSupportedForDevice(const std::string address)1294 bool AudioPolicyManager::IsSpatializationSupportedForDevice(const std::string address)
1295 {
1296 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1297 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1298 return gsp->IsSpatializationSupportedForDevice(address);
1299 }
1300
IsHeadTrackingSupported()1301 bool AudioPolicyManager::IsHeadTrackingSupported()
1302 {
1303 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1304 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1305 return gsp->IsHeadTrackingSupported();
1306 }
1307
IsHeadTrackingSupportedForDevice(const std::string address)1308 bool AudioPolicyManager::IsHeadTrackingSupportedForDevice(const std::string address)
1309 {
1310 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1311 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1312 return gsp->IsHeadTrackingSupportedForDevice(address);
1313 }
1314
UpdateSpatialDeviceState(const AudioSpatialDeviceState audioSpatialDeviceState)1315 int32_t AudioPolicyManager::UpdateSpatialDeviceState(const AudioSpatialDeviceState audioSpatialDeviceState)
1316 {
1317 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1318 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1319 return gsp->UpdateSpatialDeviceState(audioSpatialDeviceState);
1320 }
1321
RegisterSpatializationStateEventListener(const uint32_t sessionID,const StreamUsage streamUsage,const std::shared_ptr<AudioSpatializationStateChangeCallback> & callback)1322 int32_t AudioPolicyManager::RegisterSpatializationStateEventListener(const uint32_t sessionID,
1323 const StreamUsage streamUsage, const std::shared_ptr<AudioSpatializationStateChangeCallback> &callback)
1324 {
1325 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1326 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1327
1328 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "Spatialization state callback is nullptr");
1329
1330 sptr<AudioSpatializationStateChangeListenerStub> spatializationStateChangeListenerStub =
1331 new(std::nothrow) AudioSpatializationStateChangeListenerStub();
1332 CHECK_AND_RETURN_RET_LOG(spatializationStateChangeListenerStub != nullptr, ERROR, "object null");
1333
1334 spatializationStateChangeListenerStub->SetCallback(callback);
1335
1336 sptr<IRemoteObject> object = spatializationStateChangeListenerStub->AsObject();
1337 CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "IPC object creation failed");
1338
1339 return gsp->RegisterSpatializationStateEventListener(sessionID, streamUsage, object);
1340 }
1341
UnregisterSpatializationStateEventListener(const uint32_t sessionID)1342 int32_t AudioPolicyManager::UnregisterSpatializationStateEventListener(const uint32_t sessionID)
1343 {
1344 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1345 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1346
1347 return gsp->UnregisterSpatializationStateEventListener(sessionID);
1348 }
1349
CreateAudioInterruptZone(const std::set<int32_t> pids,const int32_t zoneID)1350 int32_t AudioPolicyManager::CreateAudioInterruptZone(const std::set<int32_t> pids, const int32_t zoneID)
1351 {
1352 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1353 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1354
1355 return gsp->CreateAudioInterruptZone(pids, zoneID);
1356 }
1357
AddAudioInterruptZonePids(const std::set<int32_t> pids,const int32_t zoneID)1358 int32_t AudioPolicyManager::AddAudioInterruptZonePids(const std::set<int32_t> pids, const int32_t zoneID)
1359 {
1360 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1361 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1362
1363 return gsp->AddAudioInterruptZonePids(pids, zoneID);
1364 }
1365
RemoveAudioInterruptZonePids(const std::set<int32_t> pids,const int32_t zoneID)1366 int32_t AudioPolicyManager::RemoveAudioInterruptZonePids(const std::set<int32_t> pids, const int32_t zoneID)
1367 {
1368 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1369 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1370
1371 return gsp->RemoveAudioInterruptZonePids(pids, zoneID);
1372 }
1373
ReleaseAudioInterruptZone(const int32_t zoneID)1374 int32_t AudioPolicyManager::ReleaseAudioInterruptZone(const int32_t zoneID)
1375 {
1376 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1377 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1378
1379 return gsp->ReleaseAudioInterruptZone(zoneID);
1380 }
1381
SetCallDeviceActive(InternalDeviceType deviceType,bool active,std::string address)1382 int32_t AudioPolicyManager::SetCallDeviceActive(InternalDeviceType deviceType, bool active, std::string address)
1383 {
1384 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1385 if (gsp == nullptr) {
1386 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1387 return -1;
1388 }
1389 return gsp->SetCallDeviceActive(deviceType, active, address);
1390 }
1391
GetActiveBluetoothDevice()1392 std::unique_ptr<AudioDeviceDescriptor> AudioPolicyManager::GetActiveBluetoothDevice()
1393 {
1394 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1395 if (gsp == nullptr) {
1396 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1397 return make_unique<AudioDeviceDescriptor>();
1398 }
1399 return gsp->GetActiveBluetoothDevice();
1400 }
1401
NotifyCapturerAdded(AudioCapturerInfo capturerInfo,AudioStreamInfo streamInfo,uint32_t sessionId)1402 int32_t AudioPolicyManager::NotifyCapturerAdded(AudioCapturerInfo capturerInfo, AudioStreamInfo streamInfo,
1403 uint32_t sessionId)
1404 {
1405 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1406 if (gsp == nullptr) {
1407 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1408 return -1;
1409 }
1410 return gsp->NotifyCapturerAdded(capturerInfo, streamInfo, sessionId);
1411 }
1412 } // namespace AudioStandard
1413 } // namespace OHOS
1414