1 /*
2 * Copyright (c) 2021-2024 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 #ifndef LOG_TAG
16 #define LOG_TAG "AudioPolicyManager"
17 #endif
18
19 #include "audio_policy_manager.h"
20 #include "audio_errors.h"
21 #include "audio_server_death_recipient.h"
22 #include "audio_policy_log.h"
23 #include "audio_utils.h"
24 #include "iservice_registry.h"
25 #include "system_ability_definition.h"
26
27 namespace OHOS {
28 namespace AudioStandard {
29 using namespace std;
30 using namespace std::chrono_literals;
31
32 static sptr<IAudioPolicy> g_apProxy = nullptr;
33 mutex g_apProxyMutex;
34 constexpr int64_t SLEEP_TIME = 1;
35 constexpr int32_t RETRY_TIMES = 10;
36 const unsigned int TIME_OUT_SECONDS = 10;
37 constexpr auto SLEEP_TIMES_RETYT_FAILED = 1min;
38 std::mutex g_cBMapMutex;
39 std::mutex g_cBDiedMapMutex;
40 std::unordered_map<int32_t, std::weak_ptr<AudioRendererPolicyServiceDiedCallback>> AudioPolicyManager::rendererCBMap_;
41 std::vector<std::weak_ptr<AudioStreamPolicyServiceDiedCallback>> AudioPolicyManager::audioStreamCBMap_;
42
RegisterDeathRecipientInner(sptr<IRemoteObject> object)43 inline bool RegisterDeathRecipientInner(sptr<IRemoteObject> object)
44 {
45 pid_t pid = 0;
46 sptr<AudioServerDeathRecipient> deathRecipient = new(std::nothrow) AudioServerDeathRecipient(pid);
47 CHECK_AND_RETURN_RET_LOG(deathRecipient != nullptr, false, "deathRecipient is null");
48 deathRecipient->SetNotifyCb(
49 [] (pid_t pid) { AudioPolicyManager::AudioPolicyServerDied(pid); });
50 AUDIO_DEBUG_LOG("Register audio policy server death recipient");
51 CHECK_AND_RETURN_RET_LOG(object->AddDeathRecipient(deathRecipient), false, "AddDeathRecipient failed");
52 return true;
53 }
54
GetAudioPolicyProxyFromSamgr()55 inline sptr<IAudioPolicy> GetAudioPolicyProxyFromSamgr()
56 {
57 auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
58 CHECK_AND_RETURN_RET_LOG(samgr != nullptr, nullptr, "samgr init failed.");
59 sptr<IRemoteObject> object = samgr->GetSystemAbility(AUDIO_POLICY_SERVICE_ID);
60 CHECK_AND_RETURN_RET_LOG(object != nullptr, nullptr, "Object is NULL.");
61 sptr<IAudioPolicy> apProxy = iface_cast<IAudioPolicy>(object);
62 CHECK_AND_RETURN_RET_LOG(apProxy != nullptr, nullptr, "Init apProxy is NULL.");
63 return apProxy;
64 }
65
GetAudioPolicyManagerProxy()66 inline const sptr<IAudioPolicy> GetAudioPolicyManagerProxy()
67 {
68 AUDIO_DEBUG_LOG("In");
69 lock_guard<mutex> lock(g_apProxyMutex);
70
71 if (g_apProxy != nullptr) {
72 return g_apProxy;
73 }
74
75 sptr<IAudioPolicy> gsp = GetAudioPolicyProxyFromSamgr();
76 CHECK_AND_RETURN_RET_LOG(gsp, nullptr, "gsp is null");
77
78 AUDIO_DEBUG_LOG("Init g_apProxy is assigned.");
79
80 if (RegisterDeathRecipientInner(gsp->AsObject())) {
81 g_apProxy = gsp;
82 }
83
84 return gsp;
85 }
86
RecoverAndGetAudioPolicyManagerProxy()87 inline const sptr<IAudioPolicy> RecoverAndGetAudioPolicyManagerProxy()
88 {
89 AUDIO_DEBUG_LOG("In");
90 lock_guard<mutex> lock(g_apProxyMutex);
91 g_apProxy = nullptr;
92
93 sptr<IAudioPolicy> gsp = GetAudioPolicyProxyFromSamgr();
94 CHECK_AND_RETURN_RET_LOG(gsp, nullptr, "gsp is null");
95
96 AUDIO_DEBUG_LOG("Init g_apProxy is assigned.");
97 CHECK_AND_RETURN_RET_LOG(RegisterDeathRecipientInner(gsp->AsObject()), nullptr, "RegisterDeathRecipient failed");
98
99 g_apProxy = gsp;
100 return gsp;
101 }
102
RegisterPolicyCallbackClientFunc(const sptr<IAudioPolicy> & gsp)103 int32_t AudioPolicyManager::RegisterPolicyCallbackClientFunc(const sptr<IAudioPolicy> &gsp)
104 {
105 AudioXCollie audioXCollie("AudioPolicyManager::RegisterPolicyCallbackClientFunc", TIME_OUT_SECONDS);
106 std::unique_lock<std::mutex> lock(registerCallbackMutex_);
107 if (audioPolicyClientStubCB_ == nullptr) {
108 audioPolicyClientStubCB_ = new(std::nothrow) AudioPolicyClientStubImpl();
109 }
110 sptr<IRemoteObject> object = audioPolicyClientStubCB_->AsObject();
111 if (object == nullptr) {
112 AUDIO_ERR_LOG("audioPolicyClientStubCB_->AsObject is nullptr");
113 lock.unlock();
114 return ERROR;
115 }
116 lock.unlock();
117
118 int32_t ret = gsp->RegisterPolicyCallbackClient(object);
119 if (ret == SUCCESS) {
120 isAudioPolicyClientRegisted_ = true;
121 }
122 return ret;
123 }
124
RecoverAudioPolicyCallbackClient()125 void AudioPolicyManager::RecoverAudioPolicyCallbackClient()
126 {
127 std::unique_lock<std::mutex> lock(registerCallbackMutex_);
128 if (audioPolicyClientStubCB_ == nullptr) {
129 AUDIO_ERR_LOG("audioPolicyClientStubCB_ is null.");
130 return;
131 }
132 lock.unlock();
133
134 int32_t retry = RETRY_TIMES;
135 sptr<IAudioPolicy> gsp = nullptr;
136 while (retry--) {
137 // Sleep and wait for 1 second;
138 sleep(SLEEP_TIME);
139 gsp = RecoverAndGetAudioPolicyManagerProxy();
140 if (gsp != nullptr) {
141 AUDIO_INFO_LOG("Reconnect audio policy service success!");
142 break;
143 }
144 if (retry == 0) {
145 AUDIO_WARNING_LOG("Reconnect audio policy service %{public}d times, sleep ", RETRY_TIMES);
146 std::this_thread::sleep_for(SLEEP_TIMES_RETYT_FAILED);
147 retry = RETRY_TIMES;
148 }
149 }
150
151 CHECK_AND_RETURN_LOG(gsp != nullptr, "Reconnect audio policy service fail!");
152
153 sptr<IRemoteObject> object = audioPolicyClientStubCB_->AsObject();
154 if (object == nullptr) {
155 AUDIO_ERR_LOG("RegisterPolicyCallbackClientFunc: audioPolicyClientStubCB_->AsObject is nullptr");
156 return;
157 }
158
159 gsp->RegisterPolicyCallbackClient(object);
160 if (audioPolicyClientStubCB_->HasMicStateChangeCallback()) {
161 AUDIO_INFO_LOG("RecoverAudioPolicyCallbackClient has micStateChangeCallback");
162 gsp->SetClientCallbacksEnable(CALLBACK_MICMUTE_STATE_CHANGE, true);
163 }
164
165 for (auto enumIndex : CALLBACK_ENUMS) {
166 auto &[mutex, isEnable] = callbackChangeInfos_[enumIndex];
167 std::lock_guard<std::mutex> lock(mutex);
168 if (isEnable) {
169 gsp->SetClientCallbacksEnable(enumIndex, true);
170 }
171 }
172 }
173
AudioPolicyServerDied(pid_t pid)174 void AudioPolicyManager::AudioPolicyServerDied(pid_t pid)
175 {
176 {
177 std::lock_guard<std::mutex> lockCbMap(g_cBMapMutex);
178 AUDIO_INFO_LOG("Audio policy server died: reestablish connection");
179 std::shared_ptr<AudioRendererPolicyServiceDiedCallback> cb;
180 for (auto it = rendererCBMap_.begin(); it != rendererCBMap_.end(); ++it) {
181 cb = it->second.lock();
182 if (cb != nullptr) {
183 cb->OnAudioPolicyServiceDied();
184 }
185 }
186 }
187 {
188 std::lock_guard<std::mutex> lock(g_apProxyMutex);
189 g_apProxy = nullptr;
190 }
191 GetInstance().RecoverAudioPolicyCallbackClient();
192
193 {
194 std::lock_guard<std::mutex> lockCbMap(g_cBDiedMapMutex);
195 if (audioStreamCBMap_.size() != 0) {
196 for (auto it = audioStreamCBMap_.begin(); it != audioStreamCBMap_.end();) {
197 auto cb = (*it).lock();
198 if (cb == nullptr) {
199 it = audioStreamCBMap_.erase(it);
200 continue;
201 }
202 cb->OnAudioPolicyServiceDied();
203 ++it;
204 }
205 }
206 }
207 }
208
GetMaxVolumeLevel(AudioVolumeType volumeType)209 int32_t AudioPolicyManager::GetMaxVolumeLevel(AudioVolumeType volumeType)
210 {
211 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
212 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
213
214 return gsp->GetMaxVolumeLevel(volumeType);
215 }
216
GetMinVolumeLevel(AudioVolumeType volumeType)217 int32_t AudioPolicyManager::GetMinVolumeLevel(AudioVolumeType volumeType)
218 {
219 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
220 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
221
222 return gsp->GetMinVolumeLevel(volumeType);
223 }
224
SetSystemVolumeLevel(AudioVolumeType volumeType,int32_t volumeLevel,bool isLegacy,int32_t volumeFlag)225 int32_t AudioPolicyManager::SetSystemVolumeLevel(AudioVolumeType volumeType, int32_t volumeLevel, bool isLegacy,
226 int32_t volumeFlag)
227 {
228 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
229 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
230
231 if (isLegacy) {
232 return gsp->SetSystemVolumeLevelLegacy(volumeType, volumeLevel);
233 }
234 return gsp->SetSystemVolumeLevel(volumeType, volumeLevel, volumeFlag);
235 }
236
SetRingerModeLegacy(AudioRingerMode ringMode)237 int32_t AudioPolicyManager::SetRingerModeLegacy(AudioRingerMode ringMode)
238 {
239 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
240 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
241 return gsp->SetRingerModeLegacy(ringMode);
242 }
243
SetRingerMode(AudioRingerMode ringMode)244 int32_t AudioPolicyManager::SetRingerMode(AudioRingerMode ringMode)
245 {
246 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
247 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
248 return gsp->SetRingerMode(ringMode);
249 }
250
GetRingerMode()251 AudioRingerMode AudioPolicyManager::GetRingerMode()
252 {
253 AudioXCollie audioXCollie("AudioPolicyManager::GetRingerMode", TIME_OUT_SECONDS);
254 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
255 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, RINGER_MODE_NORMAL, "audio policy manager proxy is NULL.");
256 return gsp->GetRingerMode();
257 }
258
SetAudioScene(AudioScene scene)259 int32_t AudioPolicyManager::SetAudioScene(AudioScene scene)
260 {
261 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
262 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
263 return gsp->SetAudioScene(scene);
264 }
265
SetMicrophoneMute(bool isMute)266 int32_t AudioPolicyManager::SetMicrophoneMute(bool isMute)
267 {
268 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
269 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
270 return gsp->SetMicrophoneMute(isMute);
271 }
272
SetMicrophoneMuteAudioConfig(bool isMute)273 int32_t AudioPolicyManager::SetMicrophoneMuteAudioConfig(bool isMute)
274 {
275 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
276 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
277 return gsp->SetMicrophoneMuteAudioConfig(isMute);
278 }
279
SetMicrophoneMutePersistent(const bool isMute,const PolicyType type)280 int32_t AudioPolicyManager::SetMicrophoneMutePersistent(const bool isMute, const PolicyType type)
281 {
282 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
283 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
284 return gsp->SetMicrophoneMutePersistent(isMute, type);
285 }
286
GetPersistentMicMuteState()287 bool AudioPolicyManager::GetPersistentMicMuteState()
288 {
289 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
290 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
291 return gsp->GetPersistentMicMuteState();
292 }
293
IsMicrophoneMuteLegacy()294 bool AudioPolicyManager::IsMicrophoneMuteLegacy()
295 {
296 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
297 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
298 if (!isAudioPolicyClientRegisted_) {
299 RegisterPolicyCallbackClientFunc(gsp);
300 }
301
302 return gsp->IsMicrophoneMuteLegacy();
303 }
304
IsMicrophoneMute()305 bool AudioPolicyManager::IsMicrophoneMute()
306 {
307 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
308 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
309 if (!isAudioPolicyClientRegisted_) {
310 RegisterPolicyCallbackClientFunc(gsp);
311 }
312
313 return gsp->IsMicrophoneMute();
314 }
315
GetAudioScene()316 AudioScene AudioPolicyManager::GetAudioScene()
317 {
318 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
319 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, AUDIO_SCENE_DEFAULT, "audio policy manager proxy is NULL.");
320 return gsp->GetAudioScene();
321 }
322
GetSystemActiveVolumeType(const int32_t clientUid)323 AudioStreamType AudioPolicyManager::GetSystemActiveVolumeType(const int32_t clientUid)
324 {
325 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
326 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, STREAM_DEFAULT, "audio policy manager proxy is NULL.");
327 return gsp->GetSystemActiveVolumeType(clientUid);
328 }
329
GetSystemVolumeLevel(AudioVolumeType volumeType)330 int32_t AudioPolicyManager::GetSystemVolumeLevel(AudioVolumeType volumeType)
331 {
332 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
333 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
334 return gsp->GetSystemVolumeLevel(volumeType);
335 }
336
SetStreamMute(AudioVolumeType volumeType,bool mute,bool isLegacy)337 int32_t AudioPolicyManager::SetStreamMute(AudioVolumeType volumeType, bool mute, bool isLegacy)
338 {
339 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
340 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
341 if (isLegacy) {
342 return gsp->SetStreamMuteLegacy(volumeType, mute);
343 }
344 return gsp->SetStreamMute(volumeType, mute);
345 }
346
GetStreamMute(AudioVolumeType volumeType)347 bool AudioPolicyManager::GetStreamMute(AudioVolumeType volumeType)
348 {
349 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
350 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
351 return gsp->GetStreamMute(volumeType);
352 }
353
SetLowPowerVolume(int32_t streamId,float volume)354 int32_t AudioPolicyManager::SetLowPowerVolume(int32_t streamId, float volume)
355 {
356 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
357 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
358 return gsp->SetLowPowerVolume(streamId, volume);
359 }
360
GetLowPowerVolume(int32_t streamId)361 float AudioPolicyManager::GetLowPowerVolume(int32_t streamId)
362 {
363 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
364 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
365 return gsp->GetLowPowerVolume(streamId);
366 }
367
GetSingleStreamVolume(int32_t streamId)368 float AudioPolicyManager::GetSingleStreamVolume(int32_t streamId)
369 {
370 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
371 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
372 return gsp->GetSingleStreamVolume(streamId);
373 }
374
IsStreamActive(AudioVolumeType volumeType)375 bool AudioPolicyManager::IsStreamActive(AudioVolumeType volumeType)
376 {
377 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
378 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
379 return gsp->IsStreamActive(volumeType);
380 }
381
SelectOutputDevice(sptr<AudioRendererFilter> audioRendererFilter,std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)382 int32_t AudioPolicyManager::SelectOutputDevice(sptr<AudioRendererFilter> audioRendererFilter,
383 std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)
384 {
385 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
386 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
387 return gsp->SelectOutputDevice(audioRendererFilter, audioDeviceDescriptors);
388 }
389
GetSelectedDeviceInfo(int32_t uid,int32_t pid,AudioStreamType streamType)390 std::string AudioPolicyManager::GetSelectedDeviceInfo(int32_t uid, int32_t pid, AudioStreamType streamType)
391 {
392 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
393 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, "", "audio policy manager proxy is NULL.");
394 return gsp->GetSelectedDeviceInfo(uid, pid, streamType);
395 }
396
SelectInputDevice(sptr<AudioCapturerFilter> audioCapturerFilter,std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)397 int32_t AudioPolicyManager::SelectInputDevice(sptr<AudioCapturerFilter> audioCapturerFilter,
398 std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)
399 {
400 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
401 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
402 return gsp->SelectInputDevice(audioCapturerFilter, audioDeviceDescriptors);
403 }
404
GetDevices(DeviceFlag deviceFlag)405 std::vector<sptr<AudioDeviceDescriptor>> AudioPolicyManager::GetDevices(DeviceFlag deviceFlag)
406 {
407 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
408 if (gsp == nullptr) {
409 AUDIO_ERR_LOG("GetDevices: audio policy manager proxy is NULL.");
410 std::vector<sptr<AudioDeviceDescriptor>> deviceInfo;
411 return deviceInfo;
412 }
413 return gsp->GetDevices(deviceFlag);
414 }
415
GetDevicesInner(DeviceFlag deviceFlag)416 std::vector<sptr<AudioDeviceDescriptor>> AudioPolicyManager::GetDevicesInner(DeviceFlag deviceFlag)
417 {
418 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
419 if (gsp == nullptr) {
420 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
421 std::vector<sptr<AudioDeviceDescriptor>> deviceInfo;
422 return deviceInfo;
423 }
424 return gsp->GetDevicesInner(deviceFlag);
425 }
426
GetPreferredOutputDeviceDescriptors(AudioRendererInfo & rendererInfo)427 std::vector<sptr<AudioDeviceDescriptor>> AudioPolicyManager::GetPreferredOutputDeviceDescriptors(
428 AudioRendererInfo &rendererInfo)
429 {
430 AudioXCollie audioXCollie("AudioPolicyManager::GetPreferredOutputDeviceDescriptors", TIME_OUT_SECONDS);
431 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
432 if (gsp == nullptr) {
433 AUDIO_ERR_LOG("GetPreferredOutputDeviceDescriptors: audio policy manager proxy is NULL.");
434 std::vector<sptr<AudioDeviceDescriptor>> deviceInfo;
435 return deviceInfo;
436 }
437 return gsp->GetPreferredOutputDeviceDescriptors(rendererInfo);
438 }
439
GetPreferredInputDeviceDescriptors(AudioCapturerInfo & captureInfo)440 std::vector<sptr<AudioDeviceDescriptor>> AudioPolicyManager::GetPreferredInputDeviceDescriptors(
441 AudioCapturerInfo &captureInfo)
442 {
443 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
444 if (gsp == nullptr) {
445 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
446 std::vector<sptr<AudioDeviceDescriptor>> deviceInfo;
447 return deviceInfo;
448 }
449 return gsp->GetPreferredInputDeviceDescriptors(captureInfo);
450 }
451
GetAudioFocusInfoList(std::list<std::pair<AudioInterrupt,AudioFocuState>> & focusInfoList,const int32_t zoneID)452 int32_t AudioPolicyManager::GetAudioFocusInfoList(std::list<std::pair<AudioInterrupt, AudioFocuState>> &focusInfoList,
453 const int32_t zoneID)
454 {
455 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
456 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
457 return gsp->GetAudioFocusInfoList(focusInfoList, zoneID);
458 }
459
SetClientCallbacksEnable(const CallbackChange & callbackchange,const bool & enable)460 int32_t AudioPolicyManager::SetClientCallbacksEnable(const CallbackChange &callbackchange, const bool &enable)
461 {
462 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
463 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
464 return gsp->SetClientCallbacksEnable(callbackchange, enable);
465 }
466
RegisterFocusInfoChangeCallback(const int32_t clientId,const std::shared_ptr<AudioFocusInfoChangeCallback> & callback)467 int32_t AudioPolicyManager::RegisterFocusInfoChangeCallback(const int32_t clientId,
468 const std::shared_ptr<AudioFocusInfoChangeCallback> &callback)
469 {
470 AUDIO_DEBUG_LOG("AudioPolicyManager::RegisterFocusInfoChangeCallback");
471 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM,
472 "RegisterFocusInfoChangeCallback: callback is nullptr");
473
474 if (!isAudioPolicyClientRegisted_) {
475 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
476 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
477 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
478 if (ret != SUCCESS) {
479 return ret;
480 }
481 }
482
483 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_FOCUS_INFO_CHANGE].mutex);
484 audioPolicyClientStubCB_->AddFocusInfoChangeCallback(callback);
485 size_t callbackSize = audioPolicyClientStubCB_->GetFocusInfoChangeCallbackSize();
486 if (callbackSize == 1) {
487 callbackChangeInfos_[CALLBACK_FOCUS_INFO_CHANGE].isEnable = true;
488 SetClientCallbacksEnable(CALLBACK_FOCUS_INFO_CHANGE, true);
489 }
490
491 return SUCCESS;
492 }
493
UnregisterFocusInfoChangeCallback(const int32_t clientId)494 int32_t AudioPolicyManager::UnregisterFocusInfoChangeCallback(const int32_t clientId)
495 {
496 AUDIO_DEBUG_LOG("AudioPolicyManager::UnregisterFocusInfoChangeCallback");
497 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_FOCUS_INFO_CHANGE].mutex);
498 if (audioPolicyClientStubCB_ != nullptr) {
499 audioPolicyClientStubCB_->RemoveFocusInfoChangeCallback();
500 if (audioPolicyClientStubCB_->GetFocusInfoChangeCallbackSize() == 0) {
501 callbackChangeInfos_[CALLBACK_FOCUS_INFO_CHANGE].isEnable = false;
502 SetClientCallbacksEnable(CALLBACK_FOCUS_INFO_CHANGE, false);
503 }
504 }
505 return SUCCESS;
506 }
507
508 #ifdef FEATURE_DTMF_TONE
GetSupportedTones()509 std::vector<int32_t> AudioPolicyManager::GetSupportedTones()
510 {
511 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
512 if (gsp == nullptr) {
513 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
514 std::vector<int> lSupportedToneList = {};
515 return lSupportedToneList;
516 }
517 return gsp->GetSupportedTones();
518 }
519
GetToneConfig(int32_t ltonetype)520 std::shared_ptr<ToneInfo> AudioPolicyManager::GetToneConfig(int32_t ltonetype)
521 {
522 AUDIO_DEBUG_LOG("AudioPolicyManager::GetToneConfig");
523
524 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
525 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, nullptr, "audio policy manager proxy is NULL.");
526 return gsp->GetToneConfig(ltonetype);
527 }
528 #endif
529
SetDeviceActive(InternalDeviceType deviceType,bool active)530 int32_t AudioPolicyManager::SetDeviceActive(InternalDeviceType deviceType, bool active)
531 {
532 AUDIO_INFO_LOG("SetDeviceActive deviceType: %{public}d, active: %{public}d", deviceType, active);
533 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
534 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
535 return gsp->SetDeviceActive(deviceType, active);
536 }
537
IsDeviceActive(InternalDeviceType deviceType)538 bool AudioPolicyManager::IsDeviceActive(InternalDeviceType deviceType)
539 {
540 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
541 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
542 return gsp->IsDeviceActive(deviceType);
543 }
544
GetActiveOutputDevice()545 DeviceType AudioPolicyManager::GetActiveOutputDevice()
546 {
547 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
548 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, DEVICE_TYPE_INVALID, "audio policy manager proxy is NULL.");
549 return gsp->GetActiveOutputDevice();
550 }
551
GetActiveInputDevice()552 DeviceType AudioPolicyManager::GetActiveInputDevice()
553 {
554 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
555 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, DEVICE_TYPE_INVALID, "audio policy manager proxy is NULL.");
556 return gsp->GetActiveInputDevice();
557 }
558
SetRingerModeCallback(const int32_t clientId,const std::shared_ptr<AudioRingerModeCallback> & callback,API_VERSION api_v)559 int32_t AudioPolicyManager::SetRingerModeCallback(const int32_t clientId,
560 const std::shared_ptr<AudioRingerModeCallback> &callback, API_VERSION api_v)
561 {
562 AUDIO_DEBUG_LOG("AudioPolicyManager::SetRingerModeCallback");
563 if (api_v == API_8 && !PermissionUtil::VerifySystemPermission()) {
564 AUDIO_ERR_LOG("SetRingerModeCallback: No system permission");
565 return ERR_PERMISSION_DENIED;
566 }
567
568 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
569
570 if (!isAudioPolicyClientRegisted_) {
571 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
572 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
573 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
574 if (ret != SUCCESS) {
575 return ret;
576 }
577 }
578 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_RINGER_MODE].mutex);
579 if (audioPolicyClientStubCB_ != nullptr) {
580 audioPolicyClientStubCB_->AddRingerModeCallback(callback);
581 size_t callbackSize = audioPolicyClientStubCB_->GetRingerModeCallbackSize();
582 if (callbackSize == 1) {
583 callbackChangeInfos_[CALLBACK_SET_RINGER_MODE].isEnable = true;
584 SetClientCallbacksEnable(CALLBACK_SET_RINGER_MODE, true);
585 }
586 }
587 return SUCCESS;
588 }
589
UnsetRingerModeCallback(const int32_t clientId)590 int32_t AudioPolicyManager::UnsetRingerModeCallback(const int32_t clientId)
591 {
592 AUDIO_DEBUG_LOG("Remove all ringer mode callbacks");
593 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_RINGER_MODE].mutex);
594 if (audioPolicyClientStubCB_ != nullptr) {
595 audioPolicyClientStubCB_->RemoveRingerModeCallback();
596 if (audioPolicyClientStubCB_->GetRingerModeCallbackSize() == 0) {
597 callbackChangeInfos_[CALLBACK_SET_RINGER_MODE].isEnable = false;
598 SetClientCallbacksEnable(CALLBACK_SET_RINGER_MODE, false);
599 }
600 }
601 return SUCCESS;
602 }
603
UnsetRingerModeCallback(const int32_t clientId,const std::shared_ptr<AudioRingerModeCallback> & callback)604 int32_t AudioPolicyManager::UnsetRingerModeCallback(const int32_t clientId,
605 const std::shared_ptr<AudioRingerModeCallback> &callback)
606 {
607 AUDIO_DEBUG_LOG("Remove one ringer mode callback");
608 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_RINGER_MODE].mutex);
609 if (audioPolicyClientStubCB_ != nullptr) {
610 audioPolicyClientStubCB_->RemoveRingerModeCallback(callback);
611 if (audioPolicyClientStubCB_->GetRingerModeCallbackSize() == 0) {
612 callbackChangeInfos_[CALLBACK_SET_RINGER_MODE].isEnable = false;
613 SetClientCallbacksEnable(CALLBACK_SET_RINGER_MODE, false);
614 }
615 }
616 return SUCCESS;
617 }
618
SetDeviceChangeCallback(const int32_t clientId,const DeviceFlag flag,const std::shared_ptr<AudioManagerDeviceChangeCallback> & callback)619 int32_t AudioPolicyManager::SetDeviceChangeCallback(const int32_t clientId, const DeviceFlag flag,
620 const std::shared_ptr<AudioManagerDeviceChangeCallback> &callback)
621 {
622 AUDIO_DEBUG_LOG("AudioPolicyManager::SetDeviceChangeCallback");
623 bool hasSystemPermission = PermissionUtil::VerifySystemPermission();
624 switch (flag) {
625 case NONE_DEVICES_FLAG:
626 case DISTRIBUTED_OUTPUT_DEVICES_FLAG:
627 case DISTRIBUTED_INPUT_DEVICES_FLAG:
628 case ALL_DISTRIBUTED_DEVICES_FLAG:
629 case ALL_L_D_DEVICES_FLAG:
630 if (!hasSystemPermission) {
631 AUDIO_ERR_LOG("SetDeviceChangeCallback: No system permission");
632 return ERR_PERMISSION_DENIED;
633 }
634 break;
635 default:
636 break;
637 }
638
639 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "SetDeviceChangeCallback: callback is nullptr");
640
641 if (!isAudioPolicyClientRegisted_) {
642 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
643 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
644 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
645 if (ret != SUCCESS) {
646 return ret;
647 }
648 }
649
650 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_DEVICE_CHANGE].mutex);
651 if (audioPolicyClientStubCB_ != nullptr) {
652 audioPolicyClientStubCB_->AddDeviceChangeCallback(flag, callback);
653 size_t callbackSize = audioPolicyClientStubCB_->GetDeviceChangeCallbackSize();
654 if (callbackSize == 1) {
655 callbackChangeInfos_[CALLBACK_SET_DEVICE_CHANGE].isEnable = true;
656 SetClientCallbacksEnable(CALLBACK_SET_DEVICE_CHANGE, true);
657 }
658 }
659 return SUCCESS;
660 }
661
SetMicrophoneBlockedCallback(const int32_t clientId,const std::shared_ptr<AudioManagerMicrophoneBlockedCallback> & callback)662 int32_t AudioPolicyManager::SetMicrophoneBlockedCallback(const int32_t clientId,
663 const std::shared_ptr<AudioManagerMicrophoneBlockedCallback> &callback)
664 {
665 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
666 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
667 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM,
668 "SetMicrophoneBlockedCallback: callback is nullptr");
669 if (!isAudioPolicyClientRegisted_) {
670 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
671 if (ret != SUCCESS) {
672 return ret;
673 }
674 }
675 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_MICROPHONE_BLOCKED].mutex);
676 if (audioPolicyClientStubCB_ != nullptr) {
677 audioPolicyClientStubCB_->AddMicrophoneBlockedCallback(clientId, callback);
678 size_t callbackSize = audioPolicyClientStubCB_->GetMicrophoneBlockedCallbackSize();
679 if (callbackSize == 1) {
680 callbackChangeInfos_[CALLBACK_SET_MICROPHONE_BLOCKED].isEnable = true;
681 SetClientCallbacksEnable(CALLBACK_SET_MICROPHONE_BLOCKED, true);
682 }
683 }
684 return SUCCESS;
685 }
686
UnsetDeviceChangeCallback(const int32_t clientId,DeviceFlag flag,std::shared_ptr<AudioManagerDeviceChangeCallback> & cb)687 int32_t AudioPolicyManager::UnsetDeviceChangeCallback(const int32_t clientId, DeviceFlag flag,
688 std::shared_ptr<AudioManagerDeviceChangeCallback> &cb)
689 {
690 AUDIO_DEBUG_LOG("AudioPolicyManager::UnsetDeviceChangeCallback");
691 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_DEVICE_CHANGE].mutex);
692 if (audioPolicyClientStubCB_ != nullptr) {
693 audioPolicyClientStubCB_->RemoveDeviceChangeCallback(flag, cb);
694 if (audioPolicyClientStubCB_->GetDeviceChangeCallbackSize() == 0) {
695 callbackChangeInfos_[CALLBACK_SET_DEVICE_CHANGE].isEnable = false;
696 SetClientCallbacksEnable(CALLBACK_SET_DEVICE_CHANGE, false);
697 }
698 }
699 return SUCCESS;
700 }
701
SetPreferredOutputDeviceChangeCallback(const int32_t clientId,const std::shared_ptr<AudioPreferredOutputDeviceChangeCallback> & callback)702 int32_t AudioPolicyManager::SetPreferredOutputDeviceChangeCallback(const int32_t clientId,
703 const std::shared_ptr<AudioPreferredOutputDeviceChangeCallback> &callback)
704 {
705 AUDIO_DEBUG_LOG("AudioPolicyManager::SetPreferredOutputDeviceChangeCallback");
706 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
707
708 if (!isAudioPolicyClientRegisted_) {
709 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
710 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
711 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
712 if (ret != SUCCESS) {
713 return ret;
714 }
715 }
716
717 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_PREFERRED_OUTPUT_DEVICE_CHANGE].mutex);
718 if (audioPolicyClientStubCB_ != nullptr) {
719 audioPolicyClientStubCB_->AddPreferredOutputDeviceChangeCallback(callback);
720 size_t callbackSize = audioPolicyClientStubCB_->GetPreferredOutputDeviceChangeCallbackSize();
721 if (callbackSize == 1) {
722 callbackChangeInfos_[CALLBACK_PREFERRED_OUTPUT_DEVICE_CHANGE].isEnable = true;
723 SetClientCallbacksEnable(CALLBACK_PREFERRED_OUTPUT_DEVICE_CHANGE, true);
724 }
725 }
726 return SUCCESS;
727 }
728
SetPreferredInputDeviceChangeCallback(const std::shared_ptr<AudioPreferredInputDeviceChangeCallback> & callback)729 int32_t AudioPolicyManager::SetPreferredInputDeviceChangeCallback(
730 const std::shared_ptr<AudioPreferredInputDeviceChangeCallback> &callback)
731 {
732 AUDIO_DEBUG_LOG("AudioPolicyManager::SetPreferredInputDeviceChangeCallback");
733 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
734
735 if (!isAudioPolicyClientRegisted_) {
736 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
737 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
738 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
739 if (ret != SUCCESS) {
740 return ret;
741 }
742 }
743
744 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_PREFERRED_INPUT_DEVICE_CHANGE].mutex);
745 if (audioPolicyClientStubCB_ != nullptr) {
746 audioPolicyClientStubCB_->AddPreferredInputDeviceChangeCallback(callback);
747 size_t callbackSize = audioPolicyClientStubCB_->GetPreferredInputDeviceChangeCallbackSize();
748 if (callbackSize == 1) {
749 callbackChangeInfos_[CALLBACK_PREFERRED_INPUT_DEVICE_CHANGE].isEnable = true;
750 SetClientCallbacksEnable(CALLBACK_PREFERRED_INPUT_DEVICE_CHANGE, true);
751 }
752 }
753 return SUCCESS;
754 }
755
UnsetPreferredOutputDeviceChangeCallback(const int32_t clientId)756 int32_t AudioPolicyManager::UnsetPreferredOutputDeviceChangeCallback(const int32_t clientId)
757 {
758 AUDIO_DEBUG_LOG("AudioPolicyManager::UnsetPreferredOutputDeviceChangeCallback");
759 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_PREFERRED_OUTPUT_DEVICE_CHANGE].mutex);
760 if (audioPolicyClientStubCB_ != nullptr) {
761 audioPolicyClientStubCB_->RemovePreferredOutputDeviceChangeCallback();
762 if (audioPolicyClientStubCB_->GetPreferredOutputDeviceChangeCallbackSize() == 0) {
763 callbackChangeInfos_[CALLBACK_PREFERRED_OUTPUT_DEVICE_CHANGE].isEnable = false;
764 SetClientCallbacksEnable(CALLBACK_PREFERRED_OUTPUT_DEVICE_CHANGE, false);
765 }
766 }
767 return SUCCESS;
768 }
769
UnsetPreferredInputDeviceChangeCallback()770 int32_t AudioPolicyManager::UnsetPreferredInputDeviceChangeCallback()
771 {
772 AUDIO_DEBUG_LOG("AudioPolicyManager::UnsetPreferredInputDeviceChangeCallback");
773 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_PREFERRED_INPUT_DEVICE_CHANGE].mutex);
774 if (audioPolicyClientStubCB_ != nullptr) {
775 audioPolicyClientStubCB_->RemovePreferredInputDeviceChangeCallback();
776 if (audioPolicyClientStubCB_->GetPreferredInputDeviceChangeCallbackSize() == 0) {
777 callbackChangeInfos_[CALLBACK_PREFERRED_INPUT_DEVICE_CHANGE].isEnable = false;
778 SetClientCallbacksEnable(CALLBACK_PREFERRED_INPUT_DEVICE_CHANGE, false);
779 }
780 }
781 return SUCCESS;
782 }
783
UnsetMicrophoneBlockedCallback(const int32_t clientId,const std::shared_ptr<AudioManagerMicrophoneBlockedCallback> & callback)784 int32_t AudioPolicyManager::UnsetMicrophoneBlockedCallback(const int32_t clientId,
785 const std::shared_ptr<AudioManagerMicrophoneBlockedCallback> &callback)
786 {
787 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_MICROPHONE_BLOCKED].mutex);
788 if (audioPolicyClientStubCB_ != nullptr) {
789 audioPolicyClientStubCB_->RemoveMicrophoneBlockedCallback(clientId, callback);
790 if (audioPolicyClientStubCB_->GetMicrophoneBlockedCallbackSize() == 0) {
791 callbackChangeInfos_[CALLBACK_SET_MICROPHONE_BLOCKED].isEnable = false;
792 SetClientCallbacksEnable(CALLBACK_SET_MICROPHONE_BLOCKED, false);
793 }
794 }
795 return SUCCESS;
796 }
797
SetMicStateChangeCallback(const int32_t clientId,const std::shared_ptr<AudioManagerMicStateChangeCallback> & callback)798 int32_t AudioPolicyManager::SetMicStateChangeCallback(const int32_t clientId,
799 const std::shared_ptr<AudioManagerMicStateChangeCallback> &callback)
800 {
801 AUDIO_DEBUG_LOG("AudioPolicyManager::SetMicStateChangeCallback");
802 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
803
804 if (!isAudioPolicyClientRegisted_) {
805 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
806 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
807 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
808 if (ret != SUCCESS) {
809 return ret;
810 }
811 }
812
813 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_MIC_STATE_CHANGE].mutex);
814 if (audioPolicyClientStubCB_ != nullptr) {
815 audioPolicyClientStubCB_->AddMicStateChangeCallback(callback);
816 size_t callbackSize = audioPolicyClientStubCB_->GetMicStateChangeCallbackSize();
817 if (callbackSize == 1) {
818 callbackChangeInfos_[CALLBACK_SET_MIC_STATE_CHANGE].isEnable = true;
819 SetClientCallbacksEnable(CALLBACK_SET_MIC_STATE_CHANGE, true);
820 }
821 }
822 return SUCCESS;
823 }
824
UnsetMicStateChangeCallback(const std::shared_ptr<AudioManagerMicStateChangeCallback> & callback)825 int32_t AudioPolicyManager::UnsetMicStateChangeCallback(
826 const std::shared_ptr<AudioManagerMicStateChangeCallback> &callback)
827 {
828 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
829 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
830 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
831 CHECK_AND_RETURN_RET_LOG(audioPolicyClientStubCB_ != nullptr, ERR_INVALID_OPERATION,
832 "audioPolicyClientStubCB is nullptr");
833 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_MIC_STATE_CHANGE].mutex);
834 if (audioPolicyClientStubCB_ != nullptr) {
835 audioPolicyClientStubCB_->RemoveMicStateChangeCallback();
836 if (audioPolicyClientStubCB_->GetMicStateChangeCallbackSize() == 0) {
837 callbackChangeInfos_[CALLBACK_SET_MIC_STATE_CHANGE].isEnable = false;
838 SetClientCallbacksEnable(CALLBACK_SET_MIC_STATE_CHANGE, false);
839 }
840 }
841 return SUCCESS;
842 }
843
SetAudioInterruptCallback(const uint32_t sessionID,const std::shared_ptr<AudioInterruptCallback> & callback,uint32_t clientUid,const int32_t zoneID)844 int32_t AudioPolicyManager::SetAudioInterruptCallback(const uint32_t sessionID,
845 const std::shared_ptr<AudioInterruptCallback> &callback, uint32_t clientUid, const int32_t zoneID)
846 {
847 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
848 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
849 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
850
851 sptr<AudioPolicyManagerListenerStub> listener = new(std::nothrow) AudioPolicyManagerListenerStub();
852 CHECK_AND_RETURN_RET_LOG(listener != nullptr, ERROR, "object null");
853 listener->SetInterruptCallback(callback);
854
855 sptr<IRemoteObject> object = listener->AsObject();
856 CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "listenerStub->AsObject is nullptr..");
857
858 return gsp->SetAudioInterruptCallback(sessionID, object, clientUid, zoneID);
859 }
860
UnsetAudioInterruptCallback(const uint32_t sessionID,const int32_t zoneID)861 int32_t AudioPolicyManager::UnsetAudioInterruptCallback(const uint32_t sessionID, const int32_t zoneID)
862 {
863 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
864 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
865 return gsp->UnsetAudioInterruptCallback(sessionID, zoneID);
866 }
867
SetQueryClientTypeCallback(const std::shared_ptr<AudioQueryClientTypeCallback> & callback)868 int32_t AudioPolicyManager::SetQueryClientTypeCallback(const std::shared_ptr<AudioQueryClientTypeCallback> &callback)
869 {
870 AUDIO_ERR_LOG("In");
871 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
872 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
873 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
874
875 sptr<AudioPolicyManagerListenerStub> listener = new(std::nothrow) AudioPolicyManagerListenerStub();
876 CHECK_AND_RETURN_RET_LOG(listener != nullptr, ERROR, "object null");
877 listener->SetQueryClientTypeCallback(callback);
878
879 sptr<IRemoteObject> object = listener->AsObject();
880 CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "listenerStub->AsObject is nullptr.");
881
882 return gsp->SetQueryClientTypeCallback(object);
883 }
884
ActivateAudioInterrupt(const AudioInterrupt & audioInterrupt,const int32_t zoneID,const bool isUpdatedAudioStrategy)885 int32_t AudioPolicyManager::ActivateAudioInterrupt(
886 const AudioInterrupt &audioInterrupt, const int32_t zoneID, const bool isUpdatedAudioStrategy)
887 {
888 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
889 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
890 return gsp->ActivateAudioInterrupt(audioInterrupt, zoneID, isUpdatedAudioStrategy);
891 }
892
DeactivateAudioInterrupt(const AudioInterrupt & audioInterrupt,const int32_t zoneID)893 int32_t AudioPolicyManager::DeactivateAudioInterrupt(const AudioInterrupt &audioInterrupt, const int32_t zoneID)
894 {
895 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
896 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
897 return gsp->DeactivateAudioInterrupt(audioInterrupt, zoneID);
898 }
899
SetAudioManagerInterruptCallback(const int32_t clientId,const std::shared_ptr<AudioInterruptCallback> & callback)900 int32_t AudioPolicyManager::SetAudioManagerInterruptCallback(const int32_t clientId,
901 const std::shared_ptr<AudioInterruptCallback> &callback)
902 {
903 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
904 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
905 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
906
907 std::unique_lock<std::mutex> lock(listenerStubMutex_);
908 sptr<AudioPolicyManagerListenerStub> interruptListenerStub = new(std::nothrow) AudioPolicyManagerListenerStub();
909 CHECK_AND_RETURN_RET_LOG(interruptListenerStub != nullptr, ERROR, "object null");
910 interruptListenerStub->SetInterruptCallback(callback);
911
912 sptr<IRemoteObject> object = interruptListenerStub->AsObject();
913 CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "onInterruptListenerStub->AsObject is nullptr.");
914 lock.unlock();
915
916 return gsp->SetAudioManagerInterruptCallback(clientId, object);
917 }
918
UnsetAudioManagerInterruptCallback(const int32_t clientId)919 int32_t AudioPolicyManager::UnsetAudioManagerInterruptCallback(const int32_t clientId)
920 {
921 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
922 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
923 return gsp->UnsetAudioManagerInterruptCallback(clientId);
924 }
925
RequestAudioFocus(const int32_t clientId,const AudioInterrupt & audioInterrupt)926 int32_t AudioPolicyManager::RequestAudioFocus(const int32_t clientId, const AudioInterrupt &audioInterrupt)
927 {
928 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
929 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
930 return gsp->RequestAudioFocus(clientId, audioInterrupt);
931 }
932
AbandonAudioFocus(const int32_t clientId,const AudioInterrupt & audioInterrupt)933 int32_t AudioPolicyManager::AbandonAudioFocus(const int32_t clientId, const AudioInterrupt &audioInterrupt)
934 {
935 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
936 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
937 return gsp->AbandonAudioFocus(clientId, audioInterrupt);
938 }
939
GetStreamInFocus(const int32_t zoneID)940 AudioStreamType AudioPolicyManager::GetStreamInFocus(const int32_t zoneID)
941 {
942 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
943 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, STREAM_DEFAULT, "audio policy manager proxy is NULL.");
944 return gsp->GetStreamInFocus(zoneID);
945 }
946
GetSessionInfoInFocus(AudioInterrupt & audioInterrupt,const int32_t zoneID)947 int32_t AudioPolicyManager::GetSessionInfoInFocus(AudioInterrupt &audioInterrupt, const int32_t zoneID)
948 {
949 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
950 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
951 return gsp->GetSessionInfoInFocus(audioInterrupt, zoneID);
952 }
953
SetVolumeKeyEventCallback(const int32_t clientPid,const std::shared_ptr<VolumeKeyEventCallback> & callback,API_VERSION api_v)954 int32_t AudioPolicyManager::SetVolumeKeyEventCallback(const int32_t clientPid,
955 const std::shared_ptr<VolumeKeyEventCallback> &callback, API_VERSION api_v)
956 {
957 AUDIO_INFO_LOG("SetVolumeKeyEventCallback: client: %{public}d", clientPid);
958 if (api_v == API_8 && !PermissionUtil::VerifySystemPermission()) {
959 AUDIO_ERR_LOG("SetVolumeKeyEventCallback: No system permission");
960 return ERR_PERMISSION_DENIED;
961 }
962 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "volume back is nullptr");
963
964 if (!isAudioPolicyClientRegisted_) {
965 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
966 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
967 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
968 if (ret != SUCCESS) {
969 return ret;
970 }
971 }
972
973 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_VOLUME_KEY_EVENT].mutex);
974 if (audioPolicyClientStubCB_ != nullptr) {
975 audioPolicyClientStubCB_->AddVolumeKeyEventCallback(callback);
976 size_t callbackSize = audioPolicyClientStubCB_->GetVolumeKeyEventCallbackSize();
977 if (callbackSize == 1) {
978 callbackChangeInfos_[CALLBACK_SET_VOLUME_KEY_EVENT].isEnable = true;
979 SetClientCallbacksEnable(CALLBACK_SET_VOLUME_KEY_EVENT, true);
980 }
981 }
982 return SUCCESS;
983 }
984
UnsetVolumeKeyEventCallback(const std::shared_ptr<VolumeKeyEventCallback> & callback)985 int32_t AudioPolicyManager::UnsetVolumeKeyEventCallback(
986 const std::shared_ptr<VolumeKeyEventCallback> &callback)
987 {
988 AUDIO_DEBUG_LOG("UnsetVolumeKeyEventCallback");
989 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_VOLUME_KEY_EVENT].mutex);
990 if (audioPolicyClientStubCB_ != nullptr) {
991 audioPolicyClientStubCB_->RemoveVolumeKeyEventCallback(callback);
992 if (audioPolicyClientStubCB_->GetVolumeKeyEventCallbackSize() == 0) {
993 callbackChangeInfos_[CALLBACK_SET_VOLUME_KEY_EVENT].isEnable = false;
994 SetClientCallbacksEnable(CALLBACK_SET_VOLUME_KEY_EVENT, false);
995 }
996 }
997 return SUCCESS;
998 }
999
RegisterAudioRendererEventListener(const std::shared_ptr<AudioRendererStateChangeCallback> & callback)1000 int32_t AudioPolicyManager::RegisterAudioRendererEventListener(
1001 const std::shared_ptr<AudioRendererStateChangeCallback> &callback)
1002 {
1003 AUDIO_DEBUG_LOG("in");
1004 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "RendererEvent Listener callback is nullptr");
1005
1006 if (!isAudioPolicyClientRegisted_) {
1007 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1008 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1009 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
1010 if (ret != SUCCESS) {
1011 return ret;
1012 }
1013 }
1014
1015 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_RENDERER_STATE_CHANGE].mutex);
1016 audioPolicyClientStubCB_->AddRendererStateChangeCallback(callback);
1017 size_t callbackSize = audioPolicyClientStubCB_->GetRendererStateChangeCallbackSize();
1018 if (callbackSize == 1) {
1019 callbackChangeInfos_[CALLBACK_RENDERER_STATE_CHANGE].isEnable = true;
1020 SetClientCallbacksEnable(CALLBACK_RENDERER_STATE_CHANGE, true);
1021 }
1022 isAudioRendererEventListenerRegistered = true;
1023 return SUCCESS;
1024 }
1025
UnregisterAudioRendererEventListener(const std::vector<std::shared_ptr<AudioRendererStateChangeCallback>> & callbacks)1026 int32_t AudioPolicyManager::UnregisterAudioRendererEventListener(
1027 const std::vector<std::shared_ptr<AudioRendererStateChangeCallback>> &callbacks)
1028 {
1029 AUDIO_DEBUG_LOG("in");
1030 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_RENDERER_STATE_CHANGE].mutex);
1031 if ((audioPolicyClientStubCB_ != nullptr) && isAudioRendererEventListenerRegistered) {
1032 audioPolicyClientStubCB_->RemoveRendererStateChangeCallback(callbacks);
1033 if (audioPolicyClientStubCB_->GetRendererStateChangeCallbackSize() == 0) {
1034 callbackChangeInfos_[CALLBACK_RENDERER_STATE_CHANGE].isEnable = false;
1035 SetClientCallbacksEnable(CALLBACK_RENDERER_STATE_CHANGE, false);
1036 }
1037 isAudioRendererEventListenerRegistered = false;
1038 }
1039 return SUCCESS;
1040 }
1041
UnregisterAudioRendererEventListener(const std::shared_ptr<AudioRendererStateChangeCallback> & callback)1042 int32_t AudioPolicyManager::UnregisterAudioRendererEventListener(
1043 const std::shared_ptr<AudioRendererStateChangeCallback> &callback)
1044 {
1045 AUDIO_DEBUG_LOG("in");
1046 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_RENDERER_STATE_CHANGE].mutex);
1047 if ((audioPolicyClientStubCB_ != nullptr) && isAudioRendererEventListenerRegistered) {
1048 audioPolicyClientStubCB_->RemoveRendererStateChangeCallback(callback);
1049 if (audioPolicyClientStubCB_->GetRendererStateChangeCallbackSize() == 0) {
1050 callbackChangeInfos_[CALLBACK_RENDERER_STATE_CHANGE].isEnable = false;
1051 SetClientCallbacksEnable(CALLBACK_RENDERER_STATE_CHANGE, false);
1052 }
1053 isAudioRendererEventListenerRegistered = false;
1054 }
1055 return SUCCESS;
1056 }
1057
RegisterAudioCapturerEventListener(const int32_t clientPid,const std::shared_ptr<AudioCapturerStateChangeCallback> & callback)1058 int32_t AudioPolicyManager::RegisterAudioCapturerEventListener(const int32_t clientPid,
1059 const std::shared_ptr<AudioCapturerStateChangeCallback> &callback)
1060 {
1061 AUDIO_DEBUG_LOG("AudioPolicyManager::RegisterAudioCapturerEventListener");
1062
1063 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "Capturer Event Listener callback is nullptr");
1064
1065 if (!isAudioPolicyClientRegisted_) {
1066 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1067 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1068 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
1069 if (ret != SUCCESS) {
1070 return ret;
1071 }
1072 }
1073
1074 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_CAPTURER_STATE_CHANGE].mutex);
1075 audioPolicyClientStubCB_->AddCapturerStateChangeCallback(callback);
1076 size_t callbackSize = audioPolicyClientStubCB_->GetCapturerStateChangeCallbackSize();
1077 if (callbackSize == 1) {
1078 callbackChangeInfos_[CALLBACK_CAPTURER_STATE_CHANGE].isEnable = true;
1079 SetClientCallbacksEnable(CALLBACK_CAPTURER_STATE_CHANGE, true);
1080 }
1081 isAudioCapturerEventListenerRegistered = true;
1082 return SUCCESS;
1083 }
1084
UnregisterAudioCapturerEventListener(const int32_t clientPid)1085 int32_t AudioPolicyManager::UnregisterAudioCapturerEventListener(const int32_t clientPid)
1086 {
1087 AUDIO_DEBUG_LOG("AudioPolicyManager::UnregisterAudioCapturerEventListener");
1088 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_CAPTURER_STATE_CHANGE].mutex);
1089 if ((audioPolicyClientStubCB_ != nullptr) && isAudioCapturerEventListenerRegistered) {
1090 audioPolicyClientStubCB_->RemoveCapturerStateChangeCallback();
1091 if (audioPolicyClientStubCB_->GetCapturerStateChangeCallbackSize() == 0) {
1092 callbackChangeInfos_[CALLBACK_CAPTURER_STATE_CHANGE].isEnable = false;
1093 SetClientCallbacksEnable(CALLBACK_CAPTURER_STATE_CHANGE, false);
1094 }
1095 isAudioCapturerEventListenerRegistered = false;
1096 }
1097 return SUCCESS;
1098 }
1099
RegisterDeviceChangeWithInfoCallback(const uint32_t sessionID,const std::weak_ptr<DeviceChangeWithInfoCallback> & callback)1100 int32_t AudioPolicyManager::RegisterDeviceChangeWithInfoCallback(
1101 const uint32_t sessionID, const std::weak_ptr<DeviceChangeWithInfoCallback> &callback)
1102 {
1103 AUDIO_DEBUG_LOG("In");
1104
1105 if (callback.expired()) {
1106 AUDIO_ERR_LOG("callback is expired");
1107 return ERR_INVALID_PARAM;
1108 }
1109
1110 if (!isAudioPolicyClientRegisted_) {
1111 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1112 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1113 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
1114 if (ret != SUCCESS) {
1115 return ret;
1116 }
1117 }
1118
1119 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_DEVICE_CHANGE_WITH_INFO].mutex);
1120 if (audioPolicyClientStubCB_ != nullptr) {
1121 audioPolicyClientStubCB_->AddDeviceChangeWithInfoCallback(sessionID, callback);
1122 size_t callbackSize = audioPolicyClientStubCB_->GetDeviceChangeWithInfoCallbackkSize();
1123 if (callbackSize == 1) {
1124 callbackChangeInfos_[CALLBACK_DEVICE_CHANGE_WITH_INFO].isEnable = true;
1125 SetClientCallbacksEnable(CALLBACK_DEVICE_CHANGE_WITH_INFO, true);
1126 }
1127 }
1128 return SUCCESS;
1129 }
1130
UnregisterDeviceChangeWithInfoCallback(const uint32_t sessionID)1131 int32_t AudioPolicyManager::UnregisterDeviceChangeWithInfoCallback(const uint32_t sessionID)
1132 {
1133 AUDIO_DEBUG_LOG("In");
1134 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_DEVICE_CHANGE_WITH_INFO].mutex);
1135 if (audioPolicyClientStubCB_ != nullptr) {
1136 audioPolicyClientStubCB_->RemoveDeviceChangeWithInfoCallback(sessionID);
1137 if (audioPolicyClientStubCB_->GetDeviceChangeWithInfoCallbackkSize() == 0) {
1138 callbackChangeInfos_[CALLBACK_DEVICE_CHANGE_WITH_INFO].isEnable = false;
1139 SetClientCallbacksEnable(CALLBACK_DEVICE_CHANGE_WITH_INFO, false);
1140 }
1141 }
1142 return SUCCESS;
1143 }
1144
RegisterTracker(AudioMode & mode,AudioStreamChangeInfo & streamChangeInfo,const std::shared_ptr<AudioClientTracker> & clientTrackerObj)1145 int32_t AudioPolicyManager::RegisterTracker(AudioMode &mode, AudioStreamChangeInfo &streamChangeInfo,
1146 const std::shared_ptr<AudioClientTracker> &clientTrackerObj)
1147 {
1148 AUDIO_DEBUG_LOG("AudioPolicyManager::RegisterTracker");
1149 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1150 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1151
1152 std::unique_lock<std::mutex> lock(clientTrackerStubMutex_);
1153 sptr<AudioClientTrackerCallbackStub> callback = new(std::nothrow) AudioClientTrackerCallbackStub();
1154 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERROR, "clientTrackerCbStub: memory allocation failed");
1155
1156 callback->SetClientTrackerCallback(clientTrackerObj);
1157
1158 sptr<IRemoteObject> object = callback->AsObject();
1159 CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "clientTrackerCbStub: IPC object creation failed");
1160 lock.unlock();
1161
1162 return gsp->RegisterTracker(mode, streamChangeInfo, object);
1163 }
1164
UpdateTracker(AudioMode & mode,AudioStreamChangeInfo & streamChangeInfo)1165 int32_t AudioPolicyManager::UpdateTracker(AudioMode &mode, AudioStreamChangeInfo &streamChangeInfo)
1166 {
1167 AUDIO_DEBUG_LOG("AudioPolicyManager::UpdateTracker");
1168 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1169 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1170 return gsp->UpdateTracker(mode, streamChangeInfo);
1171 }
1172
FetchOutputDeviceForTrack(AudioStreamChangeInfo & streamChangeInfo,const AudioStreamDeviceChangeReasonExt reason)1173 void AudioPolicyManager::FetchOutputDeviceForTrack(AudioStreamChangeInfo &streamChangeInfo,
1174 const AudioStreamDeviceChangeReasonExt reason)
1175 {
1176 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1177 if (gsp != nullptr) {
1178 gsp->FetchOutputDeviceForTrack(streamChangeInfo, reason);
1179 } else {
1180 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1181 }
1182 }
1183
FetchInputDeviceForTrack(AudioStreamChangeInfo & streamChangeInfo)1184 void AudioPolicyManager::FetchInputDeviceForTrack(AudioStreamChangeInfo &streamChangeInfo)
1185 {
1186 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1187 if (gsp != nullptr) {
1188 gsp->FetchInputDeviceForTrack(streamChangeInfo);
1189 } else {
1190 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1191 }
1192 }
1193
CheckRecordingCreate(uint32_t appTokenId,uint64_t appFullTokenId,int32_t appUid,SourceType sourceType)1194 bool AudioPolicyManager::CheckRecordingCreate(uint32_t appTokenId, uint64_t appFullTokenId, int32_t appUid,
1195 SourceType sourceType)
1196 {
1197 AUDIO_ERR_LOG("Not supported operation");
1198 return false;
1199 }
1200
CheckRecordingStateChange(uint32_t appTokenId,uint64_t appFullTokenId,int32_t appUid,AudioPermissionState state)1201 bool AudioPolicyManager::CheckRecordingStateChange(uint32_t appTokenId, uint64_t appFullTokenId, int32_t appUid,
1202 AudioPermissionState state)
1203 {
1204 AUDIO_ERR_LOG("Not supported operation");
1205 return false;
1206 }
1207
ReconfigureAudioChannel(const uint32_t & count,DeviceType deviceType)1208 int32_t AudioPolicyManager::ReconfigureAudioChannel(const uint32_t &count, DeviceType deviceType)
1209 {
1210 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1211 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1212 return gsp->ReconfigureAudioChannel(count, deviceType);
1213 }
1214
GetAudioLatencyFromXml()1215 int32_t AudioPolicyManager::GetAudioLatencyFromXml()
1216 {
1217 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1218 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1219 return gsp->GetAudioLatencyFromXml();
1220 }
1221
GetSinkLatencyFromXml()1222 uint32_t AudioPolicyManager::GetSinkLatencyFromXml()
1223 {
1224 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1225 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, 0, "audio policy manager proxy is NULL.");
1226 return gsp->GetSinkLatencyFromXml();
1227 }
1228
GetPreferredOutputStreamType(AudioRendererInfo & rendererInfo)1229 int32_t AudioPolicyManager::GetPreferredOutputStreamType(AudioRendererInfo &rendererInfo)
1230 {
1231 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1232 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, AUDIO_FLAG_INVALID, "audio policy manager proxy is NULL.");
1233 return gsp->GetPreferredOutputStreamType(rendererInfo);
1234 }
1235
GetPreferredInputStreamType(AudioCapturerInfo & capturerInfo)1236 int32_t AudioPolicyManager::GetPreferredInputStreamType(AudioCapturerInfo &capturerInfo)
1237 {
1238 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1239 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, AUDIO_FLAG_INVALID, "audio policy manager proxy is NULL.");
1240 return gsp->GetPreferredInputStreamType(capturerInfo);
1241 }
1242
GetCurrentRendererChangeInfos(vector<unique_ptr<AudioRendererChangeInfo>> & audioRendererChangeInfos)1243 int32_t AudioPolicyManager::GetCurrentRendererChangeInfos(
1244 vector<unique_ptr<AudioRendererChangeInfo>> &audioRendererChangeInfos)
1245 {
1246 AUDIO_DEBUG_LOG("GetCurrentRendererChangeInfos");
1247 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1248 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1249 return gsp->GetCurrentRendererChangeInfos(audioRendererChangeInfos);
1250 }
1251
GetCurrentCapturerChangeInfos(vector<unique_ptr<AudioCapturerChangeInfo>> & audioCapturerChangeInfos)1252 int32_t AudioPolicyManager::GetCurrentCapturerChangeInfos(
1253 vector<unique_ptr<AudioCapturerChangeInfo>> &audioCapturerChangeInfos)
1254 {
1255 AUDIO_DEBUG_LOG("GetCurrentCapturerChangeInfos");
1256 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1257 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1258 return gsp->GetCurrentCapturerChangeInfos(audioCapturerChangeInfos);
1259 }
1260
UpdateStreamState(const int32_t clientUid,StreamSetState streamSetState,StreamUsage streamUsage)1261 int32_t AudioPolicyManager::UpdateStreamState(const int32_t clientUid,
1262 StreamSetState streamSetState, StreamUsage streamUsage)
1263 {
1264 AUDIO_DEBUG_LOG("UpdateStreamState");
1265 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1266 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1267 return gsp->UpdateStreamState(clientUid, streamSetState, streamUsage);
1268 }
1269
GetVolumeGroupInfos(std::string networkId,std::vector<sptr<VolumeGroupInfo>> & infos)1270 int32_t AudioPolicyManager::GetVolumeGroupInfos(std::string networkId, std::vector<sptr<VolumeGroupInfo>> &infos)
1271 {
1272 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1273 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1274 return gsp->GetVolumeGroupInfos(networkId, infos);
1275 }
1276
GetNetworkIdByGroupId(int32_t groupId,std::string & networkId)1277 int32_t AudioPolicyManager::GetNetworkIdByGroupId(int32_t groupId, std::string &networkId)
1278 {
1279 AudioXCollie audioXCollie("AudioPolicyManager::GetNetworkIdByGroupId", TIME_OUT_SECONDS);
1280 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1281 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "GetNetworkIdByGroupId failed, g_apProxy is nullptr.");
1282 return gsp->GetNetworkIdByGroupId(groupId, networkId);
1283 }
1284
IsAudioRendererLowLatencySupported(const AudioStreamInfo & audioStreamInfo)1285 bool AudioPolicyManager::IsAudioRendererLowLatencySupported(const AudioStreamInfo &audioStreamInfo)
1286 {
1287 AUDIO_DEBUG_LOG("IsAudioRendererLowLatencySupported");
1288 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1289 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1290 return gsp->IsAudioRendererLowLatencySupported(audioStreamInfo);
1291 }
1292
SetSystemSoundUri(const std::string & key,const std::string & uri)1293 int32_t AudioPolicyManager::SetSystemSoundUri(const std::string &key, const std::string &uri)
1294 {
1295 AUDIO_DEBUG_LOG("SetSystemSoundUri: [%{public}s]: [%{public}s]", key.c_str(), uri.c_str());
1296 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1297 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1298
1299 return gsp->SetSystemSoundUri(key, uri);
1300 }
1301
GetSystemSoundUri(const std::string & key)1302 std::string AudioPolicyManager::GetSystemSoundUri(const std::string &key)
1303 {
1304 AUDIO_DEBUG_LOG("GetSystemSoundUri: %{public}s", key.c_str());
1305 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1306 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, "", "audio policy manager proxy is NULL.");
1307
1308 return gsp->GetSystemSoundUri(key);
1309 }
1310
GetMinStreamVolume()1311 float AudioPolicyManager::GetMinStreamVolume()
1312 {
1313 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1314 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1315 return gsp->GetMinStreamVolume();
1316 }
1317
GetMaxStreamVolume()1318 float AudioPolicyManager::GetMaxStreamVolume()
1319 {
1320 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1321 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1322 return gsp->GetMaxStreamVolume();
1323 }
1324
RegisterAudioPolicyServerDiedCb(const int32_t clientPid,const std::shared_ptr<AudioRendererPolicyServiceDiedCallback> & callback)1325 int32_t AudioPolicyManager::RegisterAudioPolicyServerDiedCb(const int32_t clientPid,
1326 const std::shared_ptr<AudioRendererPolicyServiceDiedCallback> &callback)
1327 {
1328 std::lock_guard<std::mutex> lockCbMap(g_cBMapMutex);
1329 if (rendererCBMap_.count(clientPid)) {
1330 rendererCBMap_.erase(clientPid);
1331 }
1332 rendererCBMap_[clientPid] = callback;
1333 return SUCCESS;
1334 }
1335
UnregisterAudioPolicyServerDiedCb(const int32_t clientPid)1336 int32_t AudioPolicyManager::UnregisterAudioPolicyServerDiedCb(const int32_t clientPid)
1337 {
1338 std::lock_guard<std::mutex> lockCbMap(g_cBMapMutex);
1339 AUDIO_DEBUG_LOG("client pid: %{public}d", clientPid);
1340 rendererCBMap_.erase(getpid());
1341 return SUCCESS;
1342 }
1343
RegisterAudioStreamPolicyServerDiedCb(const std::shared_ptr<AudioStreamPolicyServiceDiedCallback> & callback)1344 int32_t AudioPolicyManager::RegisterAudioStreamPolicyServerDiedCb(
1345 const std::shared_ptr<AudioStreamPolicyServiceDiedCallback> &callback)
1346 {
1347 std::lock_guard<std::mutex> lockCbMap(g_cBDiedMapMutex);
1348 AUDIO_DEBUG_LOG("RegisterAudioStreamPolicyServerDiedCb");
1349 audioStreamCBMap_.emplace_back(callback);
1350
1351 return SUCCESS;
1352 }
1353
UnregisterAudioStreamPolicyServerDiedCb(const std::shared_ptr<AudioStreamPolicyServiceDiedCallback> & callback)1354 int32_t AudioPolicyManager::UnregisterAudioStreamPolicyServerDiedCb(
1355 const std::shared_ptr<AudioStreamPolicyServiceDiedCallback> &callback)
1356 {
1357 std::lock_guard<std::mutex> lockCbMap(g_cBDiedMapMutex);
1358 AUDIO_DEBUG_LOG("UnregisterAudioStreamPolicyServerDiedCb");
1359
1360 audioStreamCBMap_.erase(std::remove_if(audioStreamCBMap_.begin(), audioStreamCBMap_.end(),
1361 [&callback] (const weak_ptr<AudioStreamPolicyServiceDiedCallback> &cb) {
1362 auto sharedCb = cb.lock();
1363 if (sharedCb == callback || sharedCb == nullptr) {
1364 return true;
1365 }
1366 return false;
1367 }), audioStreamCBMap_.end());
1368
1369 return SUCCESS;
1370 }
1371
CheckMaxRendererInstances()1372 int32_t AudioPolicyManager::CheckMaxRendererInstances()
1373 {
1374 AUDIO_DEBUG_LOG("AudioPolicyManager::CheckMaxRendererInstances");
1375 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1376 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1377
1378 return gsp->CheckMaxRendererInstances();
1379 }
1380
IsVolumeUnadjustable()1381 bool AudioPolicyManager::IsVolumeUnadjustable()
1382 {
1383 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1384 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1385 return gsp->IsVolumeUnadjustable();
1386 }
1387
AdjustVolumeByStep(VolumeAdjustType adjustType)1388 int32_t AudioPolicyManager::AdjustVolumeByStep(VolumeAdjustType adjustType)
1389 {
1390 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1391 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1392 return gsp->AdjustVolumeByStep(adjustType);
1393 }
1394
AdjustSystemVolumeByStep(AudioVolumeType volumeType,VolumeAdjustType adjustType)1395 int32_t AudioPolicyManager::AdjustSystemVolumeByStep(AudioVolumeType volumeType, VolumeAdjustType adjustType)
1396 {
1397 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1398 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1399 return gsp->AdjustSystemVolumeByStep(volumeType, adjustType);
1400 }
1401
GetSystemVolumeInDb(AudioVolumeType volumeType,int32_t volumeLevel,DeviceType deviceType)1402 float AudioPolicyManager::GetSystemVolumeInDb(AudioVolumeType volumeType, int32_t volumeLevel, DeviceType deviceType)
1403 {
1404 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1405 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1406 return gsp->GetSystemVolumeInDb(volumeType, volumeLevel, deviceType);
1407 }
1408
QueryEffectSceneMode(SupportedEffectConfig & supportedEffectConfig)1409 int32_t AudioPolicyManager::QueryEffectSceneMode(SupportedEffectConfig &supportedEffectConfig)
1410 {
1411 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1412 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1413 int error = gsp->QueryEffectSceneMode(supportedEffectConfig);
1414 return error;
1415 }
1416
SetPlaybackCapturerFilterInfos(const AudioPlaybackCaptureConfig & config,uint32_t appTokenId)1417 int32_t AudioPolicyManager::SetPlaybackCapturerFilterInfos(const AudioPlaybackCaptureConfig &config,
1418 uint32_t appTokenId)
1419 {
1420 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1421 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1422
1423 return gsp->SetPlaybackCapturerFilterInfos(config, appTokenId);
1424 }
1425
SetCaptureSilentState(bool state)1426 int32_t AudioPolicyManager::SetCaptureSilentState(bool state)
1427 {
1428 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1429 if (gsp == nullptr) {
1430 AUDIO_ERR_LOG("SetCaptureSilentState: audio policy manager proxy is NULL");
1431 return ERROR;
1432 }
1433
1434 return gsp->SetCaptureSilentState(state);
1435 }
1436
GetHardwareOutputSamplingRate(const sptr<AudioDeviceDescriptor> & desc)1437 int32_t AudioPolicyManager::GetHardwareOutputSamplingRate(const sptr<AudioDeviceDescriptor> &desc)
1438 {
1439 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1440 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1441 return gsp->GetHardwareOutputSamplingRate(desc);
1442 }
1443
GetAudioCapturerMicrophoneDescriptors(int32_t sessionID)1444 vector<sptr<MicrophoneDescriptor>> AudioPolicyManager::GetAudioCapturerMicrophoneDescriptors(int32_t sessionID)
1445 {
1446 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1447 if (gsp == nullptr) {
1448 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1449 std::vector<sptr<MicrophoneDescriptor>> descs;
1450 return descs;
1451 }
1452 return gsp->GetAudioCapturerMicrophoneDescriptors(sessionID);
1453 }
1454
GetAvailableMicrophones()1455 vector<sptr<MicrophoneDescriptor>> AudioPolicyManager::GetAvailableMicrophones()
1456 {
1457 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1458 if (gsp == nullptr) {
1459 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1460 std::vector<sptr<MicrophoneDescriptor>> descs;
1461 return descs;
1462 }
1463 return gsp->GetAvailableMicrophones();
1464 }
1465
SetDeviceAbsVolumeSupported(const std::string & macAddress,const bool support)1466 int32_t AudioPolicyManager::SetDeviceAbsVolumeSupported(const std::string &macAddress, const bool support)
1467 {
1468 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1469 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1470 return gsp->SetDeviceAbsVolumeSupported(macAddress, support);
1471 }
1472
IsAbsVolumeScene()1473 bool AudioPolicyManager::IsAbsVolumeScene()
1474 {
1475 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1476 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1477 return gsp->IsAbsVolumeScene();
1478 }
1479
IsVgsVolumeSupported()1480 bool AudioPolicyManager::IsVgsVolumeSupported()
1481 {
1482 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1483 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1484 return gsp->IsVgsVolumeSupported();
1485 }
1486
SetA2dpDeviceVolume(const std::string & macAddress,const int32_t volume,const bool updateUi)1487 int32_t AudioPolicyManager::SetA2dpDeviceVolume(const std::string &macAddress, const int32_t volume,
1488 const bool updateUi)
1489 {
1490 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1491 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1492 return gsp->SetA2dpDeviceVolume(macAddress, volume, updateUi);
1493 }
1494
GetAvailableDevices(AudioDeviceUsage usage)1495 std::vector<std::unique_ptr<AudioDeviceDescriptor>> AudioPolicyManager::GetAvailableDevices(AudioDeviceUsage usage)
1496 {
1497 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1498 if (gsp == nullptr) {
1499 AUDIO_ERR_LOG("GetAvailableMicrophones: audio policy manager proxy is NULL.");
1500 std::vector<unique_ptr<AudioDeviceDescriptor>> descs;
1501 return descs;
1502 }
1503 return gsp->GetAvailableDevices(usage);
1504 }
1505
SetAvailableDeviceChangeCallback(const int32_t clientId,const AudioDeviceUsage usage,const std::shared_ptr<AudioManagerAvailableDeviceChangeCallback> & callback)1506 int32_t AudioPolicyManager::SetAvailableDeviceChangeCallback(const int32_t clientId, const AudioDeviceUsage usage,
1507 const std::shared_ptr<AudioManagerAvailableDeviceChangeCallback>& callback)
1508 {
1509 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1510 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1511 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
1512
1513 auto deviceChangeCbStub = new(std::nothrow) AudioPolicyManagerListenerStub();
1514 CHECK_AND_RETURN_RET_LOG(deviceChangeCbStub != nullptr, ERROR, "object null");
1515
1516 deviceChangeCbStub->SetAvailableDeviceChangeCallback(callback);
1517
1518 sptr<IRemoteObject> object = deviceChangeCbStub->AsObject();
1519 if (object == nullptr) {
1520 AUDIO_ERR_LOG("listenerStub->AsObject is nullptr..");
1521 delete deviceChangeCbStub;
1522 return ERROR;
1523 }
1524
1525 return gsp->SetAvailableDeviceChangeCallback(clientId, usage, object);
1526 }
1527
UnsetAvailableDeviceChangeCallback(const int32_t clientId,AudioDeviceUsage usage)1528 int32_t AudioPolicyManager::UnsetAvailableDeviceChangeCallback(const int32_t clientId, AudioDeviceUsage usage)
1529 {
1530 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1531 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1532 return gsp->UnsetAvailableDeviceChangeCallback(clientId, usage);
1533 }
1534
ConfigDistributedRoutingRole(sptr<AudioDeviceDescriptor> descriptor,CastType type)1535 int32_t AudioPolicyManager::ConfigDistributedRoutingRole(sptr<AudioDeviceDescriptor> descriptor, CastType type)
1536 {
1537 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1538 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1539 return gsp->ConfigDistributedRoutingRole(descriptor, type);
1540 }
1541
SetDistributedRoutingRoleCallback(const std::shared_ptr<AudioDistributedRoutingRoleCallback> & callback)1542 int32_t AudioPolicyManager::SetDistributedRoutingRoleCallback(
1543 const std::shared_ptr<AudioDistributedRoutingRoleCallback> &callback)
1544 {
1545 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1546 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1547 if (callback == nullptr) {
1548 AUDIO_ERR_LOG("SetDistributedRoutingRoleCallback: callback is nullptr");
1549 return ERR_INVALID_PARAM;
1550 }
1551
1552 std::unique_lock<std::mutex> lock(listenerStubMutex_);
1553 auto activeDistributedRoutingRoleCb = new(std::nothrow) AudioRoutingManagerListenerStub();
1554 if (activeDistributedRoutingRoleCb == nullptr) {
1555 AUDIO_ERR_LOG("SetDistributedRoutingRoleCallback: object is nullptr");
1556 return ERROR;
1557 }
1558 activeDistributedRoutingRoleCb->SetDistributedRoutingRoleCallback(callback);
1559 sptr<IRemoteObject> object = activeDistributedRoutingRoleCb->AsObject();
1560 if (object == nullptr) {
1561 AUDIO_ERR_LOG("SetDistributedRoutingRoleCallback: listenerStub is nullptr.");
1562 delete activeDistributedRoutingRoleCb;
1563 return ERROR;
1564 }
1565 return gsp->SetDistributedRoutingRoleCallback(object);
1566 }
1567
UnsetDistributedRoutingRoleCallback()1568 int32_t AudioPolicyManager::UnsetDistributedRoutingRoleCallback()
1569 {
1570 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1571 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1572 return gsp->UnsetDistributedRoutingRoleCallback();
1573 }
1574
IsSpatializationEnabled()1575 bool AudioPolicyManager::IsSpatializationEnabled()
1576 {
1577 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1578 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1579 return gsp->IsSpatializationEnabled();
1580 }
1581
IsSpatializationEnabled(const std::string address)1582 bool AudioPolicyManager::IsSpatializationEnabled(const std::string address)
1583 {
1584 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1585 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1586 return gsp->IsSpatializationEnabled(address);
1587 }
1588
SetSpatializationEnabled(const bool enable)1589 int32_t AudioPolicyManager::SetSpatializationEnabled(const bool enable)
1590 {
1591 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1592 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1593 return gsp->SetSpatializationEnabled(enable);
1594 }
1595
SetSpatializationEnabled(const sptr<AudioDeviceDescriptor> & selectedAudioDevice,const bool enable)1596 int32_t AudioPolicyManager::SetSpatializationEnabled(const sptr<AudioDeviceDescriptor> &selectedAudioDevice,
1597 const bool enable)
1598 {
1599 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1600 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1601 return gsp->SetSpatializationEnabled(selectedAudioDevice, enable);
1602 }
1603
IsHeadTrackingEnabled()1604 bool AudioPolicyManager::IsHeadTrackingEnabled()
1605 {
1606 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1607 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1608 return gsp->IsHeadTrackingEnabled();
1609 }
1610
IsHeadTrackingEnabled(const std::string address)1611 bool AudioPolicyManager::IsHeadTrackingEnabled(const std::string address)
1612 {
1613 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1614 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1615 return gsp->IsHeadTrackingEnabled(address);
1616 }
1617
SetHeadTrackingEnabled(const bool enable)1618 int32_t AudioPolicyManager::SetHeadTrackingEnabled(const bool enable)
1619 {
1620 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1621 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1622 return gsp->SetHeadTrackingEnabled(enable);
1623 }
1624
SetHeadTrackingEnabled(const sptr<AudioDeviceDescriptor> & selectedAudioDevice,const bool enable)1625 int32_t AudioPolicyManager::SetHeadTrackingEnabled(const sptr<AudioDeviceDescriptor> &selectedAudioDevice,
1626 const bool enable)
1627 {
1628 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1629 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1630 return gsp->SetHeadTrackingEnabled(selectedAudioDevice, enable);
1631 }
1632
RegisterSpatializationEnabledEventListener(const std::shared_ptr<AudioSpatializationEnabledChangeCallback> & callback)1633 int32_t AudioPolicyManager::RegisterSpatializationEnabledEventListener(
1634 const std::shared_ptr<AudioSpatializationEnabledChangeCallback> &callback)
1635 {
1636 AUDIO_DEBUG_LOG("Start to register");
1637 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
1638
1639 if (!isAudioPolicyClientRegisted_) {
1640 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1641 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1642 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
1643 if (ret != SUCCESS) {
1644 return ret;
1645 }
1646 }
1647
1648 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SPATIALIZATION_ENABLED_CHANGE].mutex);
1649 if (audioPolicyClientStubCB_ != nullptr) {
1650 audioPolicyClientStubCB_->AddSpatializationEnabledChangeCallback(callback);
1651 size_t callbackSize = audioPolicyClientStubCB_->GetSpatializationEnabledChangeCallbackSize();
1652 if (callbackSize == 1) {
1653 callbackChangeInfos_[CALLBACK_SPATIALIZATION_ENABLED_CHANGE].isEnable = true;
1654 SetClientCallbacksEnable(CALLBACK_SPATIALIZATION_ENABLED_CHANGE, true);
1655 }
1656 }
1657 return SUCCESS;
1658 }
1659
RegisterHeadTrackingEnabledEventListener(const std::shared_ptr<AudioHeadTrackingEnabledChangeCallback> & callback)1660 int32_t AudioPolicyManager::RegisterHeadTrackingEnabledEventListener(
1661 const std::shared_ptr<AudioHeadTrackingEnabledChangeCallback> &callback)
1662 {
1663 AUDIO_DEBUG_LOG("Start to register");
1664 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
1665
1666 if (!isAudioPolicyClientRegisted_) {
1667 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1668 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1669 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
1670 if (ret != SUCCESS) {
1671 return ret;
1672 }
1673 }
1674
1675 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_HEAD_TRACKING_ENABLED_CHANGE].mutex);
1676 if (audioPolicyClientStubCB_ != nullptr) {
1677 audioPolicyClientStubCB_->AddHeadTrackingEnabledChangeCallback(callback);
1678 size_t callbackSize = audioPolicyClientStubCB_->GetHeadTrackingEnabledChangeCallbacSize();
1679 if (callbackSize == 1) {
1680 callbackChangeInfos_[CALLBACK_HEAD_TRACKING_ENABLED_CHANGE].isEnable = true;
1681 SetClientCallbacksEnable(CALLBACK_HEAD_TRACKING_ENABLED_CHANGE, true);
1682 }
1683 }
1684 return SUCCESS;
1685 }
1686
UnregisterSpatializationEnabledEventListener()1687 int32_t AudioPolicyManager::UnregisterSpatializationEnabledEventListener()
1688 {
1689 AUDIO_DEBUG_LOG("Start to unregister");
1690 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SPATIALIZATION_ENABLED_CHANGE].mutex);
1691 if (audioPolicyClientStubCB_ != nullptr) {
1692 audioPolicyClientStubCB_->RemoveSpatializationEnabledChangeCallback();
1693 if (audioPolicyClientStubCB_->GetSpatializationEnabledChangeCallbackSize() == 0) {
1694 callbackChangeInfos_[CALLBACK_SPATIALIZATION_ENABLED_CHANGE].isEnable = false;
1695 SetClientCallbacksEnable(CALLBACK_SPATIALIZATION_ENABLED_CHANGE, false);
1696 }
1697 }
1698 return SUCCESS;
1699 }
1700
UnregisterHeadTrackingEnabledEventListener()1701 int32_t AudioPolicyManager::UnregisterHeadTrackingEnabledEventListener()
1702 {
1703 AUDIO_DEBUG_LOG("Start to unregister");
1704 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_HEAD_TRACKING_ENABLED_CHANGE].mutex);
1705 if (audioPolicyClientStubCB_ != nullptr) {
1706 audioPolicyClientStubCB_->RemoveHeadTrackingEnabledChangeCallback();
1707 if (audioPolicyClientStubCB_->GetHeadTrackingEnabledChangeCallbacSize() == 0) {
1708 callbackChangeInfos_[CALLBACK_HEAD_TRACKING_ENABLED_CHANGE].isEnable = false;
1709 SetClientCallbacksEnable(CALLBACK_HEAD_TRACKING_ENABLED_CHANGE, false);
1710 }
1711 }
1712 return SUCCESS;
1713 }
1714
GetSpatializationState(const StreamUsage streamUsage)1715 AudioSpatializationState AudioPolicyManager::GetSpatializationState(const StreamUsage streamUsage)
1716 {
1717 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1718 if (gsp == nullptr) {
1719 AUDIO_ERR_LOG("GetSpatializationState: audio policy manager proxy is NULL.");
1720 AudioSpatializationState spatializationState = {false, false};
1721 return spatializationState;
1722 }
1723 return gsp->GetSpatializationState(streamUsage);
1724 }
1725
IsSpatializationSupported()1726 bool AudioPolicyManager::IsSpatializationSupported()
1727 {
1728 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1729 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1730 return gsp->IsSpatializationSupported();
1731 }
1732
IsSpatializationSupportedForDevice(const std::string address)1733 bool AudioPolicyManager::IsSpatializationSupportedForDevice(const std::string address)
1734 {
1735 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1736 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1737 return gsp->IsSpatializationSupportedForDevice(address);
1738 }
1739
IsHeadTrackingSupported()1740 bool AudioPolicyManager::IsHeadTrackingSupported()
1741 {
1742 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1743 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1744 return gsp->IsHeadTrackingSupported();
1745 }
1746
IsHeadTrackingSupportedForDevice(const std::string address)1747 bool AudioPolicyManager::IsHeadTrackingSupportedForDevice(const std::string address)
1748 {
1749 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1750 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1751 return gsp->IsHeadTrackingSupportedForDevice(address);
1752 }
1753
UpdateSpatialDeviceState(const AudioSpatialDeviceState audioSpatialDeviceState)1754 int32_t AudioPolicyManager::UpdateSpatialDeviceState(const AudioSpatialDeviceState audioSpatialDeviceState)
1755 {
1756 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1757 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1758 return gsp->UpdateSpatialDeviceState(audioSpatialDeviceState);
1759 }
1760
RegisterSpatializationStateEventListener(const uint32_t sessionID,const StreamUsage streamUsage,const std::shared_ptr<AudioSpatializationStateChangeCallback> & callback)1761 int32_t AudioPolicyManager::RegisterSpatializationStateEventListener(const uint32_t sessionID,
1762 const StreamUsage streamUsage, const std::shared_ptr<AudioSpatializationStateChangeCallback> &callback)
1763 {
1764 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1765 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1766
1767 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "Spatialization state callback is nullptr");
1768
1769 sptr<AudioSpatializationStateChangeListenerStub> spatializationStateChangeListenerStub =
1770 new(std::nothrow) AudioSpatializationStateChangeListenerStub();
1771 CHECK_AND_RETURN_RET_LOG(spatializationStateChangeListenerStub != nullptr, ERROR, "object null");
1772
1773 spatializationStateChangeListenerStub->SetCallback(callback);
1774
1775 sptr<IRemoteObject> object = spatializationStateChangeListenerStub->AsObject();
1776 CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "IPC object creation failed");
1777
1778 return gsp->RegisterSpatializationStateEventListener(sessionID, streamUsage, object);
1779 }
1780
UnregisterSpatializationStateEventListener(const uint32_t sessionID)1781 int32_t AudioPolicyManager::UnregisterSpatializationStateEventListener(const uint32_t sessionID)
1782 {
1783 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1784 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1785
1786 return gsp->UnregisterSpatializationStateEventListener(sessionID);
1787 }
1788
CreateAudioInterruptZone(const std::set<int32_t> & pids,const int32_t zoneID)1789 int32_t AudioPolicyManager::CreateAudioInterruptZone(const std::set<int32_t> &pids, const int32_t zoneID)
1790 {
1791 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1792 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1793
1794 return gsp->CreateAudioInterruptZone(pids, zoneID);
1795 }
1796
AddAudioInterruptZonePids(const std::set<int32_t> & pids,const int32_t zoneID)1797 int32_t AudioPolicyManager::AddAudioInterruptZonePids(const std::set<int32_t> &pids, const int32_t zoneID)
1798 {
1799 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1800 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1801
1802 return gsp->AddAudioInterruptZonePids(pids, zoneID);
1803 }
1804
RemoveAudioInterruptZonePids(const std::set<int32_t> & pids,const int32_t zoneID)1805 int32_t AudioPolicyManager::RemoveAudioInterruptZonePids(const std::set<int32_t> &pids, const int32_t zoneID)
1806 {
1807 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1808 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1809
1810 return gsp->RemoveAudioInterruptZonePids(pids, zoneID);
1811 }
1812
ReleaseAudioInterruptZone(const int32_t zoneID)1813 int32_t AudioPolicyManager::ReleaseAudioInterruptZone(const int32_t zoneID)
1814 {
1815 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1816 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1817
1818 return gsp->ReleaseAudioInterruptZone(zoneID);
1819 }
1820
SetCallDeviceActive(InternalDeviceType deviceType,bool active,std::string address)1821 int32_t AudioPolicyManager::SetCallDeviceActive(InternalDeviceType deviceType, bool active, std::string address)
1822 {
1823 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1824 if (gsp == nullptr) {
1825 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1826 return -1;
1827 }
1828 return gsp->SetCallDeviceActive(deviceType, active, address);
1829 }
1830
GetActiveBluetoothDevice()1831 std::unique_ptr<AudioDeviceDescriptor> AudioPolicyManager::GetActiveBluetoothDevice()
1832 {
1833 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1834 if (gsp == nullptr) {
1835 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1836 return make_unique<AudioDeviceDescriptor>();
1837 }
1838 return gsp->GetActiveBluetoothDevice();
1839 }
1840
NotifyCapturerAdded(AudioCapturerInfo capturerInfo,AudioStreamInfo streamInfo,uint32_t sessionId)1841 int32_t AudioPolicyManager::NotifyCapturerAdded(AudioCapturerInfo capturerInfo, AudioStreamInfo streamInfo,
1842 uint32_t sessionId)
1843 {
1844 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1845 if (gsp == nullptr) {
1846 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1847 return -1;
1848 }
1849 return gsp->NotifyCapturerAdded(capturerInfo, streamInfo, sessionId);
1850 }
1851
GetConverterConfig()1852 ConverterConfig AudioPolicyManager::GetConverterConfig()
1853 {
1854 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1855 if (gsp == nullptr) {
1856 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1857 return ConverterConfig();
1858 }
1859 return gsp->GetConverterConfig();
1860 }
1861
IsHighResolutionExist()1862 bool AudioPolicyManager::IsHighResolutionExist()
1863 {
1864 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1865 if (gsp == nullptr) {
1866 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1867 return false;
1868 }
1869 bool gspIsHighResolutionExist = gsp->IsHighResolutionExist();
1870 return gspIsHighResolutionExist;
1871 }
1872
SetHighResolutionExist(bool highResExist)1873 int32_t AudioPolicyManager::SetHighResolutionExist(bool highResExist)
1874 {
1875 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1876 if (gsp == nullptr) {
1877 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1878 return -1;
1879 }
1880 gsp->SetHighResolutionExist(highResExist);
1881 return SUCCESS;
1882 }
1883
ActivateAudioSession(const AudioSessionStrategy & strategy)1884 int32_t AudioPolicyManager::ActivateAudioSession(const AudioSessionStrategy &strategy)
1885 {
1886 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1887 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1888 if (!isAudioPolicyClientRegisted_) {
1889 int32_t result = RegisterPolicyCallbackClientFunc(gsp);
1890 if (result != SUCCESS) {
1891 AUDIO_ERR_LOG("Failed to register policy callback clent");
1892 return result;
1893 }
1894 }
1895 return gsp->ActivateAudioSession(strategy);
1896 }
1897
DeactivateAudioSession()1898 int32_t AudioPolicyManager::DeactivateAudioSession()
1899 {
1900 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1901 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1902 return gsp->DeactivateAudioSession();
1903 }
1904
IsAudioSessionActivated()1905 bool AudioPolicyManager::IsAudioSessionActivated()
1906 {
1907 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1908 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1909 return gsp->IsAudioSessionActivated();
1910 }
1911
SetAudioSessionCallback(const std::shared_ptr<AudioSessionCallback> & audioSessionCallback)1912 int32_t AudioPolicyManager::SetAudioSessionCallback(const std::shared_ptr<AudioSessionCallback> &audioSessionCallback)
1913 {
1914 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1915 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1916 CHECK_AND_RETURN_RET_LOG(audioSessionCallback != nullptr, ERR_INVALID_PARAM, "audioSessionCallback is nullptr");
1917
1918 int32_t result = SUCCESS;
1919 if (!isAudioPolicyClientRegisted_) {
1920 result = RegisterPolicyCallbackClientFunc(gsp);
1921 if (result != SUCCESS) {
1922 AUDIO_ERR_LOG("Failed to register policy callback clent");
1923 return result;
1924 }
1925 }
1926 if (audioPolicyClientStubCB_ == nullptr) {
1927 AUDIO_ERR_LOG("audioPolicyClientStubCB_ is null");
1928 return ERROR_ILLEGAL_STATE;
1929 }
1930
1931 result = audioPolicyClientStubCB_->AddAudioSessionCallback(audioSessionCallback);
1932 if (result != SUCCESS) {
1933 AUDIO_ERR_LOG("Failed to add audio session callback.");
1934 return result;
1935 }
1936
1937 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_AUDIO_SESSION].mutex);
1938 if (audioPolicyClientStubCB_->GetAudioSessionCallbackSize() == 1) {
1939 // Notify audio server that the client has registerd one listener.
1940 callbackChangeInfos_[CALLBACK_AUDIO_SESSION].isEnable = true;
1941 SetClientCallbacksEnable(CALLBACK_AUDIO_SESSION, true);
1942 }
1943 return result;
1944 }
1945
UnsetAudioSessionCallback()1946 int32_t AudioPolicyManager::UnsetAudioSessionCallback()
1947 {
1948 if (audioPolicyClientStubCB_ == nullptr) {
1949 AUDIO_ERR_LOG("audioPolicyClientStubCB_ is null");
1950 return ERROR_ILLEGAL_STATE;
1951 }
1952
1953 int32_t result = audioPolicyClientStubCB_->RemoveAudioSessionCallback();
1954 if (result != SUCCESS) {
1955 AUDIO_ERR_LOG("Failed to remove all audio session callbacks.");
1956 return result;
1957 }
1958
1959 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_AUDIO_SESSION].mutex);
1960 if (audioPolicyClientStubCB_->GetAudioSessionCallbackSize() == 0) {
1961 // Notify audio server that all of the client listeners have been unregisterd.
1962 callbackChangeInfos_[CALLBACK_AUDIO_SESSION].isEnable = false;
1963 SetClientCallbacksEnable(CALLBACK_AUDIO_SESSION, false);
1964 }
1965 return result;
1966 }
1967
UnsetAudioSessionCallback(const std::shared_ptr<AudioSessionCallback> & audioSessionCallback)1968 int32_t AudioPolicyManager::UnsetAudioSessionCallback(const std::shared_ptr<AudioSessionCallback> &audioSessionCallback)
1969 {
1970 if (audioPolicyClientStubCB_ == nullptr) {
1971 AUDIO_ERR_LOG("audioPolicyClientStubCB_ is null");
1972 return ERROR_ILLEGAL_STATE;
1973 }
1974 int32_t result = audioPolicyClientStubCB_->RemoveAudioSessionCallback(audioSessionCallback);
1975 if (result != SUCCESS) {
1976 AUDIO_ERR_LOG("Failed to remove the audio session callback.");
1977 return result;
1978 }
1979
1980 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_AUDIO_SESSION].mutex);
1981 if (audioPolicyClientStubCB_->GetAudioSessionCallbackSize() == 0) {
1982 // Notify audio server that all of the client listeners have been unregisterd.
1983 callbackChangeInfos_[CALLBACK_AUDIO_SESSION].isEnable = false;
1984 SetClientCallbacksEnable(CALLBACK_AUDIO_SESSION, false);
1985 }
1986 return result;
1987 }
1988
GetSpatializationSceneType()1989 AudioSpatializationSceneType AudioPolicyManager::GetSpatializationSceneType()
1990 {
1991 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1992 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, SPATIALIZATION_SCENE_TYPE_DEFAULT, "audio policy manager proxy is NULL.");
1993 return gsp->GetSpatializationSceneType();
1994 }
1995
SetSpatializationSceneType(const AudioSpatializationSceneType spatializationSceneType)1996 int32_t AudioPolicyManager::SetSpatializationSceneType(const AudioSpatializationSceneType spatializationSceneType)
1997 {
1998 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1999 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2000 return gsp->SetSpatializationSceneType(spatializationSceneType);
2001 }
2002
GetMaxAmplitude(const int32_t deviceId)2003 float AudioPolicyManager::GetMaxAmplitude(const int32_t deviceId)
2004 {
2005 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2006 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2007 return gsp->GetMaxAmplitude(deviceId);
2008 }
2009
DisableSafeMediaVolume()2010 int32_t AudioPolicyManager::DisableSafeMediaVolume()
2011 {
2012 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2013 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2014 return gsp->DisableSafeMediaVolume();
2015 }
2016
IsHeadTrackingDataRequested(const std::string & macAddress)2017 bool AudioPolicyManager::IsHeadTrackingDataRequested(const std::string &macAddress)
2018 {
2019 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2020 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
2021 return gsp->IsHeadTrackingDataRequested(macAddress);
2022 }
2023
RegisterHeadTrackingDataRequestedEventListener(const std::string & macAddress,const std::shared_ptr<HeadTrackingDataRequestedChangeCallback> & callback)2024 int32_t AudioPolicyManager::RegisterHeadTrackingDataRequestedEventListener(const std::string &macAddress,
2025 const std::shared_ptr<HeadTrackingDataRequestedChangeCallback> &callback)
2026 {
2027 AUDIO_DEBUG_LOG("Start to register");
2028 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
2029
2030 if (!isAudioPolicyClientRegisted_) {
2031 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2032 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2033 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
2034 if (ret != SUCCESS) {
2035 return ret;
2036 }
2037 }
2038
2039 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_HEAD_TRACKING_DATA_REQUESTED_CHANGE].mutex);
2040 if (audioPolicyClientStubCB_ != nullptr) {
2041 audioPolicyClientStubCB_->AddHeadTrackingDataRequestedChangeCallback(macAddress, callback);
2042 size_t callbackSize = audioPolicyClientStubCB_->GetHeadTrackingDataRequestedChangeCallbackSize();
2043 if (callbackSize == 1) {
2044 callbackChangeInfos_[CALLBACK_HEAD_TRACKING_DATA_REQUESTED_CHANGE].isEnable = true;
2045 SetClientCallbacksEnable(CALLBACK_HEAD_TRACKING_DATA_REQUESTED_CHANGE, true);
2046 }
2047 }
2048 return SUCCESS;
2049 }
2050
UnregisterHeadTrackingDataRequestedEventListener(const std::string & macAddress)2051 int32_t AudioPolicyManager::UnregisterHeadTrackingDataRequestedEventListener(const std::string &macAddress)
2052 {
2053 AUDIO_DEBUG_LOG("Start to unregister");
2054 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_HEAD_TRACKING_DATA_REQUESTED_CHANGE].mutex);
2055 if (audioPolicyClientStubCB_ != nullptr) {
2056 audioPolicyClientStubCB_->RemoveHeadTrackingDataRequestedChangeCallback(macAddress);
2057 if (audioPolicyClientStubCB_->GetHeadTrackingDataRequestedChangeCallbackSize() == 0) {
2058 callbackChangeInfos_[CALLBACK_HEAD_TRACKING_DATA_REQUESTED_CHANGE].isEnable = false;
2059 SetClientCallbacksEnable(CALLBACK_HEAD_TRACKING_DATA_REQUESTED_CHANGE, false);
2060 }
2061 }
2062 return SUCCESS;
2063 }
SetAudioDeviceRefinerCallback(const std::shared_ptr<AudioDeviceRefiner> & callback)2064 int32_t AudioPolicyManager::SetAudioDeviceRefinerCallback(const std::shared_ptr<AudioDeviceRefiner> &callback)
2065 {
2066 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2067 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2068 if (callback == nullptr) {
2069 return ERR_INVALID_PARAM;
2070 };
2071
2072 std::unique_lock<std::mutex> lock(listenerStubMutex_);
2073 auto activeDistributedRoutingRoleCb = new (std::nothrow) AudioRoutingManagerListenerStub();
2074 if (activeDistributedRoutingRoleCb == nullptr) {
2075 AUDIO_ERR_LOG("object is nullptr");
2076 return ERROR;
2077 }
2078 activeDistributedRoutingRoleCb->SetAudioDeviceRefinerCallback(callback);
2079 sptr<IRemoteObject> object = activeDistributedRoutingRoleCb->AsObject();
2080 if (object == nullptr) {
2081 AUDIO_ERR_LOG("listenerStub is nullptr");
2082 delete activeDistributedRoutingRoleCb;
2083 return ERROR;
2084 }
2085
2086 return gsp->SetAudioDeviceRefinerCallback(object);
2087 }
2088
UnsetAudioDeviceRefinerCallback()2089 int32_t AudioPolicyManager::UnsetAudioDeviceRefinerCallback()
2090 {
2091 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2092 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2093 return gsp->UnsetAudioDeviceRefinerCallback();
2094 }
2095
TriggerFetchDevice(AudioStreamDeviceChangeReasonExt reason)2096 int32_t AudioPolicyManager::TriggerFetchDevice(AudioStreamDeviceChangeReasonExt reason)
2097 {
2098 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2099 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2100 return gsp->TriggerFetchDevice(reason);
2101 }
2102
GetInstance()2103 AudioPolicyManager& AudioPolicyManager::GetInstance()
2104 {
2105 static AudioPolicyManager policyManager;
2106 return policyManager;
2107 }
2108
MoveToNewPipe(const uint32_t sessionId,const AudioPipeType pipeType)2109 int32_t AudioPolicyManager::MoveToNewPipe(const uint32_t sessionId, const AudioPipeType pipeType)
2110 {
2111 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2112 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2113 return gsp->MoveToNewPipe(sessionId, pipeType);
2114 }
SetAudioConcurrencyCallback(const uint32_t sessionID,const std::shared_ptr<AudioConcurrencyCallback> & callback)2115 int32_t AudioPolicyManager::SetAudioConcurrencyCallback(const uint32_t sessionID,
2116 const std::shared_ptr<AudioConcurrencyCallback> &callback)
2117 {
2118 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2119 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2120 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
2121
2122 sptr<AudioConcurrencyStateListenerStub> listener = new(std::nothrow) AudioConcurrencyStateListenerStub();
2123 CHECK_AND_RETURN_RET_LOG(listener != nullptr, ERROR, "object null");
2124 listener->SetConcurrencyCallback(callback);
2125
2126 sptr<IRemoteObject> object = listener->AsObject();
2127 CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "listenerStub->AsObject is nullptr.");
2128
2129 return gsp->SetAudioConcurrencyCallback(sessionID, object);
2130 }
2131
UnsetAudioConcurrencyCallback(const uint32_t sessionID)2132 int32_t AudioPolicyManager::UnsetAudioConcurrencyCallback(const uint32_t sessionID)
2133 {
2134 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2135 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2136 return gsp->UnsetAudioConcurrencyCallback(sessionID);
2137 }
2138
ActivateAudioConcurrency(const AudioPipeType & pipeType)2139 int32_t AudioPolicyManager::ActivateAudioConcurrency(const AudioPipeType &pipeType)
2140 {
2141 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2142 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2143 return gsp->ActivateAudioConcurrency(pipeType);
2144 }
2145
InjectInterruption(const std::string networkId,InterruptEvent & event)2146 int32_t AudioPolicyManager::InjectInterruption(const std::string networkId, InterruptEvent &event)
2147 {
2148 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2149 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2150 return gsp->InjectInterruption(networkId, event);
2151 }
2152
SetDefaultOutputDevice(const DeviceType deviceType,const uint32_t sessionID,const StreamUsage streamUsage,bool isRunning)2153 int32_t AudioPolicyManager::SetDefaultOutputDevice(const DeviceType deviceType, const uint32_t sessionID,
2154 const StreamUsage streamUsage, bool isRunning)
2155 {
2156 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2157 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2158 return gsp->SetDefaultOutputDevice(deviceType, sessionID, streamUsage, isRunning);
2159 }
2160
LoadSplitModule(const std::string & splitArgs,const std::string & networkId)2161 int32_t AudioPolicyManager::LoadSplitModule(const std::string &splitArgs, const std::string &networkId)
2162 {
2163 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2164 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2165 return gsp->LoadSplitModule(splitArgs, networkId);
2166 }
2167
SetVoiceRingtoneMute(bool isMute)2168 int32_t AudioPolicyManager::SetVoiceRingtoneMute(bool isMute)
2169 {
2170 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2171 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2172 return gsp->SetVoiceRingtoneMute(isMute);
2173 }
2174 } // namespace AudioStandard
2175 } // namespace OHOS
2176