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 std::unordered_map<int32_t, sptr<AudioClientTrackerCallbackStub>> AudioPolicyManager::clientTrackerStubMap_;
43
RegisterDeathRecipientInner(sptr<IRemoteObject> object)44 inline bool RegisterDeathRecipientInner(sptr<IRemoteObject> object)
45 {
46 pid_t pid = 0;
47 sptr<AudioServerDeathRecipient> deathRecipient = new(std::nothrow) AudioServerDeathRecipient(pid);
48 CHECK_AND_RETURN_RET_LOG(deathRecipient != nullptr, false, "deathRecipient is null");
49 deathRecipient->SetNotifyCb(
50 [] (pid_t pid) { AudioPolicyManager::AudioPolicyServerDied(pid); });
51 AUDIO_DEBUG_LOG("Register audio policy server death recipient");
52 CHECK_AND_RETURN_RET_LOG(object->AddDeathRecipient(deathRecipient), false, "AddDeathRecipient failed");
53 return true;
54 }
55
GetAudioPolicyProxyFromSamgr()56 inline sptr<IAudioPolicy> GetAudioPolicyProxyFromSamgr()
57 {
58 auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
59 CHECK_AND_RETURN_RET_LOG(samgr != nullptr, nullptr, "samgr init failed.");
60 sptr<IRemoteObject> object = samgr->GetSystemAbility(AUDIO_POLICY_SERVICE_ID);
61 CHECK_AND_RETURN_RET_LOG(object != nullptr, nullptr, "Object is NULL.");
62 sptr<IAudioPolicy> apProxy = iface_cast<IAudioPolicy>(object);
63 CHECK_AND_RETURN_RET_LOG(apProxy != nullptr, nullptr, "Init apProxy is NULL.");
64 return apProxy;
65 }
66
GetAudioPolicyManagerProxy()67 const sptr<IAudioPolicy> AudioPolicyManager::GetAudioPolicyManagerProxy()
68 {
69 AUDIO_DEBUG_LOG("In");
70 lock_guard<mutex> lock(g_apProxyMutex);
71
72 if (g_apProxy != nullptr) {
73 return g_apProxy;
74 }
75
76 sptr<IAudioPolicy> gsp = GetAudioPolicyProxyFromSamgr();
77 CHECK_AND_RETURN_RET_LOG(gsp, nullptr, "gsp is null");
78
79 AUDIO_DEBUG_LOG("Init g_apProxy is assigned.");
80
81 if (RegisterDeathRecipientInner(gsp->AsObject())) {
82 g_apProxy = gsp;
83 }
84
85 return gsp;
86 }
87
RecoverAndGetAudioPolicyManagerProxy()88 static const sptr<IAudioPolicy> RecoverAndGetAudioPolicyManagerProxy()
89 {
90 AUDIO_DEBUG_LOG("In");
91 lock_guard<mutex> lock(g_apProxyMutex);
92 if (g_apProxy != nullptr) {
93 sptr<IRemoteObject> object = g_apProxy->AsObject();
94 if (object != nullptr && !object->IsObjectDead()) {
95 AUDIO_INFO_LOG("direct return g_apProxy");
96 return g_apProxy;
97 }
98 }
99
100 sptr<IAudioPolicy> gsp = GetAudioPolicyProxyFromSamgr();
101 CHECK_AND_RETURN_RET_LOG(gsp, nullptr, "gsp is null");
102
103 AUDIO_DEBUG_LOG("Init g_apProxy is assigned.");
104 CHECK_AND_RETURN_RET_LOG(RegisterDeathRecipientInner(gsp->AsObject()), nullptr, "RegisterDeathRecipient failed");
105
106 g_apProxy = gsp;
107 return gsp;
108 }
109
RegisterPolicyCallbackClientFunc(const sptr<IAudioPolicy> & gsp)110 int32_t AudioPolicyManager::RegisterPolicyCallbackClientFunc(const sptr<IAudioPolicy> &gsp)
111 {
112 AudioXCollie audioXCollie("AudioPolicyManager::RegisterPolicyCallbackClientFunc", TIME_OUT_SECONDS);
113 std::unique_lock<std::mutex> lock(registerCallbackMutex_);
114 if (audioPolicyClientStubCB_ == nullptr) {
115 audioPolicyClientStubCB_ = new(std::nothrow) AudioPolicyClientStubImpl();
116 }
117 sptr<IRemoteObject> object = audioPolicyClientStubCB_->AsObject();
118 if (object == nullptr) {
119 AUDIO_ERR_LOG("audioPolicyClientStubCB_->AsObject is nullptr");
120 lock.unlock();
121 return ERROR;
122 }
123 lock.unlock();
124
125 int32_t ret = gsp->RegisterPolicyCallbackClient(object);
126 if (ret == SUCCESS) {
127 isAudioPolicyClientRegisted_ = true;
128 }
129 return ret;
130 }
131
RecoverAudioPolicyCallbackClient()132 void AudioPolicyManager::RecoverAudioPolicyCallbackClient()
133 {
134 std::unique_lock<std::mutex> lock(registerCallbackMutex_);
135 if (audioPolicyClientStubCB_ == nullptr) {
136 AUDIO_ERR_LOG("audioPolicyClientStubCB_ is null.");
137 return;
138 }
139 lock.unlock();
140
141 int32_t retry = RETRY_TIMES;
142 sptr<IAudioPolicy> gsp = nullptr;
143 while (retry--) {
144 // Sleep and wait for 1 second;
145 sleep(SLEEP_TIME);
146 gsp = RecoverAndGetAudioPolicyManagerProxy();
147 if (gsp != nullptr) {
148 AUDIO_INFO_LOG("Reconnect audio policy service success!");
149 break;
150 }
151 if (retry == 0) {
152 AUDIO_WARNING_LOG("Reconnect audio policy service %{public}d times, sleep ", RETRY_TIMES);
153 std::this_thread::sleep_for(SLEEP_TIMES_RETYT_FAILED);
154 retry = RETRY_TIMES;
155 }
156 }
157
158 CHECK_AND_RETURN_LOG(gsp != nullptr, "Reconnect audio policy service fail!");
159
160 sptr<IRemoteObject> object = audioPolicyClientStubCB_->AsObject();
161 if (object == nullptr) {
162 AUDIO_ERR_LOG("RegisterPolicyCallbackClientFunc: audioPolicyClientStubCB_->AsObject is nullptr");
163 return;
164 }
165
166 gsp->RegisterPolicyCallbackClient(object);
167 if (audioPolicyClientStubCB_->HasMicStateChangeCallback()) {
168 AUDIO_INFO_LOG("RecoverAudioPolicyCallbackClient has micStateChangeCallback");
169 gsp->SetClientCallbacksEnable(CALLBACK_MICMUTE_STATE_CHANGE, true);
170 }
171
172 for (auto enumIndex : CALLBACK_ENUMS) {
173 auto &[mutex, isEnable] = callbackChangeInfos_[enumIndex];
174 std::lock_guard<std::mutex> lock(mutex);
175 if (isEnable) {
176 gsp->SetClientCallbacksEnable(enumIndex, true);
177 }
178 }
179 }
180
AudioPolicyServerDied(pid_t pid)181 void AudioPolicyManager::AudioPolicyServerDied(pid_t pid)
182 {
183 GetInstance().ResetClientTrackerStubMap();
184 {
185 std::lock_guard<std::mutex> lockCbMap(g_cBMapMutex);
186 AUDIO_INFO_LOG("Audio policy server died: reestablish connection");
187 std::shared_ptr<AudioRendererPolicyServiceDiedCallback> cb;
188 for (auto it = rendererCBMap_.begin(); it != rendererCBMap_.end(); ++it) {
189 cb = it->second.lock();
190 if (cb != nullptr) {
191 cb->OnAudioPolicyServiceDied();
192 }
193 }
194 }
195 {
196 std::lock_guard<std::mutex> lock(g_apProxyMutex);
197 if (g_apProxy != nullptr) {
198 sptr<IRemoteObject> object = g_apProxy->AsObject();
199 if (object == nullptr || object->IsObjectDead()) {
200 AUDIO_INFO_LOG("assign g_apProxy to nullptr");
201 g_apProxy = nullptr;
202 }
203 }
204 }
205 GetInstance().RecoverAudioPolicyCallbackClient();
206
207 {
208 std::lock_guard<std::mutex> lockCbMap(g_cBDiedMapMutex);
209 if (audioStreamCBMap_.size() != 0) {
210 for (auto it = audioStreamCBMap_.begin(); it != audioStreamCBMap_.end();) {
211 auto cb = (*it).lock();
212 if (cb == nullptr) {
213 it = audioStreamCBMap_.erase(it);
214 continue;
215 }
216 cb->OnAudioPolicyServiceDied();
217 ++it;
218 }
219 }
220 }
221 }
222
GetMaxVolumeLevel(AudioVolumeType volumeType)223 int32_t AudioPolicyManager::GetMaxVolumeLevel(AudioVolumeType volumeType)
224 {
225 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
226 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
227
228 return gsp->GetMaxVolumeLevel(volumeType);
229 }
230
GetMinVolumeLevel(AudioVolumeType volumeType)231 int32_t AudioPolicyManager::GetMinVolumeLevel(AudioVolumeType volumeType)
232 {
233 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
234 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
235
236 return gsp->GetMinVolumeLevel(volumeType);
237 }
238
SetSystemVolumeLevel(AudioVolumeType volumeType,int32_t volumeLevel,bool isLegacy,int32_t volumeFlag)239 int32_t AudioPolicyManager::SetSystemVolumeLevel(AudioVolumeType volumeType, int32_t volumeLevel, bool isLegacy,
240 int32_t volumeFlag)
241 {
242 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
243 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
244
245 if (isLegacy) {
246 return gsp->SetSystemVolumeLevelLegacy(volumeType, volumeLevel);
247 }
248 return gsp->SetSystemVolumeLevel(volumeType, volumeLevel, volumeFlag);
249 }
250
SetRingerModeLegacy(AudioRingerMode ringMode)251 int32_t AudioPolicyManager::SetRingerModeLegacy(AudioRingerMode ringMode)
252 {
253 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
254 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
255 return gsp->SetRingerModeLegacy(ringMode);
256 }
257
SetRingerMode(AudioRingerMode ringMode)258 int32_t AudioPolicyManager::SetRingerMode(AudioRingerMode ringMode)
259 {
260 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
261 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
262 return gsp->SetRingerMode(ringMode);
263 }
264
GetRingerMode()265 AudioRingerMode AudioPolicyManager::GetRingerMode()
266 {
267 AudioXCollie audioXCollie("AudioPolicyManager::GetRingerMode", TIME_OUT_SECONDS);
268 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
269 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, RINGER_MODE_NORMAL, "audio policy manager proxy is NULL.");
270 return gsp->GetRingerMode();
271 }
272
SetAudioScene(AudioScene scene)273 int32_t AudioPolicyManager::SetAudioScene(AudioScene scene)
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->SetAudioScene(scene);
278 }
279
SetMicrophoneMute(bool isMute)280 int32_t AudioPolicyManager::SetMicrophoneMute(bool isMute)
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->SetMicrophoneMute(isMute);
285 }
286
SetMicrophoneMuteAudioConfig(bool isMute)287 int32_t AudioPolicyManager::SetMicrophoneMuteAudioConfig(bool isMute)
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->SetMicrophoneMuteAudioConfig(isMute);
292 }
293
SetMicrophoneMutePersistent(const bool isMute,const PolicyType type)294 int32_t AudioPolicyManager::SetMicrophoneMutePersistent(const bool isMute, const PolicyType type)
295 {
296 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
297 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
298 return gsp->SetMicrophoneMutePersistent(isMute, type);
299 }
300
GetPersistentMicMuteState()301 bool AudioPolicyManager::GetPersistentMicMuteState()
302 {
303 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
304 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
305 return gsp->GetPersistentMicMuteState();
306 }
307
IsMicrophoneMuteLegacy()308 bool AudioPolicyManager::IsMicrophoneMuteLegacy()
309 {
310 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
311 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
312 if (!isAudioPolicyClientRegisted_) {
313 RegisterPolicyCallbackClientFunc(gsp);
314 }
315
316 return gsp->IsMicrophoneMuteLegacy();
317 }
318
IsMicrophoneMute()319 bool AudioPolicyManager::IsMicrophoneMute()
320 {
321 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
322 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
323 if (!isAudioPolicyClientRegisted_) {
324 RegisterPolicyCallbackClientFunc(gsp);
325 }
326
327 return gsp->IsMicrophoneMute();
328 }
329
GetAudioScene()330 AudioScene AudioPolicyManager::GetAudioScene()
331 {
332 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
333 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, AUDIO_SCENE_DEFAULT, "audio policy manager proxy is NULL.");
334 return gsp->GetAudioScene();
335 }
336
GetSystemActiveVolumeType(const int32_t clientUid)337 AudioStreamType AudioPolicyManager::GetSystemActiveVolumeType(const int32_t clientUid)
338 {
339 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
340 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, STREAM_DEFAULT, "audio policy manager proxy is NULL.");
341 return gsp->GetSystemActiveVolumeType(clientUid);
342 }
343
GetSystemVolumeLevel(AudioVolumeType volumeType)344 int32_t AudioPolicyManager::GetSystemVolumeLevel(AudioVolumeType volumeType)
345 {
346 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
347 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
348 return gsp->GetSystemVolumeLevel(volumeType);
349 }
350
SetStreamMute(AudioVolumeType volumeType,bool mute,bool isLegacy)351 int32_t AudioPolicyManager::SetStreamMute(AudioVolumeType volumeType, bool mute, bool isLegacy)
352 {
353 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
354 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
355 if (isLegacy) {
356 return gsp->SetStreamMuteLegacy(volumeType, mute);
357 }
358 return gsp->SetStreamMute(volumeType, mute);
359 }
360
GetStreamMute(AudioVolumeType volumeType)361 bool AudioPolicyManager::GetStreamMute(AudioVolumeType volumeType)
362 {
363 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
364 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
365 return gsp->GetStreamMute(volumeType);
366 }
367
SetLowPowerVolume(int32_t streamId,float volume)368 int32_t AudioPolicyManager::SetLowPowerVolume(int32_t streamId, float volume)
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->SetLowPowerVolume(streamId, volume);
373 }
374
GetLowPowerVolume(int32_t streamId)375 float AudioPolicyManager::GetLowPowerVolume(int32_t streamId)
376 {
377 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
378 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
379 return gsp->GetLowPowerVolume(streamId);
380 }
381
GetSingleStreamVolume(int32_t streamId)382 float AudioPolicyManager::GetSingleStreamVolume(int32_t streamId)
383 {
384 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
385 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
386 return gsp->GetSingleStreamVolume(streamId);
387 }
388
IsStreamActive(AudioVolumeType volumeType)389 bool AudioPolicyManager::IsStreamActive(AudioVolumeType volumeType)
390 {
391 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
392 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
393 return gsp->IsStreamActive(volumeType);
394 }
395
SelectOutputDevice(sptr<AudioRendererFilter> audioRendererFilter,std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)396 int32_t AudioPolicyManager::SelectOutputDevice(sptr<AudioRendererFilter> audioRendererFilter,
397 std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)
398 {
399 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
400 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
401 return gsp->SelectOutputDevice(audioRendererFilter, audioDeviceDescriptors);
402 }
403
GetSelectedDeviceInfo(int32_t uid,int32_t pid,AudioStreamType streamType)404 std::string AudioPolicyManager::GetSelectedDeviceInfo(int32_t uid, int32_t pid, AudioStreamType streamType)
405 {
406 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
407 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, "", "audio policy manager proxy is NULL.");
408 return gsp->GetSelectedDeviceInfo(uid, pid, streamType);
409 }
410
SelectInputDevice(sptr<AudioCapturerFilter> audioCapturerFilter,std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)411 int32_t AudioPolicyManager::SelectInputDevice(sptr<AudioCapturerFilter> audioCapturerFilter,
412 std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)
413 {
414 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
415 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
416 return gsp->SelectInputDevice(audioCapturerFilter, audioDeviceDescriptors);
417 }
418
GetDevices(DeviceFlag deviceFlag)419 std::vector<sptr<AudioDeviceDescriptor>> AudioPolicyManager::GetDevices(DeviceFlag deviceFlag)
420 {
421 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
422 if (gsp == nullptr) {
423 AUDIO_ERR_LOG("GetDevices: audio policy manager proxy is NULL.");
424 std::vector<sptr<AudioDeviceDescriptor>> deviceInfo;
425 return deviceInfo;
426 }
427 return gsp->GetDevices(deviceFlag);
428 }
429
GetDevicesInner(DeviceFlag deviceFlag)430 std::vector<sptr<AudioDeviceDescriptor>> AudioPolicyManager::GetDevicesInner(DeviceFlag deviceFlag)
431 {
432 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
433 if (gsp == nullptr) {
434 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
435 std::vector<sptr<AudioDeviceDescriptor>> deviceInfo;
436 return deviceInfo;
437 }
438 return gsp->GetDevicesInner(deviceFlag);
439 }
440
GetPreferredOutputDeviceDescriptors(AudioRendererInfo & rendererInfo)441 std::vector<sptr<AudioDeviceDescriptor>> AudioPolicyManager::GetPreferredOutputDeviceDescriptors(
442 AudioRendererInfo &rendererInfo)
443 {
444 AudioXCollie audioXCollie("AudioPolicyManager::GetPreferredOutputDeviceDescriptors", TIME_OUT_SECONDS);
445 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
446 if (gsp == nullptr) {
447 AUDIO_ERR_LOG("GetPreferredOutputDeviceDescriptors: audio policy manager proxy is NULL.");
448 std::vector<sptr<AudioDeviceDescriptor>> deviceInfo;
449 return deviceInfo;
450 }
451 return gsp->GetPreferredOutputDeviceDescriptors(rendererInfo);
452 }
453
GetPreferredInputDeviceDescriptors(AudioCapturerInfo & captureInfo)454 std::vector<sptr<AudioDeviceDescriptor>> AudioPolicyManager::GetPreferredInputDeviceDescriptors(
455 AudioCapturerInfo &captureInfo)
456 {
457 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
458 if (gsp == nullptr) {
459 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
460 std::vector<sptr<AudioDeviceDescriptor>> deviceInfo;
461 return deviceInfo;
462 }
463 return gsp->GetPreferredInputDeviceDescriptors(captureInfo);
464 }
465
GetAudioFocusInfoList(std::list<std::pair<AudioInterrupt,AudioFocuState>> & focusInfoList,const int32_t zoneID)466 int32_t AudioPolicyManager::GetAudioFocusInfoList(std::list<std::pair<AudioInterrupt, AudioFocuState>> &focusInfoList,
467 const int32_t zoneID)
468 {
469 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
470 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
471 return gsp->GetAudioFocusInfoList(focusInfoList, zoneID);
472 }
473
SetClientCallbacksEnable(const CallbackChange & callbackchange,const bool & enable)474 int32_t AudioPolicyManager::SetClientCallbacksEnable(const CallbackChange &callbackchange, const bool &enable)
475 {
476 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
477 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
478 return gsp->SetClientCallbacksEnable(callbackchange, enable);
479 }
480
RegisterFocusInfoChangeCallback(const int32_t clientId,const std::shared_ptr<AudioFocusInfoChangeCallback> & callback)481 int32_t AudioPolicyManager::RegisterFocusInfoChangeCallback(const int32_t clientId,
482 const std::shared_ptr<AudioFocusInfoChangeCallback> &callback)
483 {
484 AUDIO_DEBUG_LOG("AudioPolicyManager::RegisterFocusInfoChangeCallback");
485 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM,
486 "RegisterFocusInfoChangeCallback: callback is nullptr");
487
488 if (!isAudioPolicyClientRegisted_) {
489 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
490 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
491 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
492 if (ret != SUCCESS) {
493 return ret;
494 }
495 }
496
497 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_FOCUS_INFO_CHANGE].mutex);
498 audioPolicyClientStubCB_->AddFocusInfoChangeCallback(callback);
499 size_t callbackSize = audioPolicyClientStubCB_->GetFocusInfoChangeCallbackSize();
500 if (callbackSize == 1) {
501 callbackChangeInfos_[CALLBACK_FOCUS_INFO_CHANGE].isEnable = true;
502 SetClientCallbacksEnable(CALLBACK_FOCUS_INFO_CHANGE, true);
503 }
504
505 return SUCCESS;
506 }
507
UnregisterFocusInfoChangeCallback(const int32_t clientId)508 int32_t AudioPolicyManager::UnregisterFocusInfoChangeCallback(const int32_t clientId)
509 {
510 AUDIO_DEBUG_LOG("AudioPolicyManager::UnregisterFocusInfoChangeCallback");
511 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_FOCUS_INFO_CHANGE].mutex);
512 if (audioPolicyClientStubCB_ != nullptr) {
513 audioPolicyClientStubCB_->RemoveFocusInfoChangeCallback();
514 if (audioPolicyClientStubCB_->GetFocusInfoChangeCallbackSize() == 0) {
515 callbackChangeInfos_[CALLBACK_FOCUS_INFO_CHANGE].isEnable = false;
516 SetClientCallbacksEnable(CALLBACK_FOCUS_INFO_CHANGE, false);
517 }
518 }
519 return SUCCESS;
520 }
521
522 #ifdef FEATURE_DTMF_TONE
GetSupportedTones()523 std::vector<int32_t> AudioPolicyManager::GetSupportedTones()
524 {
525 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
526 if (gsp == nullptr) {
527 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
528 std::vector<int> lSupportedToneList = {};
529 return lSupportedToneList;
530 }
531 return gsp->GetSupportedTones();
532 }
533
GetToneConfig(int32_t ltonetype)534 std::shared_ptr<ToneInfo> AudioPolicyManager::GetToneConfig(int32_t ltonetype)
535 {
536 AUDIO_DEBUG_LOG("AudioPolicyManager::GetToneConfig");
537
538 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
539 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, nullptr, "audio policy manager proxy is NULL.");
540 return gsp->GetToneConfig(ltonetype);
541 }
542 #endif
543
SetDeviceActive(InternalDeviceType deviceType,bool active)544 int32_t AudioPolicyManager::SetDeviceActive(InternalDeviceType deviceType, bool active)
545 {
546 AUDIO_INFO_LOG("SetDeviceActive deviceType: %{public}d, active: %{public}d", deviceType, active);
547 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
548 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
549 return gsp->SetDeviceActive(deviceType, active);
550 }
551
IsDeviceActive(InternalDeviceType deviceType)552 bool AudioPolicyManager::IsDeviceActive(InternalDeviceType deviceType)
553 {
554 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
555 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
556 return gsp->IsDeviceActive(deviceType);
557 }
558
GetActiveOutputDevice()559 DeviceType AudioPolicyManager::GetActiveOutputDevice()
560 {
561 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
562 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, DEVICE_TYPE_INVALID, "audio policy manager proxy is NULL.");
563 return gsp->GetActiveOutputDevice();
564 }
565
GetActiveInputDevice()566 DeviceType AudioPolicyManager::GetActiveInputDevice()
567 {
568 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
569 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, DEVICE_TYPE_INVALID, "audio policy manager proxy is NULL.");
570 return gsp->GetActiveInputDevice();
571 }
572
SetRingerModeCallback(const int32_t clientId,const std::shared_ptr<AudioRingerModeCallback> & callback,API_VERSION api_v)573 int32_t AudioPolicyManager::SetRingerModeCallback(const int32_t clientId,
574 const std::shared_ptr<AudioRingerModeCallback> &callback, API_VERSION api_v)
575 {
576 AUDIO_DEBUG_LOG("AudioPolicyManager::SetRingerModeCallback");
577 if (api_v == API_8 && !PermissionUtil::VerifySystemPermission()) {
578 AUDIO_ERR_LOG("SetRingerModeCallback: No system permission");
579 return ERR_PERMISSION_DENIED;
580 }
581
582 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
583
584 if (!isAudioPolicyClientRegisted_) {
585 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
586 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
587 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
588 if (ret != SUCCESS) {
589 return ret;
590 }
591 }
592 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_RINGER_MODE].mutex);
593 if (audioPolicyClientStubCB_ != nullptr) {
594 audioPolicyClientStubCB_->AddRingerModeCallback(callback);
595 size_t callbackSize = audioPolicyClientStubCB_->GetRingerModeCallbackSize();
596 if (callbackSize == 1) {
597 callbackChangeInfos_[CALLBACK_SET_RINGER_MODE].isEnable = true;
598 SetClientCallbacksEnable(CALLBACK_SET_RINGER_MODE, true);
599 }
600 }
601 return SUCCESS;
602 }
603
UnsetRingerModeCallback(const int32_t clientId)604 int32_t AudioPolicyManager::UnsetRingerModeCallback(const int32_t clientId)
605 {
606 AUDIO_DEBUG_LOG("Remove all ringer mode callbacks");
607 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_RINGER_MODE].mutex);
608 if (audioPolicyClientStubCB_ != nullptr) {
609 audioPolicyClientStubCB_->RemoveRingerModeCallback();
610 if (audioPolicyClientStubCB_->GetRingerModeCallbackSize() == 0) {
611 callbackChangeInfos_[CALLBACK_SET_RINGER_MODE].isEnable = false;
612 SetClientCallbacksEnable(CALLBACK_SET_RINGER_MODE, false);
613 }
614 }
615 return SUCCESS;
616 }
617
UnsetRingerModeCallback(const int32_t clientId,const std::shared_ptr<AudioRingerModeCallback> & callback)618 int32_t AudioPolicyManager::UnsetRingerModeCallback(const int32_t clientId,
619 const std::shared_ptr<AudioRingerModeCallback> &callback)
620 {
621 AUDIO_DEBUG_LOG("Remove one ringer mode callback");
622 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_RINGER_MODE].mutex);
623 if (audioPolicyClientStubCB_ != nullptr) {
624 audioPolicyClientStubCB_->RemoveRingerModeCallback(callback);
625 if (audioPolicyClientStubCB_->GetRingerModeCallbackSize() == 0) {
626 callbackChangeInfos_[CALLBACK_SET_RINGER_MODE].isEnable = false;
627 SetClientCallbacksEnable(CALLBACK_SET_RINGER_MODE, false);
628 }
629 }
630 return SUCCESS;
631 }
632
SetDeviceChangeCallback(const int32_t clientId,const DeviceFlag flag,const std::shared_ptr<AudioManagerDeviceChangeCallback> & callback)633 int32_t AudioPolicyManager::SetDeviceChangeCallback(const int32_t clientId, const DeviceFlag flag,
634 const std::shared_ptr<AudioManagerDeviceChangeCallback> &callback)
635 {
636 AUDIO_DEBUG_LOG("AudioPolicyManager::SetDeviceChangeCallback");
637 bool hasSystemPermission = PermissionUtil::VerifySystemPermission();
638 switch (flag) {
639 case NONE_DEVICES_FLAG:
640 case DISTRIBUTED_OUTPUT_DEVICES_FLAG:
641 case DISTRIBUTED_INPUT_DEVICES_FLAG:
642 case ALL_DISTRIBUTED_DEVICES_FLAG:
643 case ALL_L_D_DEVICES_FLAG:
644 if (!hasSystemPermission) {
645 AUDIO_ERR_LOG("SetDeviceChangeCallback: No system permission");
646 return ERR_PERMISSION_DENIED;
647 }
648 break;
649 default:
650 break;
651 }
652
653 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "SetDeviceChangeCallback: callback is nullptr");
654
655 if (!isAudioPolicyClientRegisted_) {
656 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
657 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
658 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
659 if (ret != SUCCESS) {
660 return ret;
661 }
662 }
663
664 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_DEVICE_CHANGE].mutex);
665 if (audioPolicyClientStubCB_ != nullptr) {
666 audioPolicyClientStubCB_->AddDeviceChangeCallback(flag, callback);
667 size_t callbackSize = audioPolicyClientStubCB_->GetDeviceChangeCallbackSize();
668 if (callbackSize == 1) {
669 callbackChangeInfos_[CALLBACK_SET_DEVICE_CHANGE].isEnable = true;
670 SetClientCallbacksEnable(CALLBACK_SET_DEVICE_CHANGE, true);
671 }
672 }
673 return SUCCESS;
674 }
675
SetMicrophoneBlockedCallback(const int32_t clientId,const std::shared_ptr<AudioManagerMicrophoneBlockedCallback> & callback)676 int32_t AudioPolicyManager::SetMicrophoneBlockedCallback(const int32_t clientId,
677 const std::shared_ptr<AudioManagerMicrophoneBlockedCallback> &callback)
678 {
679 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
680 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
681 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM,
682 "SetMicrophoneBlockedCallback: callback is nullptr");
683 if (!isAudioPolicyClientRegisted_) {
684 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
685 if (ret != SUCCESS) {
686 return ret;
687 }
688 }
689 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_MICROPHONE_BLOCKED].mutex);
690 if (audioPolicyClientStubCB_ != nullptr) {
691 audioPolicyClientStubCB_->AddMicrophoneBlockedCallback(clientId, callback);
692 size_t callbackSize = audioPolicyClientStubCB_->GetMicrophoneBlockedCallbackSize();
693 if (callbackSize == 1) {
694 callbackChangeInfos_[CALLBACK_SET_MICROPHONE_BLOCKED].isEnable = true;
695 SetClientCallbacksEnable(CALLBACK_SET_MICROPHONE_BLOCKED, true);
696 }
697 }
698 return SUCCESS;
699 }
700
UnsetDeviceChangeCallback(const int32_t clientId,DeviceFlag flag,std::shared_ptr<AudioManagerDeviceChangeCallback> & cb)701 int32_t AudioPolicyManager::UnsetDeviceChangeCallback(const int32_t clientId, DeviceFlag flag,
702 std::shared_ptr<AudioManagerDeviceChangeCallback> &cb)
703 {
704 AUDIO_DEBUG_LOG("AudioPolicyManager::UnsetDeviceChangeCallback");
705 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_DEVICE_CHANGE].mutex);
706 if (audioPolicyClientStubCB_ != nullptr) {
707 audioPolicyClientStubCB_->RemoveDeviceChangeCallback(flag, cb);
708 if (audioPolicyClientStubCB_->GetDeviceChangeCallbackSize() == 0) {
709 callbackChangeInfos_[CALLBACK_SET_DEVICE_CHANGE].isEnable = false;
710 SetClientCallbacksEnable(CALLBACK_SET_DEVICE_CHANGE, false);
711 }
712 }
713 return SUCCESS;
714 }
715
SetPreferredOutputDeviceChangeCallback(const int32_t clientId,const std::shared_ptr<AudioPreferredOutputDeviceChangeCallback> & callback)716 int32_t AudioPolicyManager::SetPreferredOutputDeviceChangeCallback(const int32_t clientId,
717 const std::shared_ptr<AudioPreferredOutputDeviceChangeCallback> &callback)
718 {
719 AUDIO_DEBUG_LOG("AudioPolicyManager::SetPreferredOutputDeviceChangeCallback");
720 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
721
722 if (!isAudioPolicyClientRegisted_) {
723 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
724 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
725 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
726 if (ret != SUCCESS) {
727 return ret;
728 }
729 }
730
731 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_PREFERRED_OUTPUT_DEVICE_CHANGE].mutex);
732 if (audioPolicyClientStubCB_ != nullptr) {
733 audioPolicyClientStubCB_->AddPreferredOutputDeviceChangeCallback(callback);
734 size_t callbackSize = audioPolicyClientStubCB_->GetPreferredOutputDeviceChangeCallbackSize();
735 if (callbackSize == 1) {
736 callbackChangeInfos_[CALLBACK_PREFERRED_OUTPUT_DEVICE_CHANGE].isEnable = true;
737 SetClientCallbacksEnable(CALLBACK_PREFERRED_OUTPUT_DEVICE_CHANGE, true);
738 }
739 }
740 return SUCCESS;
741 }
742
SetPreferredInputDeviceChangeCallback(const std::shared_ptr<AudioPreferredInputDeviceChangeCallback> & callback)743 int32_t AudioPolicyManager::SetPreferredInputDeviceChangeCallback(
744 const std::shared_ptr<AudioPreferredInputDeviceChangeCallback> &callback)
745 {
746 AUDIO_DEBUG_LOG("AudioPolicyManager::SetPreferredInputDeviceChangeCallback");
747 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
748
749 if (!isAudioPolicyClientRegisted_) {
750 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
751 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
752 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
753 if (ret != SUCCESS) {
754 return ret;
755 }
756 }
757
758 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_PREFERRED_INPUT_DEVICE_CHANGE].mutex);
759 if (audioPolicyClientStubCB_ != nullptr) {
760 audioPolicyClientStubCB_->AddPreferredInputDeviceChangeCallback(callback);
761 size_t callbackSize = audioPolicyClientStubCB_->GetPreferredInputDeviceChangeCallbackSize();
762 if (callbackSize == 1) {
763 callbackChangeInfos_[CALLBACK_PREFERRED_INPUT_DEVICE_CHANGE].isEnable = true;
764 SetClientCallbacksEnable(CALLBACK_PREFERRED_INPUT_DEVICE_CHANGE, true);
765 }
766 }
767 return SUCCESS;
768 }
769
UnsetPreferredOutputDeviceChangeCallback(const int32_t clientId)770 int32_t AudioPolicyManager::UnsetPreferredOutputDeviceChangeCallback(const int32_t clientId)
771 {
772 AUDIO_DEBUG_LOG("AudioPolicyManager::UnsetPreferredOutputDeviceChangeCallback");
773 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_PREFERRED_OUTPUT_DEVICE_CHANGE].mutex);
774 if (audioPolicyClientStubCB_ != nullptr) {
775 audioPolicyClientStubCB_->RemovePreferredOutputDeviceChangeCallback();
776 if (audioPolicyClientStubCB_->GetPreferredOutputDeviceChangeCallbackSize() == 0) {
777 callbackChangeInfos_[CALLBACK_PREFERRED_OUTPUT_DEVICE_CHANGE].isEnable = false;
778 SetClientCallbacksEnable(CALLBACK_PREFERRED_OUTPUT_DEVICE_CHANGE, false);
779 }
780 }
781 return SUCCESS;
782 }
783
UnsetPreferredInputDeviceChangeCallback()784 int32_t AudioPolicyManager::UnsetPreferredInputDeviceChangeCallback()
785 {
786 AUDIO_DEBUG_LOG("AudioPolicyManager::UnsetPreferredInputDeviceChangeCallback");
787 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_PREFERRED_INPUT_DEVICE_CHANGE].mutex);
788 if (audioPolicyClientStubCB_ != nullptr) {
789 audioPolicyClientStubCB_->RemovePreferredInputDeviceChangeCallback();
790 if (audioPolicyClientStubCB_->GetPreferredInputDeviceChangeCallbackSize() == 0) {
791 callbackChangeInfos_[CALLBACK_PREFERRED_INPUT_DEVICE_CHANGE].isEnable = false;
792 SetClientCallbacksEnable(CALLBACK_PREFERRED_INPUT_DEVICE_CHANGE, false);
793 }
794 }
795 return SUCCESS;
796 }
797
UnsetMicrophoneBlockedCallback(const int32_t clientId,const std::shared_ptr<AudioManagerMicrophoneBlockedCallback> & callback)798 int32_t AudioPolicyManager::UnsetMicrophoneBlockedCallback(const int32_t clientId,
799 const std::shared_ptr<AudioManagerMicrophoneBlockedCallback> &callback)
800 {
801 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_MICROPHONE_BLOCKED].mutex);
802 if (audioPolicyClientStubCB_ != nullptr) {
803 audioPolicyClientStubCB_->RemoveMicrophoneBlockedCallback(clientId, callback);
804 if (audioPolicyClientStubCB_->GetMicrophoneBlockedCallbackSize() == 0) {
805 callbackChangeInfos_[CALLBACK_SET_MICROPHONE_BLOCKED].isEnable = false;
806 SetClientCallbacksEnable(CALLBACK_SET_MICROPHONE_BLOCKED, false);
807 }
808 }
809 return SUCCESS;
810 }
811
SetMicStateChangeCallback(const int32_t clientId,const std::shared_ptr<AudioManagerMicStateChangeCallback> & callback)812 int32_t AudioPolicyManager::SetMicStateChangeCallback(const int32_t clientId,
813 const std::shared_ptr<AudioManagerMicStateChangeCallback> &callback)
814 {
815 AUDIO_DEBUG_LOG("AudioPolicyManager::SetMicStateChangeCallback");
816 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
817
818 if (!isAudioPolicyClientRegisted_) {
819 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
820 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
821 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
822 if (ret != SUCCESS) {
823 return ret;
824 }
825 }
826
827 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_MIC_STATE_CHANGE].mutex);
828 if (audioPolicyClientStubCB_ != nullptr) {
829 audioPolicyClientStubCB_->AddMicStateChangeCallback(callback);
830 size_t callbackSize = audioPolicyClientStubCB_->GetMicStateChangeCallbackSize();
831 if (callbackSize == 1) {
832 callbackChangeInfos_[CALLBACK_SET_MIC_STATE_CHANGE].isEnable = true;
833 SetClientCallbacksEnable(CALLBACK_SET_MIC_STATE_CHANGE, true);
834 }
835 }
836 return SUCCESS;
837 }
838
UnsetMicStateChangeCallback(const std::shared_ptr<AudioManagerMicStateChangeCallback> & callback)839 int32_t AudioPolicyManager::UnsetMicStateChangeCallback(
840 const std::shared_ptr<AudioManagerMicStateChangeCallback> &callback)
841 {
842 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
843 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
844 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
845 CHECK_AND_RETURN_RET_LOG(audioPolicyClientStubCB_ != nullptr, ERR_INVALID_OPERATION,
846 "audioPolicyClientStubCB is nullptr");
847 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_MIC_STATE_CHANGE].mutex);
848 if (audioPolicyClientStubCB_ != nullptr) {
849 audioPolicyClientStubCB_->RemoveMicStateChangeCallback();
850 if (audioPolicyClientStubCB_->GetMicStateChangeCallbackSize() == 0) {
851 callbackChangeInfos_[CALLBACK_SET_MIC_STATE_CHANGE].isEnable = false;
852 SetClientCallbacksEnable(CALLBACK_SET_MIC_STATE_CHANGE, false);
853 }
854 }
855 return SUCCESS;
856 }
857
SetAudioInterruptCallback(const uint32_t sessionID,const std::shared_ptr<AudioInterruptCallback> & callback,uint32_t clientUid,const int32_t zoneID)858 int32_t AudioPolicyManager::SetAudioInterruptCallback(const uint32_t sessionID,
859 const std::shared_ptr<AudioInterruptCallback> &callback, uint32_t clientUid, const int32_t zoneID)
860 {
861 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
862 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
863 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
864
865 sptr<AudioPolicyManagerListenerStub> listener = new(std::nothrow) AudioPolicyManagerListenerStub();
866 CHECK_AND_RETURN_RET_LOG(listener != nullptr, ERROR, "object null");
867 listener->SetInterruptCallback(callback);
868
869 sptr<IRemoteObject> object = listener->AsObject();
870 CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "listenerStub->AsObject is nullptr..");
871
872 return gsp->SetAudioInterruptCallback(sessionID, object, clientUid, zoneID);
873 }
874
UnsetAudioInterruptCallback(const uint32_t sessionID,const int32_t zoneID)875 int32_t AudioPolicyManager::UnsetAudioInterruptCallback(const uint32_t sessionID, const int32_t zoneID)
876 {
877 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
878 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
879 return gsp->UnsetAudioInterruptCallback(sessionID, zoneID);
880 }
881
SetQueryClientTypeCallback(const std::shared_ptr<AudioQueryClientTypeCallback> & callback)882 int32_t AudioPolicyManager::SetQueryClientTypeCallback(const std::shared_ptr<AudioQueryClientTypeCallback> &callback)
883 {
884 AUDIO_ERR_LOG("In");
885 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
886 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
887 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
888
889 sptr<AudioPolicyManagerListenerStub> listener = new(std::nothrow) AudioPolicyManagerListenerStub();
890 CHECK_AND_RETURN_RET_LOG(listener != nullptr, ERROR, "object null");
891 listener->SetQueryClientTypeCallback(callback);
892
893 sptr<IRemoteObject> object = listener->AsObject();
894 CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "listenerStub->AsObject is nullptr.");
895
896 return gsp->SetQueryClientTypeCallback(object);
897 }
898
ActivateAudioInterrupt(const AudioInterrupt & audioInterrupt,const int32_t zoneID,const bool isUpdatedAudioStrategy)899 int32_t AudioPolicyManager::ActivateAudioInterrupt(
900 const AudioInterrupt &audioInterrupt, const int32_t zoneID, const bool isUpdatedAudioStrategy)
901 {
902 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
903 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
904 return gsp->ActivateAudioInterrupt(audioInterrupt, zoneID, isUpdatedAudioStrategy);
905 }
906
DeactivateAudioInterrupt(const AudioInterrupt & audioInterrupt,const int32_t zoneID)907 int32_t AudioPolicyManager::DeactivateAudioInterrupt(const AudioInterrupt &audioInterrupt, const int32_t zoneID)
908 {
909 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
910 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
911 return gsp->DeactivateAudioInterrupt(audioInterrupt, zoneID);
912 }
913
SetAudioManagerInterruptCallback(const int32_t clientId,const std::shared_ptr<AudioInterruptCallback> & callback)914 int32_t AudioPolicyManager::SetAudioManagerInterruptCallback(const int32_t clientId,
915 const std::shared_ptr<AudioInterruptCallback> &callback)
916 {
917 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
918 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
919 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
920
921 std::unique_lock<std::mutex> lock(listenerStubMutex_);
922 sptr<AudioPolicyManagerListenerStub> interruptListenerStub = new(std::nothrow) AudioPolicyManagerListenerStub();
923 CHECK_AND_RETURN_RET_LOG(interruptListenerStub != nullptr, ERROR, "object null");
924 interruptListenerStub->SetInterruptCallback(callback);
925
926 sptr<IRemoteObject> object = interruptListenerStub->AsObject();
927 CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "onInterruptListenerStub->AsObject is nullptr.");
928 lock.unlock();
929
930 return gsp->SetAudioManagerInterruptCallback(clientId, object);
931 }
932
UnsetAudioManagerInterruptCallback(const int32_t clientId)933 int32_t AudioPolicyManager::UnsetAudioManagerInterruptCallback(const int32_t clientId)
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->UnsetAudioManagerInterruptCallback(clientId);
938 }
939
RequestAudioFocus(const int32_t clientId,const AudioInterrupt & audioInterrupt)940 int32_t AudioPolicyManager::RequestAudioFocus(const int32_t clientId, const AudioInterrupt &audioInterrupt)
941 {
942 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
943 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
944 return gsp->RequestAudioFocus(clientId, audioInterrupt);
945 }
946
AbandonAudioFocus(const int32_t clientId,const AudioInterrupt & audioInterrupt)947 int32_t AudioPolicyManager::AbandonAudioFocus(const int32_t clientId, const AudioInterrupt &audioInterrupt)
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->AbandonAudioFocus(clientId, audioInterrupt);
952 }
953
GetStreamInFocus(const int32_t zoneID)954 AudioStreamType AudioPolicyManager::GetStreamInFocus(const int32_t zoneID)
955 {
956 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
957 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, STREAM_DEFAULT, "audio policy manager proxy is NULL.");
958 return gsp->GetStreamInFocus(zoneID);
959 }
960
GetSessionInfoInFocus(AudioInterrupt & audioInterrupt,const int32_t zoneID)961 int32_t AudioPolicyManager::GetSessionInfoInFocus(AudioInterrupt &audioInterrupt, const int32_t zoneID)
962 {
963 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
964 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
965 return gsp->GetSessionInfoInFocus(audioInterrupt, zoneID);
966 }
967
SetVolumeKeyEventCallback(const int32_t clientPid,const std::shared_ptr<VolumeKeyEventCallback> & callback,API_VERSION api_v)968 int32_t AudioPolicyManager::SetVolumeKeyEventCallback(const int32_t clientPid,
969 const std::shared_ptr<VolumeKeyEventCallback> &callback, API_VERSION api_v)
970 {
971 AUDIO_INFO_LOG("SetVolumeKeyEventCallback: client: %{public}d", clientPid);
972 if (api_v == API_8 && !PermissionUtil::VerifySystemPermission()) {
973 AUDIO_ERR_LOG("SetVolumeKeyEventCallback: No system permission");
974 return ERR_PERMISSION_DENIED;
975 }
976 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "volume back is nullptr");
977
978 if (!isAudioPolicyClientRegisted_) {
979 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
980 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
981 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
982 if (ret != SUCCESS) {
983 return ret;
984 }
985 }
986
987 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_VOLUME_KEY_EVENT].mutex);
988 if (audioPolicyClientStubCB_ != nullptr) {
989 audioPolicyClientStubCB_->AddVolumeKeyEventCallback(callback);
990 size_t callbackSize = audioPolicyClientStubCB_->GetVolumeKeyEventCallbackSize();
991 if (callbackSize == 1) {
992 callbackChangeInfos_[CALLBACK_SET_VOLUME_KEY_EVENT].isEnable = true;
993 SetClientCallbacksEnable(CALLBACK_SET_VOLUME_KEY_EVENT, true);
994 }
995 }
996 return SUCCESS;
997 }
998
UnsetVolumeKeyEventCallback(const std::shared_ptr<VolumeKeyEventCallback> & callback)999 int32_t AudioPolicyManager::UnsetVolumeKeyEventCallback(
1000 const std::shared_ptr<VolumeKeyEventCallback> &callback)
1001 {
1002 AUDIO_DEBUG_LOG("UnsetVolumeKeyEventCallback");
1003 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_VOLUME_KEY_EVENT].mutex);
1004 if (audioPolicyClientStubCB_ != nullptr) {
1005 audioPolicyClientStubCB_->RemoveVolumeKeyEventCallback(callback);
1006 if (audioPolicyClientStubCB_->GetVolumeKeyEventCallbackSize() == 0) {
1007 callbackChangeInfos_[CALLBACK_SET_VOLUME_KEY_EVENT].isEnable = false;
1008 SetClientCallbacksEnable(CALLBACK_SET_VOLUME_KEY_EVENT, false);
1009 }
1010 }
1011 return SUCCESS;
1012 }
1013
RegisterAudioRendererEventListener(const std::shared_ptr<AudioRendererStateChangeCallback> & callback)1014 int32_t AudioPolicyManager::RegisterAudioRendererEventListener(
1015 const std::shared_ptr<AudioRendererStateChangeCallback> &callback)
1016 {
1017 AUDIO_DEBUG_LOG("in");
1018 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "RendererEvent Listener callback is nullptr");
1019
1020 if (!isAudioPolicyClientRegisted_) {
1021 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1022 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1023 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
1024 if (ret != SUCCESS) {
1025 return ret;
1026 }
1027 }
1028
1029 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_RENDERER_STATE_CHANGE].mutex);
1030 audioPolicyClientStubCB_->AddRendererStateChangeCallback(callback);
1031 size_t callbackSize = audioPolicyClientStubCB_->GetRendererStateChangeCallbackSize();
1032 if (callbackSize == 1) {
1033 callbackChangeInfos_[CALLBACK_RENDERER_STATE_CHANGE].isEnable = true;
1034 SetClientCallbacksEnable(CALLBACK_RENDERER_STATE_CHANGE, true);
1035 }
1036 isAudioRendererEventListenerRegistered = true;
1037 return SUCCESS;
1038 }
1039
UnregisterAudioRendererEventListener(const std::vector<std::shared_ptr<AudioRendererStateChangeCallback>> & callbacks)1040 int32_t AudioPolicyManager::UnregisterAudioRendererEventListener(
1041 const std::vector<std::shared_ptr<AudioRendererStateChangeCallback>> &callbacks)
1042 {
1043 AUDIO_DEBUG_LOG("in");
1044 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_RENDERER_STATE_CHANGE].mutex);
1045 if ((audioPolicyClientStubCB_ != nullptr) && isAudioRendererEventListenerRegistered) {
1046 audioPolicyClientStubCB_->RemoveRendererStateChangeCallback(callbacks);
1047 if (audioPolicyClientStubCB_->GetRendererStateChangeCallbackSize() == 0) {
1048 callbackChangeInfos_[CALLBACK_RENDERER_STATE_CHANGE].isEnable = false;
1049 SetClientCallbacksEnable(CALLBACK_RENDERER_STATE_CHANGE, false);
1050 }
1051 isAudioRendererEventListenerRegistered = false;
1052 }
1053 return SUCCESS;
1054 }
1055
UnregisterAudioRendererEventListener(const std::shared_ptr<AudioRendererStateChangeCallback> & callback)1056 int32_t AudioPolicyManager::UnregisterAudioRendererEventListener(
1057 const std::shared_ptr<AudioRendererStateChangeCallback> &callback)
1058 {
1059 AUDIO_DEBUG_LOG("in");
1060 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_RENDERER_STATE_CHANGE].mutex);
1061 if ((audioPolicyClientStubCB_ != nullptr) && isAudioRendererEventListenerRegistered) {
1062 audioPolicyClientStubCB_->RemoveRendererStateChangeCallback(callback);
1063 if (audioPolicyClientStubCB_->GetRendererStateChangeCallbackSize() == 0) {
1064 callbackChangeInfos_[CALLBACK_RENDERER_STATE_CHANGE].isEnable = false;
1065 SetClientCallbacksEnable(CALLBACK_RENDERER_STATE_CHANGE, false);
1066 }
1067 isAudioRendererEventListenerRegistered = false;
1068 }
1069 return SUCCESS;
1070 }
1071
RegisterAudioCapturerEventListener(const int32_t clientPid,const std::shared_ptr<AudioCapturerStateChangeCallback> & callback)1072 int32_t AudioPolicyManager::RegisterAudioCapturerEventListener(const int32_t clientPid,
1073 const std::shared_ptr<AudioCapturerStateChangeCallback> &callback)
1074 {
1075 AUDIO_DEBUG_LOG("AudioPolicyManager::RegisterAudioCapturerEventListener");
1076
1077 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "Capturer Event Listener callback is nullptr");
1078
1079 if (!isAudioPolicyClientRegisted_) {
1080 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1081 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1082 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
1083 if (ret != SUCCESS) {
1084 return ret;
1085 }
1086 }
1087
1088 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_CAPTURER_STATE_CHANGE].mutex);
1089 audioPolicyClientStubCB_->AddCapturerStateChangeCallback(callback);
1090 size_t callbackSize = audioPolicyClientStubCB_->GetCapturerStateChangeCallbackSize();
1091 if (callbackSize == 1) {
1092 callbackChangeInfos_[CALLBACK_CAPTURER_STATE_CHANGE].isEnable = true;
1093 SetClientCallbacksEnable(CALLBACK_CAPTURER_STATE_CHANGE, true);
1094 }
1095 isAudioCapturerEventListenerRegistered = true;
1096 return SUCCESS;
1097 }
1098
UnregisterAudioCapturerEventListener(const int32_t clientPid)1099 int32_t AudioPolicyManager::UnregisterAudioCapturerEventListener(const int32_t clientPid)
1100 {
1101 AUDIO_DEBUG_LOG("AudioPolicyManager::UnregisterAudioCapturerEventListener");
1102 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_CAPTURER_STATE_CHANGE].mutex);
1103 if ((audioPolicyClientStubCB_ != nullptr) && isAudioCapturerEventListenerRegistered) {
1104 audioPolicyClientStubCB_->RemoveCapturerStateChangeCallback();
1105 if (audioPolicyClientStubCB_->GetCapturerStateChangeCallbackSize() == 0) {
1106 callbackChangeInfos_[CALLBACK_CAPTURER_STATE_CHANGE].isEnable = false;
1107 SetClientCallbacksEnable(CALLBACK_CAPTURER_STATE_CHANGE, false);
1108 }
1109 isAudioCapturerEventListenerRegistered = false;
1110 }
1111 return SUCCESS;
1112 }
1113
RegisterDeviceChangeWithInfoCallback(const uint32_t sessionID,const std::weak_ptr<DeviceChangeWithInfoCallback> & callback)1114 int32_t AudioPolicyManager::RegisterDeviceChangeWithInfoCallback(
1115 const uint32_t sessionID, const std::weak_ptr<DeviceChangeWithInfoCallback> &callback)
1116 {
1117 AUDIO_DEBUG_LOG("In");
1118
1119 if (callback.expired()) {
1120 AUDIO_ERR_LOG("callback is expired");
1121 return ERR_INVALID_PARAM;
1122 }
1123
1124 if (!isAudioPolicyClientRegisted_) {
1125 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1126 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1127 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
1128 if (ret != SUCCESS) {
1129 return ret;
1130 }
1131 }
1132
1133 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_DEVICE_CHANGE_WITH_INFO].mutex);
1134 if (audioPolicyClientStubCB_ != nullptr) {
1135 audioPolicyClientStubCB_->AddDeviceChangeWithInfoCallback(sessionID, callback);
1136 size_t callbackSize = audioPolicyClientStubCB_->GetDeviceChangeWithInfoCallbackkSize();
1137 if (callbackSize == 1) {
1138 callbackChangeInfos_[CALLBACK_DEVICE_CHANGE_WITH_INFO].isEnable = true;
1139 SetClientCallbacksEnable(CALLBACK_DEVICE_CHANGE_WITH_INFO, true);
1140 }
1141 }
1142 return SUCCESS;
1143 }
1144
UnregisterDeviceChangeWithInfoCallback(const uint32_t sessionID)1145 int32_t AudioPolicyManager::UnregisterDeviceChangeWithInfoCallback(const uint32_t sessionID)
1146 {
1147 AUDIO_DEBUG_LOG("In");
1148 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_DEVICE_CHANGE_WITH_INFO].mutex);
1149 if (audioPolicyClientStubCB_ != nullptr) {
1150 audioPolicyClientStubCB_->RemoveDeviceChangeWithInfoCallback(sessionID);
1151 if (audioPolicyClientStubCB_->GetDeviceChangeWithInfoCallbackkSize() == 0) {
1152 callbackChangeInfos_[CALLBACK_DEVICE_CHANGE_WITH_INFO].isEnable = false;
1153 SetClientCallbacksEnable(CALLBACK_DEVICE_CHANGE_WITH_INFO, false);
1154 }
1155 }
1156 return SUCCESS;
1157 }
1158
RegisterTracker(AudioMode & mode,AudioStreamChangeInfo & streamChangeInfo,const std::shared_ptr<AudioClientTracker> & clientTrackerObj)1159 int32_t AudioPolicyManager::RegisterTracker(AudioMode &mode, AudioStreamChangeInfo &streamChangeInfo,
1160 const std::shared_ptr<AudioClientTracker> &clientTrackerObj)
1161 {
1162 AUDIO_DEBUG_LOG("AudioPolicyManager::RegisterTracker");
1163 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1164 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1165
1166 std::lock_guard<std::mutex> lock(clientTrackerStubMutex_);
1167 sptr<AudioClientTrackerCallbackStub> callback = new(std::nothrow) AudioClientTrackerCallbackStub();
1168 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERROR, "clientTrackerCbStub: memory allocation failed");
1169
1170 callback->SetClientTrackerCallback(clientTrackerObj);
1171
1172 sptr<IRemoteObject> object = callback->AsObject();
1173 CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "clientTrackerCbStub: IPC object creation failed");
1174
1175 int32_t ret = gsp->RegisterTracker(mode, streamChangeInfo, object);
1176 CHECK_AND_RETURN_RET_LOG(ret == SUCCESS, ERROR, "RegisterTracker failed");
1177 int32_t sessionId = mode == AUDIO_MODE_PLAYBACK ? streamChangeInfo.audioRendererChangeInfo.sessionId :
1178 streamChangeInfo.audioCapturerChangeInfo.sessionId;
1179 clientTrackerStubMap_[sessionId] = callback;
1180 return ret;
1181 }
1182
UpdateTracker(AudioMode & mode,AudioStreamChangeInfo & streamChangeInfo)1183 int32_t AudioPolicyManager::UpdateTracker(AudioMode &mode, AudioStreamChangeInfo &streamChangeInfo)
1184 {
1185 AUDIO_DEBUG_LOG("AudioPolicyManager::UpdateTracker");
1186 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1187 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1188 int32_t ret = gsp->UpdateTracker(mode, streamChangeInfo);
1189 CheckAndRemoveClientTrackerStub(mode, streamChangeInfo);
1190 return ret;
1191 }
1192
FetchOutputDeviceForTrack(AudioStreamChangeInfo & streamChangeInfo,const AudioStreamDeviceChangeReasonExt reason)1193 void AudioPolicyManager::FetchOutputDeviceForTrack(AudioStreamChangeInfo &streamChangeInfo,
1194 const AudioStreamDeviceChangeReasonExt reason)
1195 {
1196 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1197 if (gsp != nullptr) {
1198 gsp->FetchOutputDeviceForTrack(streamChangeInfo, reason);
1199 } else {
1200 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1201 }
1202 }
1203
FetchInputDeviceForTrack(AudioStreamChangeInfo & streamChangeInfo)1204 void AudioPolicyManager::FetchInputDeviceForTrack(AudioStreamChangeInfo &streamChangeInfo)
1205 {
1206 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1207 if (gsp != nullptr) {
1208 gsp->FetchInputDeviceForTrack(streamChangeInfo);
1209 } else {
1210 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1211 }
1212 }
1213
CheckRecordingCreate(uint32_t appTokenId,uint64_t appFullTokenId,int32_t appUid,SourceType sourceType)1214 bool AudioPolicyManager::CheckRecordingCreate(uint32_t appTokenId, uint64_t appFullTokenId, int32_t appUid,
1215 SourceType sourceType)
1216 {
1217 AUDIO_ERR_LOG("Not supported operation");
1218 return false;
1219 }
1220
CheckRecordingStateChange(uint32_t appTokenId,uint64_t appFullTokenId,int32_t appUid,AudioPermissionState state)1221 bool AudioPolicyManager::CheckRecordingStateChange(uint32_t appTokenId, uint64_t appFullTokenId, int32_t appUid,
1222 AudioPermissionState state)
1223 {
1224 AUDIO_ERR_LOG("Not supported operation");
1225 return false;
1226 }
1227
ReconfigureAudioChannel(const uint32_t & count,DeviceType deviceType)1228 int32_t AudioPolicyManager::ReconfigureAudioChannel(const uint32_t &count, DeviceType deviceType)
1229 {
1230 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1231 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1232 return gsp->ReconfigureAudioChannel(count, deviceType);
1233 }
1234
GetAudioLatencyFromXml()1235 int32_t AudioPolicyManager::GetAudioLatencyFromXml()
1236 {
1237 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1238 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1239 return gsp->GetAudioLatencyFromXml();
1240 }
1241
GetSinkLatencyFromXml()1242 uint32_t AudioPolicyManager::GetSinkLatencyFromXml()
1243 {
1244 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1245 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, 0, "audio policy manager proxy is NULL.");
1246 return gsp->GetSinkLatencyFromXml();
1247 }
1248
GetPreferredOutputStreamType(AudioRendererInfo & rendererInfo)1249 int32_t AudioPolicyManager::GetPreferredOutputStreamType(AudioRendererInfo &rendererInfo)
1250 {
1251 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1252 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, AUDIO_FLAG_INVALID, "audio policy manager proxy is NULL.");
1253 return gsp->GetPreferredOutputStreamType(rendererInfo);
1254 }
1255
GetPreferredInputStreamType(AudioCapturerInfo & capturerInfo)1256 int32_t AudioPolicyManager::GetPreferredInputStreamType(AudioCapturerInfo &capturerInfo)
1257 {
1258 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1259 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, AUDIO_FLAG_INVALID, "audio policy manager proxy is NULL.");
1260 return gsp->GetPreferredInputStreamType(capturerInfo);
1261 }
1262
GetCurrentRendererChangeInfos(vector<unique_ptr<AudioRendererChangeInfo>> & audioRendererChangeInfos)1263 int32_t AudioPolicyManager::GetCurrentRendererChangeInfos(
1264 vector<unique_ptr<AudioRendererChangeInfo>> &audioRendererChangeInfos)
1265 {
1266 AUDIO_DEBUG_LOG("GetCurrentRendererChangeInfos");
1267 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1268 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1269 return gsp->GetCurrentRendererChangeInfos(audioRendererChangeInfos);
1270 }
1271
GetCurrentCapturerChangeInfos(vector<unique_ptr<AudioCapturerChangeInfo>> & audioCapturerChangeInfos)1272 int32_t AudioPolicyManager::GetCurrentCapturerChangeInfos(
1273 vector<unique_ptr<AudioCapturerChangeInfo>> &audioCapturerChangeInfos)
1274 {
1275 AUDIO_DEBUG_LOG("GetCurrentCapturerChangeInfos");
1276 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1277 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1278 return gsp->GetCurrentCapturerChangeInfos(audioCapturerChangeInfos);
1279 }
1280
UpdateStreamState(const int32_t clientUid,StreamSetState streamSetState,StreamUsage streamUsage)1281 int32_t AudioPolicyManager::UpdateStreamState(const int32_t clientUid,
1282 StreamSetState streamSetState, StreamUsage streamUsage)
1283 {
1284 AUDIO_DEBUG_LOG("UpdateStreamState");
1285 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1286 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1287 return gsp->UpdateStreamState(clientUid, streamSetState, streamUsage);
1288 }
1289
GetVolumeGroupInfos(std::string networkId,std::vector<sptr<VolumeGroupInfo>> & infos)1290 int32_t AudioPolicyManager::GetVolumeGroupInfos(std::string networkId, std::vector<sptr<VolumeGroupInfo>> &infos)
1291 {
1292 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1293 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1294 return gsp->GetVolumeGroupInfos(networkId, infos);
1295 }
1296
GetNetworkIdByGroupId(int32_t groupId,std::string & networkId)1297 int32_t AudioPolicyManager::GetNetworkIdByGroupId(int32_t groupId, std::string &networkId)
1298 {
1299 AudioXCollie audioXCollie("AudioPolicyManager::GetNetworkIdByGroupId", TIME_OUT_SECONDS);
1300 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1301 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "GetNetworkIdByGroupId failed, g_apProxy is nullptr.");
1302 return gsp->GetNetworkIdByGroupId(groupId, networkId);
1303 }
1304
IsAudioRendererLowLatencySupported(const AudioStreamInfo & audioStreamInfo)1305 bool AudioPolicyManager::IsAudioRendererLowLatencySupported(const AudioStreamInfo &audioStreamInfo)
1306 {
1307 AUDIO_DEBUG_LOG("IsAudioRendererLowLatencySupported");
1308 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1309 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1310 return gsp->IsAudioRendererLowLatencySupported(audioStreamInfo);
1311 }
1312
SetSystemSoundUri(const std::string & key,const std::string & uri)1313 int32_t AudioPolicyManager::SetSystemSoundUri(const std::string &key, const std::string &uri)
1314 {
1315 AUDIO_DEBUG_LOG("SetSystemSoundUri: [%{public}s]: [%{public}s]", key.c_str(), uri.c_str());
1316 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1317 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1318
1319 return gsp->SetSystemSoundUri(key, uri);
1320 }
1321
GetSystemSoundUri(const std::string & key)1322 std::string AudioPolicyManager::GetSystemSoundUri(const std::string &key)
1323 {
1324 AUDIO_DEBUG_LOG("GetSystemSoundUri: %{public}s", key.c_str());
1325 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1326 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, "", "audio policy manager proxy is NULL.");
1327
1328 return gsp->GetSystemSoundUri(key);
1329 }
1330
GetMinStreamVolume()1331 float AudioPolicyManager::GetMinStreamVolume()
1332 {
1333 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1334 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1335 return gsp->GetMinStreamVolume();
1336 }
1337
GetMaxStreamVolume()1338 float AudioPolicyManager::GetMaxStreamVolume()
1339 {
1340 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1341 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1342 return gsp->GetMaxStreamVolume();
1343 }
1344
RegisterAudioPolicyServerDiedCb(const int32_t clientPid,const std::shared_ptr<AudioRendererPolicyServiceDiedCallback> & callback)1345 int32_t AudioPolicyManager::RegisterAudioPolicyServerDiedCb(const int32_t clientPid,
1346 const std::shared_ptr<AudioRendererPolicyServiceDiedCallback> &callback)
1347 {
1348 std::lock_guard<std::mutex> lockCbMap(g_cBMapMutex);
1349 if (rendererCBMap_.count(clientPid)) {
1350 rendererCBMap_.erase(clientPid);
1351 }
1352 rendererCBMap_[clientPid] = callback;
1353 return SUCCESS;
1354 }
1355
UnregisterAudioPolicyServerDiedCb(const int32_t clientPid)1356 int32_t AudioPolicyManager::UnregisterAudioPolicyServerDiedCb(const int32_t clientPid)
1357 {
1358 std::lock_guard<std::mutex> lockCbMap(g_cBMapMutex);
1359 AUDIO_DEBUG_LOG("client pid: %{public}d", clientPid);
1360 rendererCBMap_.erase(getpid());
1361 return SUCCESS;
1362 }
1363
RegisterAudioStreamPolicyServerDiedCb(const std::shared_ptr<AudioStreamPolicyServiceDiedCallback> & callback)1364 int32_t AudioPolicyManager::RegisterAudioStreamPolicyServerDiedCb(
1365 const std::shared_ptr<AudioStreamPolicyServiceDiedCallback> &callback)
1366 {
1367 std::lock_guard<std::mutex> lockCbMap(g_cBDiedMapMutex);
1368 AUDIO_DEBUG_LOG("RegisterAudioStreamPolicyServerDiedCb");
1369 audioStreamCBMap_.emplace_back(callback);
1370
1371 return SUCCESS;
1372 }
1373
UnregisterAudioStreamPolicyServerDiedCb(const std::shared_ptr<AudioStreamPolicyServiceDiedCallback> & callback)1374 int32_t AudioPolicyManager::UnregisterAudioStreamPolicyServerDiedCb(
1375 const std::shared_ptr<AudioStreamPolicyServiceDiedCallback> &callback)
1376 {
1377 std::lock_guard<std::mutex> lockCbMap(g_cBDiedMapMutex);
1378 AUDIO_DEBUG_LOG("UnregisterAudioStreamPolicyServerDiedCb");
1379
1380 audioStreamCBMap_.erase(std::remove_if(audioStreamCBMap_.begin(), audioStreamCBMap_.end(),
1381 [&callback] (const weak_ptr<AudioStreamPolicyServiceDiedCallback> &cb) {
1382 auto sharedCb = cb.lock();
1383 if (sharedCb == callback || sharedCb == nullptr) {
1384 return true;
1385 }
1386 return false;
1387 }), audioStreamCBMap_.end());
1388
1389 return SUCCESS;
1390 }
1391
CheckMaxRendererInstances()1392 int32_t AudioPolicyManager::CheckMaxRendererInstances()
1393 {
1394 AUDIO_DEBUG_LOG("AudioPolicyManager::CheckMaxRendererInstances");
1395 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1396 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1397
1398 return gsp->CheckMaxRendererInstances();
1399 }
1400
IsVolumeUnadjustable()1401 bool AudioPolicyManager::IsVolumeUnadjustable()
1402 {
1403 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1404 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1405 return gsp->IsVolumeUnadjustable();
1406 }
1407
AdjustVolumeByStep(VolumeAdjustType adjustType)1408 int32_t AudioPolicyManager::AdjustVolumeByStep(VolumeAdjustType adjustType)
1409 {
1410 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1411 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1412 return gsp->AdjustVolumeByStep(adjustType);
1413 }
1414
AdjustSystemVolumeByStep(AudioVolumeType volumeType,VolumeAdjustType adjustType)1415 int32_t AudioPolicyManager::AdjustSystemVolumeByStep(AudioVolumeType volumeType, VolumeAdjustType adjustType)
1416 {
1417 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1418 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1419 return gsp->AdjustSystemVolumeByStep(volumeType, adjustType);
1420 }
1421
GetSystemVolumeInDb(AudioVolumeType volumeType,int32_t volumeLevel,DeviceType deviceType)1422 float AudioPolicyManager::GetSystemVolumeInDb(AudioVolumeType volumeType, int32_t volumeLevel, DeviceType deviceType)
1423 {
1424 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1425 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1426 return gsp->GetSystemVolumeInDb(volumeType, volumeLevel, deviceType);
1427 }
1428
QueryEffectSceneMode(SupportedEffectConfig & supportedEffectConfig)1429 int32_t AudioPolicyManager::QueryEffectSceneMode(SupportedEffectConfig &supportedEffectConfig)
1430 {
1431 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1432 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1433 int error = gsp->QueryEffectSceneMode(supportedEffectConfig);
1434 return error;
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
SetPreferredDevice(const PreferredType preferredType,const sptr<AudioDeviceDescriptor> & desc)2103 int32_t AudioPolicyManager::SetPreferredDevice(const PreferredType preferredType,
2104 const sptr<AudioDeviceDescriptor> &desc)
2105 {
2106 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2107 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2108 return gsp->SetPreferredDevice(preferredType, desc);
2109 }
2110
GetInstance()2111 AudioPolicyManager& AudioPolicyManager::GetInstance()
2112 {
2113 static AudioPolicyManager policyManager;
2114 return policyManager;
2115 }
2116
MoveToNewPipe(const uint32_t sessionId,const AudioPipeType pipeType)2117 int32_t AudioPolicyManager::MoveToNewPipe(const uint32_t sessionId, const AudioPipeType pipeType)
2118 {
2119 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2120 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2121 return gsp->MoveToNewPipe(sessionId, pipeType);
2122 }
SetAudioConcurrencyCallback(const uint32_t sessionID,const std::shared_ptr<AudioConcurrencyCallback> & callback)2123 int32_t AudioPolicyManager::SetAudioConcurrencyCallback(const uint32_t sessionID,
2124 const std::shared_ptr<AudioConcurrencyCallback> &callback)
2125 {
2126 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2127 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2128 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
2129
2130 sptr<AudioConcurrencyStateListenerStub> listener = new(std::nothrow) AudioConcurrencyStateListenerStub();
2131 CHECK_AND_RETURN_RET_LOG(listener != nullptr, ERROR, "object null");
2132 listener->SetConcurrencyCallback(callback);
2133
2134 sptr<IRemoteObject> object = listener->AsObject();
2135 CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "listenerStub->AsObject is nullptr.");
2136
2137 return gsp->SetAudioConcurrencyCallback(sessionID, object);
2138 }
2139
UnsetAudioConcurrencyCallback(const uint32_t sessionID)2140 int32_t AudioPolicyManager::UnsetAudioConcurrencyCallback(const uint32_t sessionID)
2141 {
2142 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2143 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2144 return gsp->UnsetAudioConcurrencyCallback(sessionID);
2145 }
2146
ActivateAudioConcurrency(const AudioPipeType & pipeType)2147 int32_t AudioPolicyManager::ActivateAudioConcurrency(const AudioPipeType &pipeType)
2148 {
2149 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2150 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2151 return gsp->ActivateAudioConcurrency(pipeType);
2152 }
2153
2154 // When AudioPolicyServer died, clear client tracker stubs. New tracker stubs will be added
2155 // in IAudioStream::RestoreAudioStream. Only called in AudioPolicyServerDied().
ResetClientTrackerStubMap()2156 void AudioPolicyManager::ResetClientTrackerStubMap()
2157 {
2158 std::lock_guard<std::mutex> lock(clientTrackerStubMutex_);
2159 for (auto it : clientTrackerStubMap_) {
2160 if (it.second != nullptr) {
2161 it.second->UnsetClientTrackerCallback();
2162 } else {
2163 AUDIO_WARNING_LOG("Client tracker stub is nullptr in local map");
2164 }
2165 }
2166 clientTrackerStubMap_.clear();
2167 }
2168
CheckAndRemoveClientTrackerStub(const AudioMode & mode,const AudioStreamChangeInfo & streamChangeInfo)2169 void AudioPolicyManager::CheckAndRemoveClientTrackerStub(const AudioMode &mode,
2170 const AudioStreamChangeInfo &streamChangeInfo)
2171 {
2172 if (streamChangeInfo.audioRendererChangeInfo.rendererState != RENDERER_RELEASED &&
2173 streamChangeInfo.audioCapturerChangeInfo.capturerState != CAPTURER_RELEASED) {
2174 return;
2175 }
2176 int32_t sessionId = mode == AUDIO_MODE_PLAYBACK ? streamChangeInfo.audioRendererChangeInfo.sessionId :
2177 streamChangeInfo.audioCapturerChangeInfo.sessionId;
2178 RemoveClientTrackerStub(sessionId);
2179 }
2180
RemoveClientTrackerStub(int32_t sessionId)2181 void AudioPolicyManager::RemoveClientTrackerStub(int32_t sessionId)
2182 {
2183 std::unique_lock<std::mutex> lock(clientTrackerStubMutex_);
2184 if (clientTrackerStubMap_.find(sessionId) != clientTrackerStubMap_.end() &&
2185 clientTrackerStubMap_[sessionId] != nullptr) {
2186 clientTrackerStubMap_[sessionId]->UnsetClientTrackerCallback();
2187 clientTrackerStubMap_.erase(sessionId);
2188 AUDIO_INFO_LOG("Client tracker for session %{public}d removed", sessionId);
2189 } else {
2190 AUDIO_WARNING_LOG("Client tracker for session %{public}d not exist", sessionId);
2191 }
2192 }
2193
GetSupportedAudioEffectProperty(AudioEffectPropertyArrayV3 & propertyArray)2194 int32_t AudioPolicyManager::GetSupportedAudioEffectProperty(AudioEffectPropertyArrayV3 &propertyArray)
2195 {
2196 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2197 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
2198 return gsp->GetSupportedAudioEffectProperty(propertyArray);
2199 }
2200
SetAudioEffectProperty(const AudioEffectPropertyArrayV3 & propertyArray)2201 int32_t AudioPolicyManager::SetAudioEffectProperty(const AudioEffectPropertyArrayV3 &propertyArray)
2202 {
2203 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2204 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
2205 return gsp->SetAudioEffectProperty(propertyArray);
2206 }
2207
GetAudioEffectProperty(AudioEffectPropertyArrayV3 & propertyArray)2208 int32_t AudioPolicyManager::GetAudioEffectProperty(AudioEffectPropertyArrayV3 &propertyArray)
2209 {
2210 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2211 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
2212 return gsp->GetAudioEffectProperty(propertyArray);
2213 }
2214
InjectInterruption(const std::string networkId,InterruptEvent & event)2215 int32_t AudioPolicyManager::InjectInterruption(const std::string networkId, InterruptEvent &event)
2216 {
2217 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2218 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2219 return gsp->InjectInterruption(networkId, event);
2220 }
2221
SetDefaultOutputDevice(const DeviceType deviceType,const uint32_t sessionID,const StreamUsage streamUsage,bool isRunning)2222 int32_t AudioPolicyManager::SetDefaultOutputDevice(const DeviceType deviceType, const uint32_t sessionID,
2223 const StreamUsage streamUsage, bool isRunning)
2224 {
2225 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2226 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2227 return gsp->SetDefaultOutputDevice(deviceType, sessionID, streamUsage, isRunning);
2228 }
2229
SaveRemoteInfo(const std::string & networkId,DeviceType deviceType)2230 void AudioPolicyManager::SaveRemoteInfo(const std::string &networkId, DeviceType deviceType)
2231 {
2232 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2233 if (gsp != nullptr) {
2234 gsp->SaveRemoteInfo(networkId, deviceType);
2235 } else {
2236 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
2237 }
2238 }
2239
LoadSplitModule(const std::string & splitArgs,const std::string & networkId)2240 int32_t AudioPolicyManager::LoadSplitModule(const std::string &splitArgs, const std::string &networkId)
2241 {
2242 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2243 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2244 return gsp->LoadSplitModule(splitArgs, networkId);
2245 }
2246
SetVoiceRingtoneMute(bool isMute)2247 int32_t AudioPolicyManager::SetVoiceRingtoneMute(bool isMute)
2248 {
2249 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2250 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2251 return gsp->SetVoiceRingtoneMute(isMute);
2252 }
2253 } // namespace AudioStandard
2254 } // namespace OHOS
2255