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