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_base.h"
19 #include "audio_policy_proxy.h"
20 #include "audio_server_death_recipient.h"
21 #include "iservice_registry.h"
22 #include "audio_log.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 std::unordered_map<int32_t, std::weak_ptr<AudioRendererPolicyServiceDiedCallback>> AudioPolicyManager::rendererCBMap_;
32
GetAudioPolicyManagerProxy()33 inline const sptr<IAudioPolicy> GetAudioPolicyManagerProxy()
34 {
35 AUDIO_DEBUG_LOG("GetAudioPolicyManagerProxy Start to get audio manager service proxy.");
36 lock_guard<mutex> lock(g_apProxyMutex);
37
38 if (g_apProxy == nullptr) {
39 auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
40 if (samgr == nullptr) {
41 AUDIO_ERR_LOG("GetAudioPolicyManagerProxy samgr init failed.");
42 return nullptr;
43 }
44
45 sptr<IRemoteObject> object = samgr->GetSystemAbility(AUDIO_POLICY_SERVICE_ID);
46 if (object == nullptr) {
47 AUDIO_ERR_LOG("GetAudioPolicyManagerProxy Object is NULL.");
48 return nullptr;
49 }
50
51 g_apProxy = iface_cast<IAudioPolicy>(object);
52 if (g_apProxy == nullptr) {
53 AUDIO_ERR_LOG("GetAudioPolicyManagerProxy Init g_apProxy is NULL.");
54 return nullptr;
55 }
56
57 AUDIO_DEBUG_LOG("GetAudioPolicyManagerProxy Init g_apProxy is assigned.");
58 pid_t pid = 0;
59 sptr<AudioServerDeathRecipient> deathRecipient_ = new(std::nothrow) AudioServerDeathRecipient(pid);
60 if (deathRecipient_ != nullptr) {
61 deathRecipient_->SetNotifyCb(std::bind(&AudioPolicyManager::AudioPolicyServerDied,
62 std::placeholders::_1));
63 AUDIO_INFO_LOG("Register audio policy server death recipient");
64 bool result = object->AddDeathRecipient(deathRecipient_);
65 if (!result) {
66 AUDIO_ERR_LOG("failed to add deathRecipient");
67 }
68 }
69 }
70
71 const sptr<IAudioPolicy> gsp = g_apProxy;
72 return gsp;
73 }
74
AudioPolicyServerDied(pid_t pid)75 void AudioPolicyManager::AudioPolicyServerDied(pid_t pid)
76 {
77 lock_guard<mutex> lock(g_apProxyMutex);
78 if (g_apProxy == nullptr) {
79 AUDIO_ERR_LOG("Audio policy server has already died!");
80 return;
81 }
82 AUDIO_INFO_LOG("Audio policy server died: reestablish connection");
83 std::shared_ptr<AudioRendererPolicyServiceDiedCallback> cb;
84 for (auto it = rendererCBMap_.begin(); it != rendererCBMap_.end(); ++it) {
85 cb = it->second.lock();
86 if (cb != nullptr) {
87 cb->OnAudioPolicyServiceDied();
88 rendererCBMap_.erase(getpid());
89 }
90 }
91 g_apProxy = nullptr;
92 }
93
GetMaxVolumeLevel(AudioVolumeType volumeType)94 int32_t AudioPolicyManager::GetMaxVolumeLevel(AudioVolumeType volumeType)
95 {
96 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
97 if (gsp == nullptr) {
98 AUDIO_ERR_LOG("GetMaxVolumeLevel: audio policy manager proxy is NULL.");
99 return -1;
100 }
101
102 return gsp->GetMaxVolumeLevel(volumeType);
103 }
104
GetMinVolumeLevel(AudioVolumeType volumeType)105 int32_t AudioPolicyManager::GetMinVolumeLevel(AudioVolumeType volumeType)
106 {
107 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
108 if (gsp == nullptr) {
109 AUDIO_ERR_LOG("GetMinVolumeLevel: audio policy manager proxy is NULL.");
110 return -1;
111 }
112
113 return gsp->GetMinVolumeLevel(volumeType);
114 }
115
SetSystemVolumeLevel(AudioStreamType streamType,int32_t volumeLevel,API_VERSION api_v)116 int32_t AudioPolicyManager::SetSystemVolumeLevel(AudioStreamType streamType, int32_t volumeLevel, API_VERSION api_v)
117 {
118 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
119 if (gsp == nullptr) {
120 AUDIO_ERR_LOG("SetSystemVolumeLevel: audio policy manager proxy is NULL.");
121 return -1;
122 }
123
124 return gsp->SetSystemVolumeLevel(streamType, volumeLevel, api_v);
125 }
126
SetRingerMode(AudioRingerMode ringMode,API_VERSION api_v)127 int32_t AudioPolicyManager::SetRingerMode(AudioRingerMode ringMode, API_VERSION api_v)
128 {
129 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
130 if (gsp == nullptr) {
131 AUDIO_ERR_LOG("SetRingerMode: audio policy manager proxy is NULL.");
132 return -1;
133 }
134 return gsp->SetRingerMode(ringMode, api_v);
135 }
136
GetRingerMode()137 AudioRingerMode AudioPolicyManager::GetRingerMode()
138 {
139 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
140 if (gsp == nullptr) {
141 AUDIO_ERR_LOG("GetRingerMode: audio policy manager proxy is NULL.");
142 return RINGER_MODE_NORMAL;
143 }
144 return gsp->GetRingerMode();
145 }
146
SetAudioScene(AudioScene scene)147 int32_t AudioPolicyManager::SetAudioScene(AudioScene scene)
148 {
149 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
150 if (gsp == nullptr) {
151 AUDIO_ERR_LOG("SetAudioScene: audio policy manager proxy is NULL.");
152 return -1;
153 }
154 return gsp->SetAudioScene(scene);
155 }
156
SetMicrophoneMute(bool isMute)157 int32_t AudioPolicyManager::SetMicrophoneMute(bool isMute)
158 {
159 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
160 if (gsp == nullptr) {
161 AUDIO_ERR_LOG("SetMicrophoneMute: audio policy manager proxy is NULL.");
162 return -1;
163 }
164 return gsp->SetMicrophoneMute(isMute);
165 }
166
SetMicrophoneMuteAudioConfig(bool isMute)167 int32_t AudioPolicyManager::SetMicrophoneMuteAudioConfig(bool isMute)
168 {
169 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
170 if (gsp == nullptr) {
171 AUDIO_ERR_LOG("SetMicrophoneMuteAudioConfig: audio policy manager proxy is NULL.");
172 return -1;
173 }
174 return gsp->SetMicrophoneMuteAudioConfig(isMute);
175 }
176
IsMicrophoneMute(API_VERSION api_v)177 bool AudioPolicyManager::IsMicrophoneMute(API_VERSION api_v)
178 {
179 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
180 if (gsp == nullptr) {
181 AUDIO_ERR_LOG("IsMicrophoneMute: audio policy manager proxy is NULL.");
182 return -1;
183 }
184 return gsp->IsMicrophoneMute(api_v);
185 }
186
GetAudioScene()187 AudioScene AudioPolicyManager::GetAudioScene()
188 {
189 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
190 if (gsp == nullptr) {
191 AUDIO_ERR_LOG("GetAudioScene: audio policy manager proxy is NULL.");
192 return AUDIO_SCENE_DEFAULT;
193 }
194 return gsp->GetAudioScene();
195 }
196
GetSystemVolumeLevel(AudioStreamType streamType)197 int32_t AudioPolicyManager::GetSystemVolumeLevel(AudioStreamType streamType)
198 {
199 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
200 if (gsp == nullptr) {
201 AUDIO_ERR_LOG("GetSystemVolumeLevel: audio policy manager proxy is NULL.");
202 return -1;
203 }
204 return gsp->GetSystemVolumeLevel(streamType);
205 }
206
SetStreamMute(AudioStreamType streamType,bool mute,API_VERSION api_v)207 int32_t AudioPolicyManager::SetStreamMute(AudioStreamType streamType, bool mute, API_VERSION api_v)
208 {
209 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
210 if (gsp == nullptr) {
211 AUDIO_ERR_LOG("SetStreamMute: audio policy manager proxy is NULL.");
212 return -1;
213 }
214 return gsp->SetStreamMute(streamType, mute, api_v);
215 }
216
GetStreamMute(AudioStreamType streamType)217 bool AudioPolicyManager::GetStreamMute(AudioStreamType streamType)
218 {
219 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
220 if (gsp == nullptr) {
221 AUDIO_ERR_LOG("GetStreamMute: audio policy manager proxy is NULL.");
222 return false;
223 }
224 return gsp->GetStreamMute(streamType);
225 }
226
SetLowPowerVolume(int32_t streamId,float volume)227 int32_t AudioPolicyManager::SetLowPowerVolume(int32_t streamId, float volume)
228 {
229 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
230 if (gsp == nullptr) {
231 AUDIO_ERR_LOG("SetLowPowerVolume: audio policy manager proxy is NULL.");
232 return -1;
233 }
234 return gsp->SetLowPowerVolume(streamId, volume);
235 }
236
GetLowPowerVolume(int32_t streamId)237 float AudioPolicyManager::GetLowPowerVolume(int32_t streamId)
238 {
239 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
240 if (gsp == nullptr) {
241 AUDIO_ERR_LOG("GetLowPowerVolume: audio policy manager proxy is NULL.");
242 return -1;
243 }
244 return gsp->GetLowPowerVolume(streamId);
245 }
246
GetSingleStreamVolume(int32_t streamId)247 float AudioPolicyManager::GetSingleStreamVolume(int32_t streamId)
248 {
249 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
250 if (gsp == nullptr) {
251 AUDIO_ERR_LOG("GetSingleStreamVolume: audio policy manager proxy is NULL.");
252 return -1;
253 }
254 return gsp->GetSingleStreamVolume(streamId);
255 }
256
IsStreamActive(AudioStreamType streamType)257 bool AudioPolicyManager::IsStreamActive(AudioStreamType streamType)
258 {
259 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
260 if (gsp == nullptr) {
261 AUDIO_ERR_LOG("IsStreamActive: audio policy manager proxy is NULL.");
262 return false;
263 }
264 return gsp->IsStreamActive(streamType);
265 }
266
SelectOutputDevice(sptr<AudioRendererFilter> audioRendererFilter,std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)267 int32_t AudioPolicyManager::SelectOutputDevice(sptr<AudioRendererFilter> audioRendererFilter,
268 std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)
269 {
270 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
271 if (gsp == nullptr) {
272 AUDIO_ERR_LOG("SelectOutputDevice: audio policy manager proxy is NULL.");
273 return -1;
274 }
275 return gsp->SelectOutputDevice(audioRendererFilter, audioDeviceDescriptors);
276 }
277
GetSelectedDeviceInfo(int32_t uid,int32_t pid,AudioStreamType streamType)278 std::string AudioPolicyManager::GetSelectedDeviceInfo(int32_t uid, int32_t pid, AudioStreamType streamType)
279 {
280 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
281 if (gsp == nullptr) {
282 AUDIO_ERR_LOG("GetSelectedDeviceInfo: audio policy manager proxy is NULL.");
283 return "";
284 }
285 return gsp->GetSelectedDeviceInfo(uid, pid, streamType);
286 }
287
SelectInputDevice(sptr<AudioCapturerFilter> audioCapturerFilter,std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)288 int32_t AudioPolicyManager::SelectInputDevice(sptr<AudioCapturerFilter> audioCapturerFilter,
289 std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)
290 {
291 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
292 if (gsp == nullptr) {
293 AUDIO_ERR_LOG("SelectInputDevice: audio policy manager proxy is NULL.");
294 return -1;
295 }
296 return gsp->SelectInputDevice(audioCapturerFilter, audioDeviceDescriptors);
297 }
298
GetDevices(DeviceFlag deviceFlag)299 std::vector<sptr<AudioDeviceDescriptor>> AudioPolicyManager::GetDevices(DeviceFlag deviceFlag)
300 {
301 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
302 if (gsp == nullptr) {
303 AUDIO_ERR_LOG("GetDevices: audio policy manager proxy is NULL.");
304 std::vector<sptr<AudioDeviceDescriptor>> deviceInfo;
305 return deviceInfo;
306 }
307 return gsp->GetDevices(deviceFlag);
308 }
309
SetWakeUpAudioCapturer(InternalAudioCapturerOptions options)310 int32_t AudioPolicyManager::SetWakeUpAudioCapturer(InternalAudioCapturerOptions options)
311 {
312 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
313 if (gsp == nullptr) {
314 AUDIO_ERR_LOG("SetWakeUpAudioCapturer: audio policy manager proxy is NULL.");
315 return -1;
316 }
317 return gsp->SetWakeUpAudioCapturer(options);
318 }
319
CloseWakeUpAudioCapturer()320 int32_t AudioPolicyManager::CloseWakeUpAudioCapturer()
321 {
322 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
323 if (gsp == nullptr) {
324 AUDIO_ERR_LOG("CloseWakeUpAudioCapturer: audio policy manager proxy is NULL.");
325 return -1;
326 }
327 return gsp->CloseWakeUpAudioCapturer();
328 }
GetPreferredOutputDeviceDescriptors(AudioRendererInfo & rendererInfo)329 std::vector<sptr<AudioDeviceDescriptor>> AudioPolicyManager::GetPreferredOutputDeviceDescriptors(
330 AudioRendererInfo &rendererInfo)
331 {
332 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
333 if (gsp == nullptr) {
334 AUDIO_ERR_LOG("GetPreferredOutputDeviceDescriptors: audio policy manager proxy is NULL.");
335 std::vector<sptr<AudioDeviceDescriptor>> deviceInfo;
336 return deviceInfo;
337 }
338 return gsp->GetPreferredOutputDeviceDescriptors(rendererInfo);
339 }
340
GetPreferredInputDeviceDescriptors(AudioCapturerInfo & captureInfo)341 std::vector<sptr<AudioDeviceDescriptor>> AudioPolicyManager::GetPreferredInputDeviceDescriptors(
342 AudioCapturerInfo &captureInfo)
343 {
344 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
345 if (gsp == nullptr) {
346 AUDIO_ERR_LOG("GetPreferredInputDeviceDescriptors: audio policy manager proxy is NULL.");
347 std::vector<sptr<AudioDeviceDescriptor>> deviceInfo;
348 return deviceInfo;
349 }
350 return gsp->GetPreferredInputDeviceDescriptors(captureInfo);
351 }
352
GetAudioFocusInfoList(std::list<std::pair<AudioInterrupt,AudioFocuState>> & focusInfoList)353 int32_t AudioPolicyManager::GetAudioFocusInfoList(std::list<std::pair<AudioInterrupt, AudioFocuState>> &focusInfoList)
354 {
355 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
356 if (gsp == nullptr) {
357 AUDIO_ERR_LOG("GetAudioFocusInfoList: audio policy manager proxy is NULL.");
358 return -1;
359 }
360 return gsp->GetAudioFocusInfoList(focusInfoList);
361 }
362
RegisterFocusInfoChangeCallback(const int32_t clientId,const std::shared_ptr<AudioFocusInfoChangeCallback> & callback)363 int32_t AudioPolicyManager::RegisterFocusInfoChangeCallback(const int32_t clientId,
364 const std::shared_ptr<AudioFocusInfoChangeCallback> &callback)
365 {
366 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
367 if (gsp == nullptr) {
368 AUDIO_ERR_LOG("RegisterFocusInfoChangeCallback: audio policy manager proxy is NULL.");
369 return ERROR;
370 }
371 if (callback == nullptr) {
372 AUDIO_ERR_LOG("RegisterFocusInfoChangeCallback: callback is nullptr");
373 return ERR_INVALID_PARAM;
374 }
375
376 std::unique_lock<std::mutex> lock(listenerStubMutex_);
377 sptr<AudioPolicyManagerListenerStub> focusListenerStub = new(std::nothrow) AudioPolicyManagerListenerStub();
378 if (focusListenerStub == nullptr) {
379 AUDIO_ERR_LOG("RegisterFocusInfoChangeCallback: object null");
380 return ERROR;
381 }
382 focusListenerStub->SetFocusInfoChangeCallback(callback);
383
384 sptr<IRemoteObject> object = focusListenerStub->AsObject();
385 if (object == nullptr) {
386 AUDIO_ERR_LOG("RegisterFocusInfoChangeCallback: focusListenerStub->AsObject is nullptr.");
387 return ERROR;
388 }
389 lock.unlock();
390
391 return gsp->RegisterFocusInfoChangeCallback(clientId, object);
392 }
393
UnregisterFocusInfoChangeCallback(const int32_t clientId)394 int32_t AudioPolicyManager::UnregisterFocusInfoChangeCallback(const int32_t clientId)
395 {
396 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
397 if (gsp == nullptr) {
398 AUDIO_ERR_LOG("UnsetDeviceChangeCallback: audio policy manager proxy is NULL.");
399 return -1;
400 }
401
402 return gsp->UnregisterFocusInfoChangeCallback(clientId);
403 }
404
405 #ifdef FEATURE_DTMF_TONE
GetSupportedTones()406 std::vector<int32_t> AudioPolicyManager::GetSupportedTones()
407 {
408 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
409 if (gsp == nullptr) {
410 AUDIO_ERR_LOG("GetSupportedTones: audio policy manager proxy is NULL.");
411 std::vector<int> lSupportedToneList = {};
412 return lSupportedToneList;
413 }
414 return gsp->GetSupportedTones();
415 }
416
GetToneConfig(int32_t ltonetype)417 std::shared_ptr<ToneInfo> AudioPolicyManager::GetToneConfig(int32_t ltonetype)
418 {
419 AUDIO_DEBUG_LOG("AudioPolicyManager GetToneConfig,");
420
421 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
422 if (gsp == nullptr) {
423 AUDIO_ERR_LOG("GetToneConfig: audio policy manager proxy is NULL.");
424 return nullptr;
425 }
426 return gsp->GetToneConfig(ltonetype);
427 }
428 #endif
429
SetDeviceActive(InternalDeviceType deviceType,bool active)430 int32_t AudioPolicyManager::SetDeviceActive(InternalDeviceType deviceType, bool active)
431 {
432 AUDIO_INFO_LOG("SetDeviceActive deviceType: %{public}d, active: %{public}d", deviceType, active);
433 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
434 if (gsp == nullptr) {
435 AUDIO_ERR_LOG("SetDeviceActive: audio policy manager proxy is NULL.");
436 return -1;
437 }
438 return gsp->SetDeviceActive(deviceType, active);
439 }
440
IsDeviceActive(InternalDeviceType deviceType)441 bool AudioPolicyManager::IsDeviceActive(InternalDeviceType deviceType)
442 {
443 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
444 if (gsp == nullptr) {
445 AUDIO_ERR_LOG("IsDeviceActive: audio policy manager proxy is NULL.");
446 return false;
447 }
448 return gsp->IsDeviceActive(deviceType);
449 }
450
GetActiveOutputDevice()451 DeviceType AudioPolicyManager::GetActiveOutputDevice()
452 {
453 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
454 if (gsp == nullptr) {
455 AUDIO_ERR_LOG("GetActiveOutputDevice: audio policy manager proxy is NULL.");
456 return DEVICE_TYPE_INVALID;
457 }
458 return gsp->GetActiveOutputDevice();
459 }
460
GetActiveInputDevice()461 DeviceType AudioPolicyManager::GetActiveInputDevice()
462 {
463 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
464 if (gsp == nullptr) {
465 AUDIO_ERR_LOG("GetActiveInputDevice: audio policy manager proxy is NULL.");
466 return DEVICE_TYPE_INVALID;
467 }
468 return gsp->GetActiveInputDevice();
469 }
470
SetRingerModeCallback(const int32_t clientId,const std::shared_ptr<AudioRingerModeCallback> & callback,API_VERSION api_v)471 int32_t AudioPolicyManager::SetRingerModeCallback(const int32_t clientId,
472 const std::shared_ptr<AudioRingerModeCallback> &callback, API_VERSION api_v)
473 {
474 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
475 if (gsp == nullptr) {
476 AUDIO_ERR_LOG("SetRingerModeCallback: audio policy manager proxy is NULL.");
477 return ERR_INVALID_PARAM;
478 }
479
480 if (callback == nullptr) {
481 AUDIO_ERR_LOG("SetRingerModeCallback: callback is nullptr");
482 return ERR_INVALID_PARAM;
483 }
484 std::lock_guard<std::mutex> lockSet(ringerModelistenerStubMutex_);
485 ringerModelistenerStub_ = new(std::nothrow) AudioRingerModeUpdateListenerStub();
486 if (ringerModelistenerStub_ == nullptr) {
487 AUDIO_ERR_LOG("SetRingerModeCallback: object null");
488 return ERROR;
489 }
490 ringerModelistenerStub_->SetCallback(callback);
491
492 sptr<IRemoteObject> object = ringerModelistenerStub_->AsObject();
493 if (object == nullptr) {
494 AUDIO_ERR_LOG("SetRingerModeCallback: listenerStub->AsObject is nullptr..");
495 return ERROR;
496 }
497
498 return gsp->SetRingerModeCallback(clientId, object, api_v);
499 }
500
UnsetRingerModeCallback(const int32_t clientId)501 int32_t AudioPolicyManager::UnsetRingerModeCallback(const int32_t clientId)
502 {
503 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
504 if (gsp == nullptr) {
505 AUDIO_ERR_LOG("UnsetRingerModeCallback: audio policy manager proxy is NULL.");
506 return -1;
507 }
508 return gsp->UnsetRingerModeCallback(clientId);
509 }
510
SetDeviceChangeCallback(const int32_t clientId,const DeviceFlag flag,const std::shared_ptr<AudioManagerDeviceChangeCallback> & callback)511 int32_t AudioPolicyManager::SetDeviceChangeCallback(const int32_t clientId, const DeviceFlag flag,
512 const std::shared_ptr<AudioManagerDeviceChangeCallback> &callback)
513 {
514 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
515 if (gsp == nullptr) {
516 AUDIO_ERR_LOG("SetDeviceChangeCallback: audio policy manager proxy is NULL.");
517 return -1;
518 }
519 if (callback == nullptr) {
520 AUDIO_ERR_LOG("SetDeviceChangeCallback: callback is nullptr");
521 return ERR_INVALID_PARAM;
522 }
523
524 auto deviceChangeCbStub = new(std::nothrow) AudioPolicyManagerListenerStub();
525 if (deviceChangeCbStub == nullptr) {
526 AUDIO_ERR_LOG("SetDeviceChangeCallback: object null");
527 return ERROR;
528 }
529
530 deviceChangeCbStub->SetDeviceChangeCallback(callback);
531
532 sptr<IRemoteObject> object = deviceChangeCbStub->AsObject();
533 if (object == nullptr) {
534 AUDIO_ERR_LOG("SetDeviceChangeCallback: listenerStub->AsObject is nullptr..");
535 delete deviceChangeCbStub;
536 return ERROR;
537 }
538
539 return gsp->SetDeviceChangeCallback(clientId, flag, object);
540 }
541
UnsetDeviceChangeCallback(const int32_t clientId,DeviceFlag flag)542 int32_t AudioPolicyManager::UnsetDeviceChangeCallback(const int32_t clientId, DeviceFlag flag)
543 {
544 AUDIO_INFO_LOG("Entered %{public}s", __func__);
545 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
546 if (gsp == nullptr) {
547 AUDIO_ERR_LOG("UnsetDeviceChangeCallback: audio policy manager proxy is NULL.");
548 return -1;
549 }
550 return gsp->UnsetDeviceChangeCallback(clientId, flag);
551 }
552
SetPreferredOutputDeviceChangeCallback(const int32_t clientId,const std::shared_ptr<AudioPreferredOutputDeviceChangeCallback> & callback)553 int32_t AudioPolicyManager::SetPreferredOutputDeviceChangeCallback(const int32_t clientId,
554 const std::shared_ptr<AudioPreferredOutputDeviceChangeCallback> &callback)
555 {
556 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
557 if (gsp == nullptr) {
558 AUDIO_ERR_LOG("SetPreferredOutputDeviceChangeCallback: audio policy manager proxy is NULL.");
559 return -1;
560 }
561 if (callback == nullptr) {
562 AUDIO_ERR_LOG("SetPreferredOutputDeviceChangeCallback: callback is nullptr");
563 return ERR_INVALID_PARAM;
564 }
565
566 auto activeOutputDeviceChangeCbStub = new(std::nothrow) AudioRoutingManagerListenerStub();
567 if (activeOutputDeviceChangeCbStub == nullptr) {
568 AUDIO_ERR_LOG("SetPreferredOutputDeviceChangeCallback: object null");
569 return ERROR;
570 }
571
572 activeOutputDeviceChangeCbStub->SetPreferredOutputDeviceChangeCallback(callback);
573
574 sptr<IRemoteObject> object = activeOutputDeviceChangeCbStub->AsObject();
575 if (object == nullptr) {
576 AUDIO_ERR_LOG("SetPreferredOutputDeviceChangeCallback: activeOutputDeviceChangeCbStub->AsObject is nullptr..");
577 delete activeOutputDeviceChangeCbStub;
578 return ERROR;
579 }
580
581 return gsp->SetPreferredOutputDeviceChangeCallback(clientId, object);
582 }
583
SetPreferredInputDeviceChangeCallback(const std::shared_ptr<AudioPreferredInputDeviceChangeCallback> & callback)584 int32_t AudioPolicyManager::SetPreferredInputDeviceChangeCallback(
585 const std::shared_ptr<AudioPreferredInputDeviceChangeCallback> &callback)
586 {
587 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
588 if (gsp == nullptr) {
589 AUDIO_ERR_LOG("AudioPreferredInputDeviceChangeCallback: audio policy manager proxy is NULL.");
590 return -1;
591 }
592
593 auto activeInputDeviceChangeCbStub = new(std::nothrow) AudioRoutingManagerListenerStub();
594 if (activeInputDeviceChangeCbStub == nullptr) {
595 AUDIO_ERR_LOG("AudioPreferredInputDeviceChangeCallback: object null");
596 return ERROR;
597 }
598
599 activeInputDeviceChangeCbStub->SetPreferredInputDeviceChangeCallback(callback);
600
601 sptr<IRemoteObject> object = activeInputDeviceChangeCbStub->AsObject();
602 if (object == nullptr) {
603 AUDIO_ERR_LOG("AudioPreferredInputDeviceChangeCallback: activeInputDeviceChangeCbStub->AsObject is nullptr.");
604 delete activeInputDeviceChangeCbStub;
605 return ERROR;
606 }
607
608 return gsp->SetPreferredInputDeviceChangeCallback(object);
609 }
610
UnsetPreferredOutputDeviceChangeCallback(const int32_t clientId)611 int32_t AudioPolicyManager::UnsetPreferredOutputDeviceChangeCallback(const int32_t clientId)
612 {
613 AUDIO_INFO_LOG("Entered %{public}s", __func__);
614 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
615 if (gsp == nullptr) {
616 AUDIO_ERR_LOG("UnsetDeviceChangeCallback: audio policy manager proxy is NULL.");
617 return -1;
618 }
619 return gsp->UnsetPreferredOutputDeviceChangeCallback(clientId);
620 }
621
UnsetPreferredInputDeviceChangeCallback()622 int32_t AudioPolicyManager::UnsetPreferredInputDeviceChangeCallback()
623 {
624 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
625 if (gsp == nullptr) {
626 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
627 return -1;
628 }
629 return gsp->UnsetPreferredInputDeviceChangeCallback();
630 }
631
SetMicStateChangeCallback(const int32_t clientId,const std::shared_ptr<AudioManagerMicStateChangeCallback> & callback)632 int32_t AudioPolicyManager::SetMicStateChangeCallback(const int32_t clientId,
633 const std::shared_ptr<AudioManagerMicStateChangeCallback> &callback)
634 {
635 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
636 if (gsp == nullptr) {
637 AUDIO_ERR_LOG("SetMicStateChangeCallback: audio policy manager proxy is NULL.");
638 return ERROR;
639 }
640 if (callback == nullptr) {
641 AUDIO_ERR_LOG("SetMicStateChangeCallback: callback is nullptr");
642 return ERR_INVALID_PARAM;
643 }
644
645 auto micStateChangeCbStub = new(std::nothrow) AudioRoutingManagerListenerStub();
646 if (micStateChangeCbStub == nullptr) {
647 AUDIO_ERR_LOG("SetMicStateChangeCallback: object null");
648 return ERROR;
649 }
650
651 micStateChangeCbStub->SetMicStateChangeCallback(callback);
652
653 sptr<IRemoteObject> object = micStateChangeCbStub->AsObject();
654 if (object == nullptr) {
655 AUDIO_ERR_LOG("SetMicStateChangeCallback: listenerStub->AsObject is nullptr..");
656 return ERROR;
657 }
658 return gsp->SetMicStateChangeCallback(clientId, object);
659 }
660
SetAudioInterruptCallback(const uint32_t sessionID,const std::shared_ptr<AudioInterruptCallback> & callback)661 int32_t AudioPolicyManager::SetAudioInterruptCallback(const uint32_t sessionID,
662 const std::shared_ptr<AudioInterruptCallback> &callback)
663 {
664 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
665 if (gsp == nullptr) {
666 AUDIO_ERR_LOG("SetAudioInterruptCallback: audio policy manager proxy is NULL.");
667 return ERROR;
668 }
669 if (callback == nullptr) {
670 AUDIO_ERR_LOG("SetAudioInterruptCallback: callback is nullptr");
671 return ERR_INVALID_PARAM;
672 }
673
674 // Need to lock member variable listenerStub_ as SetAudioInterruptCallback
675 // can be called from different threads in multi renderer usage
676 std::unique_lock<std::mutex> lock(listenerStubMutex_);
677 listenerStub_ = new(std::nothrow) AudioPolicyManagerListenerStub();
678 if (listenerStub_ == nullptr) {
679 AUDIO_ERR_LOG("SetAudioInterruptCallback: object null");
680 return ERROR;
681 }
682 listenerStub_->SetInterruptCallback(callback);
683
684 sptr<IRemoteObject> object = listenerStub_->AsObject();
685 if (object == nullptr) {
686 AUDIO_ERR_LOG("SetAudioInterruptCallback: listenerStub->AsObject is nullptr..");
687 return ERROR;
688 }
689 lock.unlock(); // unlock once it is converted into IRemoteObject
690
691 return gsp->SetAudioInterruptCallback(sessionID, object);
692 }
693
UnsetAudioInterruptCallback(const uint32_t sessionID)694 int32_t AudioPolicyManager::UnsetAudioInterruptCallback(const uint32_t sessionID)
695 {
696 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
697 if (gsp == nullptr) {
698 AUDIO_ERR_LOG("UnsetAudioInterruptCallback: audio policy manager proxy is NULL.");
699 return -1;
700 }
701 return gsp->UnsetAudioInterruptCallback(sessionID);
702 }
703
ActivateAudioInterrupt(const AudioInterrupt & audioInterrupt)704 int32_t AudioPolicyManager::ActivateAudioInterrupt(const AudioInterrupt &audioInterrupt)
705 {
706 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
707 if (gsp == nullptr) {
708 AUDIO_ERR_LOG("ActivateAudioInterrupt: audio policy manager proxy is NULL.");
709 return -1;
710 }
711 return gsp->ActivateAudioInterrupt(audioInterrupt);
712 }
713
DeactivateAudioInterrupt(const AudioInterrupt & audioInterrupt)714 int32_t AudioPolicyManager::DeactivateAudioInterrupt(const AudioInterrupt &audioInterrupt)
715 {
716 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
717 if (gsp == nullptr) {
718 AUDIO_ERR_LOG("DeactivateAudioInterrupt: audio policy manager proxy is NULL.");
719 return -1;
720 }
721 return gsp->DeactivateAudioInterrupt(audioInterrupt);
722 }
723
SetAudioManagerInterruptCallback(const int32_t clientId,const std::shared_ptr<AudioInterruptCallback> & callback)724 int32_t AudioPolicyManager::SetAudioManagerInterruptCallback(const int32_t clientId,
725 const std::shared_ptr<AudioInterruptCallback> &callback)
726 {
727 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
728 if (gsp == nullptr) {
729 AUDIO_ERR_LOG("SetAudioManagerInterruptCallback: audio policy manager proxy is NULL.");
730 return ERROR;
731 }
732 if (callback == nullptr) {
733 AUDIO_ERR_LOG("SetAudioManagerInterruptCallback: callback is nullptr");
734 return ERR_INVALID_PARAM;
735 }
736
737 std::unique_lock<std::mutex> lock(listenerStubMutex_);
738 sptr<AudioPolicyManagerListenerStub> interruptListenerStub = new(std::nothrow) AudioPolicyManagerListenerStub();
739 if (interruptListenerStub == nullptr) {
740 AUDIO_ERR_LOG("SetAudioManagerInterruptCallback: object null");
741 return ERROR;
742 }
743 interruptListenerStub->SetInterruptCallback(callback);
744
745 sptr<IRemoteObject> object = interruptListenerStub->AsObject();
746 if (object == nullptr) {
747 AUDIO_ERR_LOG("SetAudioManagerInterruptCallback: onInterruptListenerStub->AsObject is nullptr.");
748 return ERROR;
749 }
750 lock.unlock();
751
752 return gsp->SetAudioManagerInterruptCallback(clientId, object);
753 }
754
UnsetAudioManagerInterruptCallback(const int32_t clientId)755 int32_t AudioPolicyManager::UnsetAudioManagerInterruptCallback(const int32_t clientId)
756 {
757 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
758 if (gsp == nullptr) {
759 AUDIO_ERR_LOG("UnsetAudioManagerInterruptCallback: audio policy manager proxy is NULL.");
760 return -1;
761 }
762 return gsp->UnsetAudioManagerInterruptCallback(clientId);
763 }
764
RequestAudioFocus(const int32_t clientId,const AudioInterrupt & audioInterrupt)765 int32_t AudioPolicyManager::RequestAudioFocus(const int32_t clientId, const AudioInterrupt &audioInterrupt)
766 {
767 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
768 if (gsp == nullptr) {
769 AUDIO_ERR_LOG("RequestAudioFocus: audio policy manager proxy is NULL.");
770 return -1;
771 }
772 return gsp->RequestAudioFocus(clientId, audioInterrupt);
773 }
774
AbandonAudioFocus(const int32_t clientId,const AudioInterrupt & audioInterrupt)775 int32_t AudioPolicyManager::AbandonAudioFocus(const int32_t clientId, const AudioInterrupt &audioInterrupt)
776 {
777 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
778 if (gsp == nullptr) {
779 AUDIO_ERR_LOG("AbandonAudioFocus: audio policy manager proxy is NULL.");
780 return -1;
781 }
782 return gsp->AbandonAudioFocus(clientId, audioInterrupt);
783 }
784
GetStreamInFocus()785 AudioStreamType AudioPolicyManager::GetStreamInFocus()
786 {
787 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
788 if (gsp == nullptr) {
789 AUDIO_ERR_LOG("GetStreamInFocus: audio policy manager proxy is NULL.");
790 return STREAM_DEFAULT;
791 }
792 return gsp->GetStreamInFocus();
793 }
794
GetSessionInfoInFocus(AudioInterrupt & audioInterrupt)795 int32_t AudioPolicyManager::GetSessionInfoInFocus(AudioInterrupt &audioInterrupt)
796 {
797 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
798 if (gsp == nullptr) {
799 AUDIO_ERR_LOG("GetSessionInfoInFocus: audio policy manager proxy is NULL.");
800 return -1;
801 }
802 return gsp->GetSessionInfoInFocus(audioInterrupt);
803 }
804
SetVolumeKeyEventCallback(const int32_t clientPid,const std::shared_ptr<VolumeKeyEventCallback> & callback,API_VERSION api_v)805 int32_t AudioPolicyManager::SetVolumeKeyEventCallback(const int32_t clientPid,
806 const std::shared_ptr<VolumeKeyEventCallback> &callback, API_VERSION api_v)
807 {
808 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
809 if (gsp == nullptr) {
810 AUDIO_ERR_LOG("SetVolumeKeyEventCallback: audio policy manager proxy is NULL.");
811 return ERROR;
812 }
813
814 if (callback == nullptr) {
815 AUDIO_ERR_LOG("SetVolumeKeyEventCallback volume back is nullptr");
816 return ERR_INVALID_PARAM;
817 }
818
819 std::lock_guard<std::mutex> lock(volumeCallbackMutex_);
820 volumeKeyEventListenerStub_ = new(std::nothrow) AudioVolumeKeyEventCallbackStub();
821 if (volumeKeyEventListenerStub_ == nullptr) {
822 AUDIO_ERR_LOG("SetVolumeKeyEventCallback: object null");
823 return ERROR;
824 }
825 volumeKeyEventListenerStub_->SetOnVolumeKeyEventCallback(callback);
826
827 sptr<IRemoteObject> object = volumeKeyEventListenerStub_->AsObject();
828 if (object == nullptr) {
829 AUDIO_ERR_LOG("SetVolumeKeyEventCallback: volumeKeyEventListenerStub_->AsObject is nullptr.");
830 return ERROR;
831 }
832 return gsp->SetVolumeKeyEventCallback(clientPid, object, api_v);
833 }
834
UnsetVolumeKeyEventCallback(const int32_t clientPid)835 int32_t AudioPolicyManager::UnsetVolumeKeyEventCallback(const int32_t clientPid)
836 {
837 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
838 if (gsp == nullptr) {
839 AUDIO_ERR_LOG("UnsetVolumeKeyEventCallback: audio policy manager proxy is NULL.");
840 return -1;
841 }
842 return gsp->UnsetVolumeKeyEventCallback(clientPid);
843 }
844
RegisterAudioRendererEventListener(const int32_t clientPid,const std::shared_ptr<AudioRendererStateChangeCallback> & callback)845 int32_t AudioPolicyManager::RegisterAudioRendererEventListener(const int32_t clientPid,
846 const std::shared_ptr<AudioRendererStateChangeCallback> &callback)
847 {
848 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
849 if (gsp == nullptr) {
850 AUDIO_ERR_LOG("RegisterAudioRendererEventListener: audio policy manager proxy is NULL.");
851 return ERROR;
852 }
853
854 AUDIO_DEBUG_LOG("RegisterAudioRendererEventListener");
855 if (callback == nullptr) {
856 AUDIO_ERR_LOG("RegisterAudioRendererEventListener: RendererEvent Listener callback is nullptr");
857 return ERR_INVALID_PARAM;
858 }
859
860 std::unique_lock<std::mutex> lock(stateChangelistenerStubMutex_);
861 rendererStateChangelistenerStub_ = new(std::nothrow) AudioRendererStateChangeListenerStub();
862 if (rendererStateChangelistenerStub_ == nullptr) {
863 AUDIO_ERR_LOG("RegisterAudioRendererEventListener: object null");
864 return ERROR;
865 }
866
867 rendererStateChangelistenerStub_->SetCallback(callback);
868
869 sptr<IRemoteObject> object = rendererStateChangelistenerStub_->AsObject();
870 if (object == nullptr) {
871 AUDIO_ERR_LOG("RegisterAudioRendererEventListener:RenderStateChangeListener IPC object creation failed");
872 return ERROR;
873 }
874 lock.unlock();
875
876 return gsp->RegisterAudioRendererEventListener(clientPid, object);
877 }
878
UnregisterAudioRendererEventListener(const int32_t clientPid)879 int32_t AudioPolicyManager::UnregisterAudioRendererEventListener(const int32_t clientPid)
880 {
881 AUDIO_DEBUG_LOG("UnregisterAudioRendererEventListener");
882 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
883 if (gsp == nullptr) {
884 AUDIO_ERR_LOG("UnregisterAudioRendererEventListener: audio policy manager proxy is NULL.");
885 return ERROR;
886 }
887
888 return gsp->UnregisterAudioRendererEventListener(clientPid);
889 }
890
RegisterAudioCapturerEventListener(const int32_t clientPid,const std::shared_ptr<AudioCapturerStateChangeCallback> & callback)891 int32_t AudioPolicyManager::RegisterAudioCapturerEventListener(const int32_t clientPid,
892 const std::shared_ptr<AudioCapturerStateChangeCallback> &callback)
893 {
894 AUDIO_DEBUG_LOG("RegisterAudioCapturerEventListener");
895 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
896 if (gsp == nullptr) {
897 AUDIO_ERR_LOG("RegisterAudioCapturerEventListener: audio policy manager proxy is NULL.");
898 return ERROR;
899 }
900
901 if (callback == nullptr) {
902 AUDIO_ERR_LOG("RegisterAudioCapturerEventListener: Capturer Event Listener callback is nullptr");
903 return ERR_INVALID_PARAM;
904 }
905
906 std::unique_lock<std::mutex> lock(stateChangelistenerStubMutex_);
907 capturerStateChangelistenerStub_ = new(std::nothrow) AudioCapturerStateChangeListenerStub();
908 if (capturerStateChangelistenerStub_ == nullptr) {
909 AUDIO_ERR_LOG("RegisterAudioCapturerEventListener: object null");
910 return ERROR;
911 }
912
913 capturerStateChangelistenerStub_->SetCallback(callback);
914
915 sptr<IRemoteObject> object = capturerStateChangelistenerStub_->AsObject();
916 if (object == nullptr) {
917 AUDIO_ERR_LOG("RegisterAudioCapturerEventListener: CapturerStateChangeListener IPC object creation failed");
918 return ERROR;
919 }
920 lock.unlock();
921
922 return gsp->RegisterAudioCapturerEventListener(clientPid, object);
923 }
924
UnregisterAudioCapturerEventListener(const int32_t clientPid)925 int32_t AudioPolicyManager::UnregisterAudioCapturerEventListener(const int32_t clientPid)
926 {
927 AUDIO_DEBUG_LOG("UnregisterAudioCapturerEventListener");
928 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
929 if (gsp == nullptr) {
930 AUDIO_ERR_LOG("UnregisterAudioCapturerEventListener: audio policy manager proxy is NULL.");
931 return ERROR;
932 }
933 return gsp->UnregisterAudioCapturerEventListener(clientPid);
934 }
935
RegisterTracker(AudioMode & mode,AudioStreamChangeInfo & streamChangeInfo,const std::shared_ptr<AudioClientTracker> & clientTrackerObj)936 int32_t AudioPolicyManager::RegisterTracker(AudioMode &mode, AudioStreamChangeInfo &streamChangeInfo,
937 const std::shared_ptr<AudioClientTracker> &clientTrackerObj)
938 {
939 AUDIO_DEBUG_LOG("RegisterTracker");
940 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
941 if (gsp == nullptr) {
942 AUDIO_ERR_LOG("RegisterTracker: audio policy manager proxy is NULL.");
943 return ERROR;
944 }
945
946 std::unique_lock<std::mutex> lock(clientTrackerStubMutex_);
947 clientTrackerCbStub_ = new(std::nothrow) AudioClientTrackerCallbackStub();
948 if (clientTrackerCbStub_ == nullptr) {
949 AUDIO_ERR_LOG("clientTrackerCbStub: memory allocation failed");
950 return ERROR;
951 }
952
953 clientTrackerCbStub_->SetClientTrackerCallback(clientTrackerObj);
954
955 sptr<IRemoteObject> object = clientTrackerCbStub_->AsObject();
956 if (object == nullptr) {
957 AUDIO_ERR_LOG("clientTrackerCbStub: IPC object creation failed");
958 return ERROR;
959 }
960 lock.unlock();
961
962 return gsp->RegisterTracker(mode, streamChangeInfo, object);
963 }
964
UpdateTracker(AudioMode & mode,AudioStreamChangeInfo & streamChangeInfo)965 int32_t AudioPolicyManager::UpdateTracker(AudioMode &mode, AudioStreamChangeInfo &streamChangeInfo)
966 {
967 AUDIO_DEBUG_LOG("UpdateTracker");
968 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
969 if (gsp == nullptr) {
970 AUDIO_ERR_LOG("UpdateTracker: audio policy manager proxy is NULL.");
971 return ERROR;
972 }
973 return gsp->UpdateTracker(mode, streamChangeInfo);
974 }
975
CheckRecordingCreate(uint32_t appTokenId,uint64_t appFullTokenId,int32_t appUid)976 bool AudioPolicyManager::CheckRecordingCreate(uint32_t appTokenId, uint64_t appFullTokenId, int32_t appUid)
977 {
978 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
979 if (gsp == nullptr) {
980 AUDIO_ERR_LOG("CheckRecordingCreate: audio policy manager proxy is NULL.");
981 return false;
982 }
983 return gsp->CheckRecordingCreate(appTokenId, appFullTokenId, appUid);
984 }
985
CheckRecordingStateChange(uint32_t appTokenId,uint64_t appFullTokenId,int32_t appUid,AudioPermissionState state)986 bool AudioPolicyManager::CheckRecordingStateChange(uint32_t appTokenId, uint64_t appFullTokenId, int32_t appUid,
987 AudioPermissionState state)
988 {
989 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
990 if (gsp == nullptr) {
991 AUDIO_ERR_LOG("CheckRecordingStateChange: audio policy manager proxy is NULL.");
992 return false;
993 }
994 return gsp->CheckRecordingStateChange(appTokenId, appFullTokenId, appUid, state);
995 }
996
ReconfigureAudioChannel(const uint32_t & count,DeviceType deviceType)997 int32_t AudioPolicyManager::ReconfigureAudioChannel(const uint32_t &count, DeviceType deviceType)
998 {
999 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1000 if (gsp == nullptr) {
1001 AUDIO_ERR_LOG("ReconfigureAudioChannel: audio policy manager proxy is NULL.");
1002 return -1;
1003 }
1004 return gsp->ReconfigureAudioChannel(count, deviceType);
1005 }
1006
GetAudioLatencyFromXml()1007 int32_t AudioPolicyManager::GetAudioLatencyFromXml()
1008 {
1009 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1010 if (gsp == nullptr) {
1011 AUDIO_ERR_LOG("GetAudioLatencyFromXml: audio policy manager proxy is NULL.");
1012 return -1;
1013 }
1014 return gsp->GetAudioLatencyFromXml();
1015 }
1016
GetSinkLatencyFromXml()1017 uint32_t AudioPolicyManager::GetSinkLatencyFromXml()
1018 {
1019 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1020 if (gsp == nullptr) {
1021 AUDIO_ERR_LOG("GetSinkLatencyFromXml: audio policy manager proxy is NULL.");
1022 return 0;
1023 }
1024 return gsp->GetSinkLatencyFromXml();
1025 }
1026
GetCurrentRendererChangeInfos(vector<unique_ptr<AudioRendererChangeInfo>> & audioRendererChangeInfos)1027 int32_t AudioPolicyManager::GetCurrentRendererChangeInfos(
1028 vector<unique_ptr<AudioRendererChangeInfo>> &audioRendererChangeInfos)
1029 {
1030 AUDIO_DEBUG_LOG("GetCurrentRendererChangeInfos");
1031 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1032 if (gsp == nullptr) {
1033 AUDIO_ERR_LOG("GetCurrentRendererChangeInfos: audio policy manager proxy is NULL.");
1034 return -1;
1035 }
1036 return gsp->GetCurrentRendererChangeInfos(audioRendererChangeInfos);
1037 }
1038
GetCurrentCapturerChangeInfos(vector<unique_ptr<AudioCapturerChangeInfo>> & audioCapturerChangeInfos)1039 int32_t AudioPolicyManager::GetCurrentCapturerChangeInfos(
1040 vector<unique_ptr<AudioCapturerChangeInfo>> &audioCapturerChangeInfos)
1041 {
1042 AUDIO_DEBUG_LOG("GetCurrentCapturerChangeInfos");
1043 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1044 if (gsp == nullptr) {
1045 AUDIO_ERR_LOG("GetCurrentCapturerChangeInfos: audio policy manager proxy is NULL.");
1046 return ERROR;
1047 }
1048 return gsp->GetCurrentCapturerChangeInfos(audioCapturerChangeInfos);
1049 }
1050
UpdateStreamState(const int32_t clientUid,StreamSetState streamSetState,AudioStreamType audioStreamType)1051 int32_t AudioPolicyManager::UpdateStreamState(const int32_t clientUid,
1052 StreamSetState streamSetState, AudioStreamType audioStreamType)
1053 {
1054 AUDIO_DEBUG_LOG("UpdateStreamState");
1055 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1056 if (gsp == nullptr) {
1057 AUDIO_ERR_LOG("UpdateStreamState: audio policy manager proxy is NULL.");
1058 return ERROR;
1059 }
1060 return gsp->UpdateStreamState(clientUid, streamSetState, audioStreamType);
1061 }
1062
GetVolumeGroupInfos(std::string networkId,std::vector<sptr<VolumeGroupInfo>> & infos)1063 int32_t AudioPolicyManager::GetVolumeGroupInfos(std::string networkId, std::vector<sptr<VolumeGroupInfo>> &infos)
1064 {
1065 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1066 if (gsp == nullptr) {
1067 AUDIO_ERR_LOG("GetVolumeGroupInfos failed, g_apProxy is nullptr.");
1068 return ERROR;
1069 }
1070 return gsp->GetVolumeGroupInfos(networkId, infos);
1071 }
1072
GetNetworkIdByGroupId(int32_t groupId,std::string & networkId)1073 int32_t AudioPolicyManager::GetNetworkIdByGroupId(int32_t groupId, std::string &networkId)
1074 {
1075 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1076 if (gsp == nullptr) {
1077 AUDIO_ERR_LOG("GetNetworkIdByGroupId failed, g_apProxy is nullptr.");
1078 return ERROR;
1079 }
1080 return gsp->GetNetworkIdByGroupId(groupId, networkId);
1081 }
1082
IsAudioRendererLowLatencySupported(const AudioStreamInfo & audioStreamInfo)1083 bool AudioPolicyManager::IsAudioRendererLowLatencySupported(const AudioStreamInfo &audioStreamInfo)
1084 {
1085 AUDIO_DEBUG_LOG("IsAudioRendererLowLatencySupported");
1086 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1087 if (gsp == nullptr) {
1088 AUDIO_ERR_LOG("IsAudioRendererLowLatencySupported: audio policy manager proxy is NULL.");
1089 return -1;
1090 }
1091 return gsp->IsAudioRendererLowLatencySupported(audioStreamInfo);
1092 }
1093
SetSystemSoundUri(const std::string & key,const std::string & uri)1094 int32_t AudioPolicyManager::SetSystemSoundUri(const std::string &key, const std::string &uri)
1095 {
1096 AUDIO_DEBUG_LOG("SetSystemSoundUri: [%{public}s]: [%{public}s]", key.c_str(), uri.c_str());
1097 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1098 if (gsp == nullptr) {
1099 AUDIO_ERR_LOG("SetSystemSoundUri: audio policy manager proxy is NULL.");
1100 return ERROR;
1101 }
1102
1103 return gsp->SetSystemSoundUri(key, uri);
1104 }
1105
GetSystemSoundUri(const std::string & key)1106 std::string AudioPolicyManager::GetSystemSoundUri(const std::string &key)
1107 {
1108 AUDIO_DEBUG_LOG("GetSystemSoundUri: %{public}s", key.c_str());
1109 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1110 if (gsp == nullptr) {
1111 AUDIO_ERR_LOG("GetSystemSoundUri: audio policy manager proxy is NULL.");
1112 return "";
1113 }
1114
1115 return gsp->GetSystemSoundUri(key);
1116 }
1117
GetMinStreamVolume()1118 float AudioPolicyManager::GetMinStreamVolume()
1119 {
1120 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1121 if (gsp == nullptr) {
1122 AUDIO_ERR_LOG("GetMinStreamVolume: audio policy manager proxy is NULL.");
1123 return ERROR;
1124 }
1125 return gsp->GetMinStreamVolume();
1126 }
1127
GetMaxStreamVolume()1128 float AudioPolicyManager::GetMaxStreamVolume()
1129 {
1130 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1131 if (gsp == nullptr) {
1132 AUDIO_ERR_LOG("GetMaxStreamVolume: audio policy manager proxy is NULL.");
1133 return ERROR;
1134 }
1135 return gsp->GetMaxStreamVolume();
1136 }
1137
RegisterAudioPolicyServerDiedCb(const int32_t clientPid,const std::weak_ptr<AudioRendererPolicyServiceDiedCallback> & callback)1138 int32_t AudioPolicyManager::RegisterAudioPolicyServerDiedCb(const int32_t clientPid,
1139 const std::weak_ptr<AudioRendererPolicyServiceDiedCallback> &callback)
1140 {
1141 lock_guard<mutex> lock(g_apProxyMutex);
1142 rendererCBMap_[clientPid] = callback;
1143 return SUCCESS;
1144 }
1145
UnregisterAudioPolicyServerDiedCb(const int32_t clientPid)1146 int32_t AudioPolicyManager::UnregisterAudioPolicyServerDiedCb(const int32_t clientPid)
1147 {
1148 AUDIO_DEBUG_LOG("UnregisterAudioPolicyServerDiedCb client pid: %{public}d", clientPid);
1149 for (auto it = rendererCBMap_.begin(); it != rendererCBMap_.end(); ++it) {
1150 rendererCBMap_.erase(getpid());
1151 }
1152 return SUCCESS;
1153 }
1154
GetMaxRendererInstances()1155 int32_t AudioPolicyManager::GetMaxRendererInstances()
1156 {
1157 AUDIO_DEBUG_LOG("GetMaxRendererInstances");
1158 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1159 if (gsp == nullptr) {
1160 AUDIO_ERR_LOG("GetMaxRendererInstances: audio policy manager proxy is NULL.");
1161 return ERROR;
1162 }
1163
1164 return gsp->GetMaxRendererInstances();
1165 }
1166
IsVolumeUnadjustable()1167 bool AudioPolicyManager::IsVolumeUnadjustable()
1168 {
1169 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1170 if (gsp == nullptr) {
1171 AUDIO_ERR_LOG("IsStreamActive: audio policy manager proxy is NULL.");
1172 return false;
1173 }
1174 return gsp->IsVolumeUnadjustable();
1175 }
1176
AdjustVolumeByStep(VolumeAdjustType adjustType)1177 int32_t AudioPolicyManager::AdjustVolumeByStep(VolumeAdjustType adjustType)
1178 {
1179 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1180 if (gsp == nullptr) {
1181 AUDIO_ERR_LOG("AdjustVolumeByStep: audio policy manager proxy is NULL.");
1182 return ERROR;
1183 }
1184 return gsp->AdjustVolumeByStep(adjustType);
1185 }
1186
AdjustSystemVolumeByStep(AudioVolumeType volumeType,VolumeAdjustType adjustType)1187 int32_t AudioPolicyManager::AdjustSystemVolumeByStep(AudioVolumeType volumeType, VolumeAdjustType adjustType)
1188 {
1189 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1190 if (gsp == nullptr) {
1191 AUDIO_ERR_LOG("AdjustSystemVolumeByStep: audio policy manager proxy is NULL.");
1192 return ERROR;
1193 }
1194 return gsp->AdjustSystemVolumeByStep(volumeType, adjustType);
1195 }
1196
GetSystemVolumeInDb(AudioVolumeType volumeType,int32_t volumeLevel,DeviceType deviceType)1197 float AudioPolicyManager::GetSystemVolumeInDb(AudioVolumeType volumeType, int32_t volumeLevel, DeviceType deviceType)
1198 {
1199 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1200 if (gsp == nullptr) {
1201 AUDIO_ERR_LOG("GetSystemVolumeInDb: audio policy manager proxy is NULL.");
1202 return ERROR;
1203 }
1204 return gsp->GetSystemVolumeInDb(volumeType, volumeLevel, deviceType);
1205 }
1206
QueryEffectSceneMode(SupportedEffectConfig & supportedEffectConfig)1207 int32_t AudioPolicyManager::QueryEffectSceneMode(SupportedEffectConfig &supportedEffectConfig)
1208 {
1209 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1210 if (gsp == nullptr) {
1211 AUDIO_ERR_LOG("QueryEffectSceneMode: audio policy manager proxy is NULL.");
1212 return -1;
1213 }
1214 int error = gsp->QueryEffectSceneMode(supportedEffectConfig);
1215 return error;
1216 }
1217
SetPlaybackCapturerFilterInfos(const AudioPlaybackCaptureConfig & config,uint32_t appTokenId)1218 int32_t AudioPolicyManager::SetPlaybackCapturerFilterInfos(const AudioPlaybackCaptureConfig &config,
1219 uint32_t appTokenId)
1220 {
1221 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1222 if (gsp == nullptr) {
1223 AUDIO_ERR_LOG("SetPlaybackCapturerFilterInfos: audio policy manager proxy is NULL.");
1224 return ERROR;
1225 }
1226
1227 return gsp->SetPlaybackCapturerFilterInfos(config, appTokenId);
1228 }
1229 } // namespace AudioStandard
1230 } // namespace OHOS
1231