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 "iservice_registry.h"
21 #include "audio_log.h"
22 #include "system_ability_definition.h"
23
24 namespace OHOS {
25 namespace AudioStandard {
26 using namespace std;
27
28 static sptr<IAudioPolicy> g_apProxy = nullptr;
29 mutex g_apProxyMutex;
30
GetAudioPolicyManagerProxy()31 const sptr<IAudioPolicy> AudioPolicyManager::GetAudioPolicyManagerProxy()
32 {
33 AUDIO_DEBUG_LOG("GetAudioPolicyManagerProxy Start to get audio manager service proxy.");
34 lock_guard<mutex> lock(g_apProxyMutex);
35
36 if (g_apProxy == nullptr) {
37 auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
38 if (samgr == nullptr) {
39 AUDIO_ERR_LOG("GetAudioPolicyManagerProxy samgr init failed.");
40 return nullptr;
41 }
42
43 sptr<IRemoteObject> object = samgr->GetSystemAbility(AUDIO_POLICY_SERVICE_ID);
44 if (object == nullptr) {
45 AUDIO_ERR_LOG("GetAudioPolicyManagerProxy Object is NULL.");
46 return nullptr;
47 }
48
49 g_apProxy = iface_cast<IAudioPolicy>(object);
50 if (g_apProxy == nullptr) {
51 AUDIO_ERR_LOG("GetAudioPolicyManagerProxy Init g_apProxy is NULL.");
52 return nullptr;
53 }
54
55 AUDIO_DEBUG_LOG("GetAudioPolicyManagerProxy Init g_apProxy is assigned.");
56 RegisterAudioPolicyServerDeathRecipient();
57 }
58
59 const sptr<IAudioPolicy> gsp = g_apProxy;
60 return gsp;
61 }
62
RegisterAudioPolicyServerDeathRecipient()63 void AudioPolicyManager::RegisterAudioPolicyServerDeathRecipient()
64 {
65 AUDIO_INFO_LOG("Register audio policy server death recipient");
66 pid_t pid = 0;
67 sptr<AudioServerDeathRecipient> deathRecipient_ = new(std::nothrow) AudioServerDeathRecipient(pid);
68 if (deathRecipient_ != nullptr) {
69 auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
70 CHECK_AND_RETURN_LOG(samgr != nullptr, "Failed to obtain samgr");
71
72 sptr<IRemoteObject> object = samgr->GetSystemAbility(OHOS::AUDIO_POLICY_SERVICE_ID);
73 CHECK_AND_RETURN_LOG(object != nullptr, "Policy service unavailable");
74
75 deathRecipient_->SetNotifyCb(std::bind(&AudioPolicyManager::AudioPolicyServerDied, this,
76 std::placeholders::_1));
77 bool result = object->AddDeathRecipient(deathRecipient_);
78 if (!result) {
79 AUDIO_ERR_LOG("failed to add deathRecipient");
80 }
81 }
82 }
83
AudioPolicyServerDied(pid_t pid)84 void AudioPolicyManager::AudioPolicyServerDied(pid_t pid)
85 {
86 lock_guard<mutex> lock(g_apProxyMutex);
87 AUDIO_INFO_LOG("Audio policy server died: reestablish connection");
88 g_apProxy = nullptr;
89 }
90
SetStreamVolume(AudioStreamType streamType,float volume)91 int32_t AudioPolicyManager::SetStreamVolume(AudioStreamType streamType, float volume)
92 {
93 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
94 if (gsp == nullptr) {
95 AUDIO_ERR_LOG("SetStreamVolume: audio policy manager proxy is NULL.");
96 return -1;
97 }
98 return gsp->SetStreamVolume(streamType, volume);
99 }
100
SetRingerMode(AudioRingerMode ringMode)101 int32_t AudioPolicyManager::SetRingerMode(AudioRingerMode ringMode)
102 {
103 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
104 if (gsp == nullptr) {
105 AUDIO_ERR_LOG("SetRingerMode: audio policy manager proxy is NULL.");
106 return -1;
107 }
108 return gsp->SetRingerMode(ringMode);
109 }
110
GetRingerMode()111 AudioRingerMode AudioPolicyManager::GetRingerMode()
112 {
113 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
114 if (gsp == nullptr) {
115 AUDIO_ERR_LOG("GetRingerMode: audio policy manager proxy is NULL.");
116 return RINGER_MODE_NORMAL;
117 }
118 return gsp->GetRingerMode();
119 }
120
SetAudioScene(AudioScene scene)121 int32_t AudioPolicyManager::SetAudioScene(AudioScene scene)
122 {
123 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
124 if (gsp == nullptr) {
125 AUDIO_ERR_LOG("SetAudioScene: audio policy manager proxy is NULL.");
126 return -1;
127 }
128 return gsp->SetAudioScene(scene);
129 }
130
SetMicrophoneMute(bool isMute)131 int32_t AudioPolicyManager::SetMicrophoneMute(bool isMute)
132 {
133 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
134 if (gsp == nullptr) {
135 AUDIO_ERR_LOG("SetMicrophoneMute: audio policy manager proxy is NULL.");
136 return -1;
137 }
138 return gsp->SetMicrophoneMute(isMute);
139 }
140
SetMicrophoneMuteAudioConfig(bool isMute)141 int32_t AudioPolicyManager::SetMicrophoneMuteAudioConfig(bool isMute)
142 {
143 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
144 if (gsp == nullptr) {
145 AUDIO_ERR_LOG("SetMicrophoneMuteAudioConfig: audio policy manager proxy is NULL.");
146 return -1;
147 }
148 return gsp->SetMicrophoneMuteAudioConfig(isMute);
149 }
150
IsMicrophoneMute(API_VERSION api_v)151 bool AudioPolicyManager::IsMicrophoneMute(API_VERSION api_v)
152 {
153 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
154 if (gsp == nullptr) {
155 AUDIO_ERR_LOG("IsMicrophoneMute: audio policy manager proxy is NULL.");
156 return -1;
157 }
158 return gsp->IsMicrophoneMute(api_v);
159 }
160
GetAudioScene()161 AudioScene AudioPolicyManager::GetAudioScene()
162 {
163 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
164 if (gsp == nullptr) {
165 AUDIO_ERR_LOG("GetAudioScene: audio policy manager proxy is NULL.");
166 return AUDIO_SCENE_DEFAULT;
167 }
168 return gsp->GetAudioScene();
169 }
170
GetStreamVolume(AudioStreamType streamType)171 float AudioPolicyManager::GetStreamVolume(AudioStreamType streamType)
172 {
173 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
174 if (gsp == nullptr) {
175 AUDIO_ERR_LOG("GetStreamVolume: audio policy manager proxy is NULL.");
176 return -1;
177 }
178 return gsp->GetStreamVolume(streamType);
179 }
180
SetStreamMute(AudioStreamType streamType,bool mute)181 int32_t AudioPolicyManager::SetStreamMute(AudioStreamType streamType, bool mute)
182 {
183 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
184 if (gsp == nullptr) {
185 AUDIO_ERR_LOG("SetStreamMute: audio policy manager proxy is NULL.");
186 return -1;
187 }
188 return gsp->SetStreamMute(streamType, mute);
189 }
190
GetStreamMute(AudioStreamType streamType)191 bool AudioPolicyManager::GetStreamMute(AudioStreamType streamType)
192 {
193 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
194 if (gsp == nullptr) {
195 AUDIO_ERR_LOG("GetStreamMute: audio policy manager proxy is NULL.");
196 return false;
197 }
198 return gsp->GetStreamMute(streamType);
199 }
200
SetLowPowerVolume(int32_t streamId,float volume)201 int32_t AudioPolicyManager::SetLowPowerVolume(int32_t streamId, float volume)
202 {
203 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
204 if (gsp == nullptr) {
205 AUDIO_ERR_LOG("SetLowPowerVolume: audio policy manager proxy is NULL.");
206 return -1;
207 }
208 return gsp->SetLowPowerVolume(streamId, volume);
209 }
210
GetLowPowerVolume(int32_t streamId)211 float AudioPolicyManager::GetLowPowerVolume(int32_t streamId)
212 {
213 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
214 if (gsp == nullptr) {
215 AUDIO_ERR_LOG("GetLowPowerVolume: audio policy manager proxy is NULL.");
216 return -1;
217 }
218 return gsp->GetLowPowerVolume(streamId);
219 }
220
GetSingleStreamVolume(int32_t streamId)221 float AudioPolicyManager::GetSingleStreamVolume(int32_t streamId)
222 {
223 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
224 if (gsp == nullptr) {
225 AUDIO_ERR_LOG("GetSingleStreamVolume: audio policy manager proxy is NULL.");
226 return -1;
227 }
228 return gsp->GetSingleStreamVolume(streamId);
229 }
230
IsStreamActive(AudioStreamType streamType)231 bool AudioPolicyManager::IsStreamActive(AudioStreamType streamType)
232 {
233 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
234 if (gsp == nullptr) {
235 AUDIO_ERR_LOG("IsStreamActive: audio policy manager proxy is NULL.");
236 return false;
237 }
238 return gsp->IsStreamActive(streamType);
239 }
240
SelectOutputDevice(sptr<AudioRendererFilter> audioRendererFilter,std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)241 int32_t AudioPolicyManager::SelectOutputDevice(sptr<AudioRendererFilter> audioRendererFilter,
242 std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)
243 {
244 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
245 if (gsp == nullptr) {
246 AUDIO_ERR_LOG("SelectOutputDevice: audio policy manager proxy is NULL.");
247 return -1;
248 }
249 return gsp->SelectOutputDevice(audioRendererFilter, audioDeviceDescriptors);
250 }
251
GetSelectedDeviceInfo(int32_t uid,int32_t pid,AudioStreamType streamType)252 std::string AudioPolicyManager::GetSelectedDeviceInfo(int32_t uid, int32_t pid, AudioStreamType streamType)
253 {
254 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
255 if (gsp == nullptr) {
256 AUDIO_ERR_LOG("GetSelectedDeviceInfo: audio policy manager proxy is NULL.");
257 return "";
258 }
259 return gsp->GetSelectedDeviceInfo(uid, pid, streamType);
260 }
261
SelectInputDevice(sptr<AudioCapturerFilter> audioCapturerFilter,std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)262 int32_t AudioPolicyManager::SelectInputDevice(sptr<AudioCapturerFilter> audioCapturerFilter,
263 std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)
264 {
265 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
266 if (gsp == nullptr) {
267 AUDIO_ERR_LOG("SelectInputDevice: audio policy manager proxy is NULL.");
268 return -1;
269 }
270 return gsp->SelectInputDevice(audioCapturerFilter, audioDeviceDescriptors);
271 }
272
GetDevices(DeviceFlag deviceFlag)273 std::vector<sptr<AudioDeviceDescriptor>> AudioPolicyManager::GetDevices(DeviceFlag deviceFlag)
274 {
275 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
276 if (gsp == nullptr) {
277 AUDIO_ERR_LOG("GetDevices: audio policy manager proxy is NULL.");
278 std::vector<sptr<AudioDeviceDescriptor>> deviceInfo;
279 return deviceInfo;
280 }
281 return gsp->GetDevices(deviceFlag);
282 }
283
GetActiveOutputDeviceDescriptors()284 std::vector<sptr<AudioDeviceDescriptor>> AudioPolicyManager::GetActiveOutputDeviceDescriptors()
285 {
286 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
287 if (gsp == nullptr) {
288 AUDIO_ERR_LOG("GetActiveOutputDeviceDescriptors: audio policy manager proxy is NULL.");
289 std::vector<sptr<AudioDeviceDescriptor>> deviceInfo;
290 return deviceInfo;
291 }
292 return gsp->GetActiveOutputDeviceDescriptors();
293 }
294
GetSupportedTones()295 std::vector<int32_t> AudioPolicyManager::GetSupportedTones()
296 {
297 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
298 if (gsp == nullptr) {
299 AUDIO_ERR_LOG("GetSupportedTones: audio policy manager proxy is NULL.");
300 std::vector<int> lSupportedToneList = {};
301 return lSupportedToneList;
302 }
303 return gsp->GetSupportedTones();
304 }
305
GetToneConfig(int32_t ltonetype)306 std::shared_ptr<ToneInfo> AudioPolicyManager::GetToneConfig(int32_t ltonetype)
307 {
308 AUDIO_DEBUG_LOG("AudioPolicyManager GetToneConfig,");
309
310 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
311 if (gsp == nullptr) {
312 AUDIO_ERR_LOG("GetToneConfig: audio policy manager proxy is NULL.");
313 return nullptr;
314 }
315 return gsp->GetToneConfig(ltonetype);
316 }
317
SetDeviceActive(InternalDeviceType deviceType,bool active)318 int32_t AudioPolicyManager::SetDeviceActive(InternalDeviceType deviceType, bool active)
319 {
320 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
321 if (gsp == nullptr) {
322 AUDIO_ERR_LOG("SetDeviceActive: audio policy manager proxy is NULL.");
323 return -1;
324 }
325 return gsp->SetDeviceActive(deviceType, active);
326 }
327
IsDeviceActive(InternalDeviceType deviceType)328 bool AudioPolicyManager::IsDeviceActive(InternalDeviceType deviceType)
329 {
330 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
331 if (gsp == nullptr) {
332 AUDIO_ERR_LOG("IsDeviceActive: audio policy manager proxy is NULL.");
333 return false;
334 }
335 return gsp->IsDeviceActive(deviceType);
336 }
337
GetActiveOutputDevice()338 DeviceType AudioPolicyManager::GetActiveOutputDevice()
339 {
340 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
341 if (gsp == nullptr) {
342 AUDIO_ERR_LOG("GetActiveOutputDevice: audio policy manager proxy is NULL.");
343 return DEVICE_TYPE_INVALID;
344 }
345 return gsp->GetActiveOutputDevice();
346 }
347
GetActiveInputDevice()348 DeviceType AudioPolicyManager::GetActiveInputDevice()
349 {
350 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
351 if (gsp == nullptr) {
352 AUDIO_ERR_LOG("GetActiveInputDevice: audio policy manager proxy is NULL.");
353 return DEVICE_TYPE_INVALID;
354 }
355 return gsp->GetActiveInputDevice();
356 }
357
SetRingerModeCallback(const int32_t clientId,const std::shared_ptr<AudioRingerModeCallback> & callback)358 int32_t AudioPolicyManager::SetRingerModeCallback(const int32_t clientId,
359 const std::shared_ptr<AudioRingerModeCallback> &callback)
360 {
361 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
362 if (gsp == nullptr) {
363 AUDIO_ERR_LOG("SetRingerModeCallback: audio policy manager proxy is NULL.");
364 return ERR_INVALID_PARAM;
365 }
366
367 if (callback == nullptr) {
368 AUDIO_ERR_LOG("SetRingerModeCallback: callback is nullptr");
369 return ERR_INVALID_PARAM;
370 }
371 std::lock_guard<std::mutex> lockSet(ringerModelistenerStubMutex_);
372 ringerModelistenerStub_ = new(std::nothrow) AudioRingerModeUpdateListenerStub();
373 if (ringerModelistenerStub_ == nullptr) {
374 AUDIO_ERR_LOG("SetRingerModeCallback: object null");
375 return ERROR;
376 }
377 ringerModelistenerStub_->SetCallback(callback);
378
379 sptr<IRemoteObject> object = ringerModelistenerStub_->AsObject();
380 if (object == nullptr) {
381 AUDIO_ERR_LOG("SetRingerModeCallback: listenerStub->AsObject is nullptr..");
382 return ERROR;
383 }
384
385 return gsp->SetRingerModeCallback(clientId, object);
386 }
387
UnsetRingerModeCallback(const int32_t clientId)388 int32_t AudioPolicyManager::UnsetRingerModeCallback(const int32_t clientId)
389 {
390 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
391 if (gsp == nullptr) {
392 AUDIO_ERR_LOG("UnsetRingerModeCallback: audio policy manager proxy is NULL.");
393 return -1;
394 }
395 return gsp->UnsetRingerModeCallback(clientId);
396 }
397
SetDeviceChangeCallback(const int32_t clientId,const DeviceFlag flag,const std::shared_ptr<AudioManagerDeviceChangeCallback> & callback)398 int32_t AudioPolicyManager::SetDeviceChangeCallback(const int32_t clientId, const DeviceFlag flag,
399 const std::shared_ptr<AudioManagerDeviceChangeCallback> &callback)
400 {
401 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
402 if (gsp == nullptr) {
403 AUDIO_ERR_LOG("SetDeviceChangeCallback: audio policy manager proxy is NULL.");
404 return -1;
405 }
406 AUDIO_INFO_LOG("Entered %{public}s", __func__);
407 if (callback == nullptr) {
408 AUDIO_ERR_LOG("SetDeviceChangeCallback: callback is nullptr");
409 return ERR_INVALID_PARAM;
410 }
411
412 auto deviceChangeCbStub = new(std::nothrow) AudioPolicyManagerListenerStub();
413 if (deviceChangeCbStub == nullptr) {
414 AUDIO_ERR_LOG("SetDeviceChangeCallback: object null");
415 return ERROR;
416 }
417
418 deviceChangeCbStub->SetDeviceChangeCallback(callback);
419
420 sptr<IRemoteObject> object = deviceChangeCbStub->AsObject();
421 if (object == nullptr) {
422 AUDIO_ERR_LOG("SetDeviceChangeCallback: listenerStub->AsObject is nullptr..");
423 delete deviceChangeCbStub;
424 return ERROR;
425 }
426
427 return gsp->SetDeviceChangeCallback(clientId, flag, object);
428 }
429
UnsetDeviceChangeCallback(const int32_t clientId)430 int32_t AudioPolicyManager::UnsetDeviceChangeCallback(const int32_t clientId)
431 {
432 AUDIO_INFO_LOG("Entered %{public}s", __func__);
433 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
434 if (gsp == nullptr) {
435 AUDIO_ERR_LOG("UnsetDeviceChangeCallback: audio policy manager proxy is NULL.");
436 return -1;
437 }
438 return gsp->UnsetDeviceChangeCallback(clientId);
439 }
440
SetMicStateChangeCallback(const int32_t clientId,const std::shared_ptr<AudioManagerMicStateChangeCallback> & callback)441 int32_t AudioPolicyManager::SetMicStateChangeCallback(const int32_t clientId,
442 const std::shared_ptr<AudioManagerMicStateChangeCallback> &callback)
443 {
444 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
445 if (gsp == nullptr) {
446 AUDIO_ERR_LOG("SetMicStateChangeCallback: audio policy manager proxy is NULL.");
447 return ERROR;
448 }
449 if (callback == nullptr) {
450 AUDIO_ERR_LOG("SetMicStateChangeCallback: callback is nullptr");
451 return ERR_INVALID_PARAM;
452 }
453
454 auto micStateChangeCbStub = new(std::nothrow) AudioRoutingManagerListenerStub();
455 if (micStateChangeCbStub == nullptr) {
456 AUDIO_ERR_LOG("SetMicStateChangeCallback: object null");
457 return ERROR;
458 }
459
460 micStateChangeCbStub->SetMicStateChangeCallback(callback);
461
462 sptr<IRemoteObject> object = micStateChangeCbStub->AsObject();
463 if (object == nullptr) {
464 AUDIO_ERR_LOG("SetMicStateChangeCallback: listenerStub->AsObject is nullptr..");
465 return ERROR;
466 }
467 return gsp->SetMicStateChangeCallback(clientId, object);
468 }
469
SetAudioInterruptCallback(const uint32_t sessionID,const std::shared_ptr<AudioInterruptCallback> & callback)470 int32_t AudioPolicyManager::SetAudioInterruptCallback(const uint32_t sessionID,
471 const std::shared_ptr<AudioInterruptCallback> &callback)
472 {
473 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
474 if (gsp == nullptr) {
475 AUDIO_ERR_LOG("SetAudioInterruptCallback: audio policy manager proxy is NULL.");
476 return ERROR;
477 }
478 if (callback == nullptr) {
479 AUDIO_ERR_LOG("SetAudioInterruptCallback: callback is nullptr");
480 return ERR_INVALID_PARAM;
481 }
482
483 // Need to lock member variable listenerStub_ as SetAudioInterruptCallback
484 // can be called from different threads in multi renderer usage
485 std::unique_lock<std::mutex> lock(listenerStubMutex_);
486 listenerStub_ = new(std::nothrow) AudioPolicyManagerListenerStub();
487 if (listenerStub_ == nullptr) {
488 AUDIO_ERR_LOG("SetAudioInterruptCallback: object null");
489 return ERROR;
490 }
491 listenerStub_->SetInterruptCallback(callback);
492
493 sptr<IRemoteObject> object = listenerStub_->AsObject();
494 if (object == nullptr) {
495 AUDIO_ERR_LOG("SetAudioInterruptCallback: listenerStub->AsObject is nullptr..");
496 return ERROR;
497 }
498 lock.unlock(); // unlock once it is converted into IRemoteObject
499
500 return gsp->SetAudioInterruptCallback(sessionID, object);
501 }
502
UnsetAudioInterruptCallback(const uint32_t sessionID)503 int32_t AudioPolicyManager::UnsetAudioInterruptCallback(const uint32_t sessionID)
504 {
505 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
506 if (gsp == nullptr) {
507 AUDIO_ERR_LOG("UnsetAudioInterruptCallback: audio policy manager proxy is NULL.");
508 return -1;
509 }
510 return gsp->UnsetAudioInterruptCallback(sessionID);
511 }
512
ActivateAudioInterrupt(const AudioInterrupt & audioInterrupt)513 int32_t AudioPolicyManager::ActivateAudioInterrupt(const AudioInterrupt &audioInterrupt)
514 {
515 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
516 if (gsp == nullptr) {
517 AUDIO_ERR_LOG("ActivateAudioInterrupt: audio policy manager proxy is NULL.");
518 return -1;
519 }
520 return gsp->ActivateAudioInterrupt(audioInterrupt);
521 }
522
DeactivateAudioInterrupt(const AudioInterrupt & audioInterrupt)523 int32_t AudioPolicyManager::DeactivateAudioInterrupt(const AudioInterrupt &audioInterrupt)
524 {
525 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
526 if (gsp == nullptr) {
527 AUDIO_ERR_LOG("DeactivateAudioInterrupt: audio policy manager proxy is NULL.");
528 return -1;
529 }
530 return gsp->DeactivateAudioInterrupt(audioInterrupt);
531 }
532
SetAudioManagerInterruptCallback(const uint32_t clientID,const std::shared_ptr<AudioInterruptCallback> & callback)533 int32_t AudioPolicyManager::SetAudioManagerInterruptCallback(const uint32_t clientID,
534 const std::shared_ptr<AudioInterruptCallback> &callback)
535 {
536 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
537 if (gsp == nullptr) {
538 AUDIO_ERR_LOG("SetAudioManagerInterruptCallback: audio policy manager proxy is NULL.");
539 return ERROR;
540 }
541 if (callback == nullptr) {
542 AUDIO_ERR_LOG("SetAudioManagerInterruptCallback: callback is nullptr");
543 return ERR_INVALID_PARAM;
544 }
545
546 std::unique_lock<std::mutex> lock(listenerStubMutex_);
547 sptr<AudioPolicyManagerListenerStub> interruptListenerStub = new(std::nothrow) AudioPolicyManagerListenerStub();
548 if (interruptListenerStub == nullptr) {
549 AUDIO_ERR_LOG("SetAudioManagerInterruptCallback: object null");
550 return ERROR;
551 }
552 interruptListenerStub->SetInterruptCallback(callback);
553
554 sptr<IRemoteObject> object = interruptListenerStub->AsObject();
555 if (object == nullptr) {
556 AUDIO_ERR_LOG("SetAudioManagerInterruptCallback: onInterruptListenerStub->AsObject is nullptr.");
557 return ERROR;
558 }
559 lock.unlock();
560
561 return gsp->SetAudioManagerInterruptCallback(clientID, object);
562 }
563
UnsetAudioManagerInterruptCallback(const uint32_t clientID)564 int32_t AudioPolicyManager::UnsetAudioManagerInterruptCallback(const uint32_t clientID)
565 {
566 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
567 if (gsp == nullptr) {
568 AUDIO_ERR_LOG("UnsetAudioManagerInterruptCallback: audio policy manager proxy is NULL.");
569 return -1;
570 }
571 return gsp->UnsetAudioManagerInterruptCallback(clientID);
572 }
573
RequestAudioFocus(const uint32_t clientID,const AudioInterrupt & audioInterrupt)574 int32_t AudioPolicyManager::RequestAudioFocus(const uint32_t clientID, const AudioInterrupt &audioInterrupt)
575 {
576 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
577 if (gsp == nullptr) {
578 AUDIO_ERR_LOG("RequestAudioFocus: audio policy manager proxy is NULL.");
579 return -1;
580 }
581 return gsp->RequestAudioFocus(clientID, audioInterrupt);
582 }
583
AbandonAudioFocus(const uint32_t clientID,const AudioInterrupt & audioInterrupt)584 int32_t AudioPolicyManager::AbandonAudioFocus(const uint32_t clientID, const AudioInterrupt &audioInterrupt)
585 {
586 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
587 if (gsp == nullptr) {
588 AUDIO_ERR_LOG("AbandonAudioFocus: audio policy manager proxy is NULL.");
589 return -1;
590 }
591 return gsp->AbandonAudioFocus(clientID, audioInterrupt);
592 }
593
GetStreamInFocus()594 AudioStreamType AudioPolicyManager::GetStreamInFocus()
595 {
596 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
597 if (gsp == nullptr) {
598 AUDIO_ERR_LOG("GetStreamInFocus: audio policy manager proxy is NULL.");
599 return STREAM_DEFAULT;
600 }
601 return gsp->GetStreamInFocus();
602 }
603
GetSessionInfoInFocus(AudioInterrupt & audioInterrupt)604 int32_t AudioPolicyManager::GetSessionInfoInFocus(AudioInterrupt &audioInterrupt)
605 {
606 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
607 if (gsp == nullptr) {
608 AUDIO_ERR_LOG("GetSessionInfoInFocus: audio policy manager proxy is NULL.");
609 return -1;
610 }
611 return gsp->GetSessionInfoInFocus(audioInterrupt);
612 }
613
SetVolumeKeyEventCallback(const int32_t clientPid,const std::shared_ptr<VolumeKeyEventCallback> & callback)614 int32_t AudioPolicyManager::SetVolumeKeyEventCallback(const int32_t clientPid,
615 const std::shared_ptr<VolumeKeyEventCallback> &callback)
616 {
617 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
618 if (gsp == nullptr) {
619 AUDIO_ERR_LOG("SetVolumeKeyEventCallback: audio policy manager proxy is NULL.");
620 return ERROR;
621 }
622
623 if (callback == nullptr) {
624 AUDIO_ERR_LOG("SetVolumeKeyEventCallback volume back is nullptr");
625 return ERR_INVALID_PARAM;
626 }
627
628 std::lock_guard<std::mutex> lock(volumeCallbackMutex_);
629 volumeKeyEventListenerStub_ = new(std::nothrow) AudioVolumeKeyEventCallbackStub();
630 if (volumeKeyEventListenerStub_ == nullptr) {
631 AUDIO_ERR_LOG("SetVolumeKeyEventCallback: object null");
632 return ERROR;
633 }
634 volumeKeyEventListenerStub_->SetOnVolumeKeyEventCallback(callback);
635
636 sptr<IRemoteObject> object = volumeKeyEventListenerStub_->AsObject();
637 if (object == nullptr) {
638 AUDIO_ERR_LOG("SetVolumeKeyEventCallback: volumeKeyEventListenerStub_->AsObject is nullptr.");
639 return ERROR;
640 }
641 return gsp->SetVolumeKeyEventCallback(clientPid, object);
642 }
643
UnsetVolumeKeyEventCallback(const int32_t clientPid)644 int32_t AudioPolicyManager::UnsetVolumeKeyEventCallback(const int32_t clientPid)
645 {
646 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
647 if (gsp == nullptr) {
648 AUDIO_ERR_LOG("UnsetVolumeKeyEventCallback: audio policy manager proxy is NULL.");
649 return -1;
650 }
651 return gsp->UnsetVolumeKeyEventCallback(clientPid);
652 }
653
RegisterAudioRendererEventListener(const int32_t clientUID,const std::shared_ptr<AudioRendererStateChangeCallback> & callback)654 int32_t AudioPolicyManager::RegisterAudioRendererEventListener(const int32_t clientUID,
655 const std::shared_ptr<AudioRendererStateChangeCallback> &callback)
656 {
657 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
658 if (gsp == nullptr) {
659 AUDIO_ERR_LOG("RegisterAudioRendererEventListener: audio policy manager proxy is NULL.");
660 return ERROR;
661 }
662
663 AUDIO_INFO_LOG("AudioPolicyManager::RegisterAudioRendererEventListener");
664 if (callback == nullptr) {
665 AUDIO_ERR_LOG("RegisterAudioRendererEventListener: RendererEvent Listener callback is nullptr");
666 return ERR_INVALID_PARAM;
667 }
668
669 std::unique_lock<std::mutex> lock(stateChangelistenerStubMutex_);
670 rendererStateChangelistenerStub_ = new(std::nothrow) AudioRendererStateChangeListenerStub();
671 if (rendererStateChangelistenerStub_ == nullptr) {
672 AUDIO_ERR_LOG("RegisterAudioRendererEventListener: object null");
673 return ERROR;
674 }
675
676 rendererStateChangelistenerStub_->SetCallback(callback);
677
678 sptr<IRemoteObject> object = rendererStateChangelistenerStub_->AsObject();
679 if (object == nullptr) {
680 AUDIO_ERR_LOG("RegisterAudioRendererEventListener:RenderStateChangeListener IPC object creation failed");
681 return ERROR;
682 }
683 lock.unlock();
684
685 return gsp->RegisterAudioRendererEventListener(clientUID, object);
686 }
687
UnregisterAudioRendererEventListener(const int32_t clientUID)688 int32_t AudioPolicyManager::UnregisterAudioRendererEventListener(const int32_t clientUID)
689 {
690 AUDIO_INFO_LOG("AudioPolicyManager::UnregisterAudioRendererEventListener");
691 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
692 if (gsp == nullptr) {
693 AUDIO_ERR_LOG("UnregisterAudioRendererEventListener: audio policy manager proxy is NULL.");
694 return ERROR;
695 }
696 return gsp->UnregisterAudioRendererEventListener(clientUID);
697 }
698
RegisterAudioCapturerEventListener(const int32_t clientUID,const std::shared_ptr<AudioCapturerStateChangeCallback> & callback)699 int32_t AudioPolicyManager::RegisterAudioCapturerEventListener(const int32_t clientUID,
700 const std::shared_ptr<AudioCapturerStateChangeCallback> &callback)
701 {
702 AUDIO_INFO_LOG("AudioPolicyManager::RegisterAudioCapturerEventListener");
703 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
704 if (gsp == nullptr) {
705 AUDIO_ERR_LOG("RegisterAudioCapturerEventListener: audio policy manager proxy is NULL.");
706 return ERROR;
707 }
708
709 if (callback == nullptr) {
710 AUDIO_ERR_LOG("RegisterAudioCapturerEventListener: Capturer Event Listener callback is nullptr");
711 return ERR_INVALID_PARAM;
712 }
713
714 std::unique_lock<std::mutex> lock(stateChangelistenerStubMutex_);
715 capturerStateChangelistenerStub_ = new(std::nothrow) AudioCapturerStateChangeListenerStub();
716 if (capturerStateChangelistenerStub_ == nullptr) {
717 AUDIO_ERR_LOG("RegisterAudioCapturerEventListener: object null");
718 return ERROR;
719 }
720
721 capturerStateChangelistenerStub_->SetCallback(callback);
722
723 sptr<IRemoteObject> object = capturerStateChangelistenerStub_->AsObject();
724 if (object == nullptr) {
725 AUDIO_ERR_LOG("RegisterAudioCapturerEventListener: CapturerStateChangeListener IPC object creation failed");
726 return ERROR;
727 }
728 lock.unlock();
729
730 return gsp->RegisterAudioCapturerEventListener(clientUID, object);
731 }
732
UnregisterAudioCapturerEventListener(const int32_t clientUID)733 int32_t AudioPolicyManager::UnregisterAudioCapturerEventListener(const int32_t clientUID)
734 {
735 AUDIO_INFO_LOG("AudioPolicyManager::UnregisterAudioCapturerEventListener");
736 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
737 if (gsp == nullptr) {
738 AUDIO_ERR_LOG("UnregisterAudioCapturerEventListener: audio policy manager proxy is NULL.");
739 return ERROR;
740 }
741 return gsp->UnregisterAudioCapturerEventListener(clientUID);
742 }
743
RegisterTracker(AudioMode & mode,AudioStreamChangeInfo & streamChangeInfo,const std::shared_ptr<AudioClientTracker> & clientTrackerObj)744 int32_t AudioPolicyManager::RegisterTracker(AudioMode &mode, AudioStreamChangeInfo &streamChangeInfo,
745 const std::shared_ptr<AudioClientTracker> &clientTrackerObj)
746 {
747 AUDIO_INFO_LOG("AudioPolicyManager::RegisterTracker");
748 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
749 if (gsp == nullptr) {
750 AUDIO_ERR_LOG("RegisterTracker: audio policy manager proxy is NULL.");
751 return ERROR;
752 }
753
754 std::unique_lock<std::mutex> lock(clientTrackerStubMutex_);
755 clientTrackerCbStub_ = new(std::nothrow) AudioClientTrackerCallbackStub();
756 if (clientTrackerCbStub_ == nullptr) {
757 AUDIO_ERR_LOG("clientTrackerCbStub: memory allocation failed");
758 return ERROR;
759 }
760
761 clientTrackerCbStub_->SetClientTrackerCallback(clientTrackerObj);
762
763 sptr<IRemoteObject> object = clientTrackerCbStub_->AsObject();
764 if (object == nullptr) {
765 AUDIO_ERR_LOG("clientTrackerCbStub: IPC object creation failed");
766 return ERROR;
767 }
768 lock.unlock();
769
770 return gsp->RegisterTracker(mode, streamChangeInfo, object);
771 }
772
UpdateTracker(AudioMode & mode,AudioStreamChangeInfo & streamChangeInfo)773 int32_t AudioPolicyManager::UpdateTracker(AudioMode &mode, AudioStreamChangeInfo &streamChangeInfo)
774 {
775 AUDIO_INFO_LOG("AudioPolicyManager::UpdateTracker");
776 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
777 if (gsp == nullptr) {
778 AUDIO_ERR_LOG("UpdateTracker: audio policy manager proxy is NULL.");
779 return ERROR;
780 }
781 return gsp->UpdateTracker(mode, streamChangeInfo);
782 }
783
VerifyClientPermission(const std::string & permissionName,uint32_t appTokenId,int32_t appUid,bool privacyFlag,AudioPermissionState state)784 bool AudioPolicyManager::VerifyClientPermission(const std::string &permissionName,
785 uint32_t appTokenId, int32_t appUid, bool privacyFlag, AudioPermissionState state)
786 {
787 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
788 if (gsp == nullptr) {
789 AUDIO_ERR_LOG("VerifyClientPermission: audio policy manager proxy is NULL.");
790 return false;
791 }
792 return gsp->VerifyClientPermission(permissionName, appTokenId, appUid, privacyFlag, state);
793 }
794
getUsingPemissionFromPrivacy(const std::string & permissionName,uint32_t appTokenId,AudioPermissionState state)795 bool AudioPolicyManager::getUsingPemissionFromPrivacy(const std::string &permissionName, uint32_t appTokenId,
796 AudioPermissionState state)
797 {
798 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
799 if (gsp == nullptr) {
800 AUDIO_ERR_LOG("getUsingPemissionFromPrivacy: audio policy manager proxy is NULL.");
801 return false;
802 }
803 return gsp->getUsingPemissionFromPrivacy(permissionName, appTokenId, state);
804 }
805
ReconfigureAudioChannel(const uint32_t & count,DeviceType deviceType)806 int32_t AudioPolicyManager::ReconfigureAudioChannel(const uint32_t &count, DeviceType deviceType)
807 {
808 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
809 if (gsp == nullptr) {
810 AUDIO_ERR_LOG("ReconfigureAudioChannel: audio policy manager proxy is NULL.");
811 return -1;
812 }
813 return gsp->ReconfigureAudioChannel(count, deviceType);
814 }
815
GetAudioLatencyFromXml()816 int32_t AudioPolicyManager::GetAudioLatencyFromXml()
817 {
818 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
819 if (gsp == nullptr) {
820 AUDIO_ERR_LOG("GetAudioLatencyFromXml: audio policy manager proxy is NULL.");
821 return -1;
822 }
823 return gsp->GetAudioLatencyFromXml();
824 }
825
GetSinkLatencyFromXml()826 uint32_t AudioPolicyManager::GetSinkLatencyFromXml()
827 {
828 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
829 if (gsp == nullptr) {
830 AUDIO_ERR_LOG("GetSinkLatencyFromXml: audio policy manager proxy is NULL.");
831 return 0;
832 }
833 return gsp->GetSinkLatencyFromXml();
834 }
835
GetCurrentRendererChangeInfos(vector<unique_ptr<AudioRendererChangeInfo>> & audioRendererChangeInfos)836 int32_t AudioPolicyManager::GetCurrentRendererChangeInfos(
837 vector<unique_ptr<AudioRendererChangeInfo>> &audioRendererChangeInfos)
838 {
839 AUDIO_DEBUG_LOG("AudioPolicyManager::GetCurrentRendererChangeInfos");
840 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
841 if (gsp == nullptr) {
842 AUDIO_ERR_LOG("GetCurrentRendererChangeInfos: audio policy manager proxy is NULL.");
843 return -1;
844 }
845 return gsp->GetCurrentRendererChangeInfos(audioRendererChangeInfos);
846 }
847
GetCurrentCapturerChangeInfos(vector<unique_ptr<AudioCapturerChangeInfo>> & audioCapturerChangeInfos)848 int32_t AudioPolicyManager::GetCurrentCapturerChangeInfos(
849 vector<unique_ptr<AudioCapturerChangeInfo>> &audioCapturerChangeInfos)
850 {
851 AUDIO_DEBUG_LOG("AudioPolicyManager::GetCurrentCapturerChangeInfos");
852 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
853 if (gsp == nullptr) {
854 AUDIO_ERR_LOG("GetCurrentCapturerChangeInfos: audio policy manager proxy is NULL.");
855 return ERROR;
856 }
857 return gsp->GetCurrentCapturerChangeInfos(audioCapturerChangeInfos);
858 }
859
UpdateStreamState(const int32_t clientUid,StreamSetState streamSetState,AudioStreamType audioStreamType)860 int32_t AudioPolicyManager::UpdateStreamState(const int32_t clientUid,
861 StreamSetState streamSetState, AudioStreamType audioStreamType)
862 {
863 AUDIO_DEBUG_LOG("AudioPolicyManager::UpdateStreamState");
864 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
865 if (gsp == nullptr) {
866 AUDIO_ERR_LOG("UpdateStreamState: audio policy manager proxy is NULL.");
867 return ERROR;
868 }
869 return gsp->UpdateStreamState(clientUid, streamSetState, audioStreamType);
870 }
871
GetVolumeGroupInfos()872 std::vector<sptr<VolumeGroupInfo>> AudioPolicyManager::GetVolumeGroupInfos()
873 {
874 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
875 if (gsp == nullptr) {
876 AUDIO_ERR_LOG("GetVolumeGroupInfos failed, g_apProxy is nullptr.");
877 std::vector<sptr<VolumeGroupInfo>> volumeGroupInfos = {};
878 return volumeGroupInfos;
879 }
880 return gsp->GetVolumeGroupInfos();
881 }
882
IsAudioRendererLowLatencySupported(const AudioStreamInfo & audioStreamInfo)883 bool AudioPolicyManager::IsAudioRendererLowLatencySupported(const AudioStreamInfo &audioStreamInfo)
884 {
885 AUDIO_DEBUG_LOG("AudioPolicyManager::IsAudioRendererLowLatencySupported");
886 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
887 if (gsp == nullptr) {
888 AUDIO_ERR_LOG("IsAudioRendererLowLatencySupported: audio policy manager proxy is NULL.");
889 return -1;
890 }
891 return gsp->IsAudioRendererLowLatencySupported(audioStreamInfo);
892 }
893 } // namespace AudioStandard
894 } // namespace OHOS
895