1 /*
2 * Copyright (c) 2021-2025 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
21 #include "iservice_registry.h"
22 #include "system_ability_definition.h"
23
24 #include "audio_errors.h"
25 #include "audio_policy_log.h"
26
27 #include "audio_utils.h"
28 #include "audio_policy_proxy.h"
29 #include "audio_server_death_recipient.h"
30 #include "audio_spatialization_state_change_listener.h"
31
32 namespace OHOS {
33 namespace AudioStandard {
34 using namespace std;
35 using namespace std::chrono_literals;
36
37 static sptr<IAudioPolicy> g_apProxy = nullptr;
38 mutex g_apProxyMutex;
39 constexpr int64_t SLEEP_TIME = 1;
40 constexpr int32_t RETRY_TIMES = 10;
41 const unsigned int TIME_OUT_SECONDS = 10;
42 constexpr auto SLEEP_TIMES_RETYT_FAILED = 1min;
43 std::mutex g_cBMapMutex;
44 std::mutex g_cBDiedMapMutex;
45 std::unordered_map<int32_t, std::weak_ptr<AudioRendererPolicyServiceDiedCallback>> AudioPolicyManager::rendererCBMap_;
46 std::weak_ptr<AudioCapturerPolicyServiceDiedCallback> AudioPolicyManager::capturerCB_;
47 std::vector<std::weak_ptr<AudioStreamPolicyServiceDiedCallback>> AudioPolicyManager::audioStreamCBMap_;
48 std::vector<AudioServerDiedCallBack> AudioPolicyManager::serverDiedCbks_;
49 std::mutex AudioPolicyManager::serverDiedCbkMutex_;
50 std::unordered_map<int32_t, sptr<AudioClientTrackerCallbackService>> AudioPolicyManager::clientTrackerStubMap_;
51
52 std::weak_ptr<AudioSessionManagerPolicyServiceDiedCallback> AudioPolicyManager::audioSessionManagerCb_;
53 std::mutex AudioPolicyManager::serverDiedSessionManagerCbkMutex_;
54
RegisterDeathRecipientInner(sptr<IRemoteObject> object)55 static bool RegisterDeathRecipientInner(sptr<IRemoteObject> object)
56 {
57 pid_t pid = 0;
58 pid_t uid = 0;
59 sptr<AudioServerDeathRecipient> deathRecipient = new(std::nothrow) AudioServerDeathRecipient(pid, uid);
60 CHECK_AND_RETURN_RET(deathRecipient != nullptr, false);
61 deathRecipient->SetNotifyCb(
62 [] (pid_t pid, pid_t uid) { AudioPolicyManager::AudioPolicyServerDied(pid, uid); });
63 AUDIO_DEBUG_LOG("Register audio policy server death recipient");
64 CHECK_AND_RETURN_RET_LOG(object->AddDeathRecipient(deathRecipient), false, "AddDeathRecipient failed");
65 return true;
66 }
67
GetAudioPolicyProxyFromSamgr(bool block=true)68 static sptr<IAudioPolicy> GetAudioPolicyProxyFromSamgr(bool block = true)
69 {
70 auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
71 CHECK_AND_RETURN_RET_LOG(samgr != nullptr, nullptr, "samgr init failed.");
72 sptr<IRemoteObject> object = nullptr;
73 if (!block) {
74 object = samgr->CheckSystemAbility(AUDIO_POLICY_SERVICE_ID);
75 } else {
76 object = samgr->GetSystemAbility(AUDIO_POLICY_SERVICE_ID);
77 }
78 CHECK_AND_RETURN_RET_LOG(object != nullptr, nullptr, "Object is NULL.");
79 sptr<IAudioPolicy> apProxy = iface_cast<IAudioPolicy>(object);
80 CHECK_AND_RETURN_RET_LOG(apProxy != nullptr, nullptr, "Init apProxy is NULL.");
81 return apProxy;
82 }
83
84 // LCOV_EXCL_START
GetAudioPolicyManagerProxy(bool block)85 const sptr<IAudioPolicy> AudioPolicyManager::GetAudioPolicyManagerProxy(bool block)
86 {
87 AUDIO_DEBUG_LOG("In");
88 lock_guard<mutex> lock(g_apProxyMutex);
89
90 if (g_apProxy != nullptr) {
91 return g_apProxy;
92 }
93
94 sptr<IAudioPolicy> gsp = GetAudioPolicyProxyFromSamgr(block);
95 CHECK_AND_RETURN_RET_LOG(gsp, nullptr, "gsp is null");
96
97 AUDIO_DEBUG_LOG("Init g_apProxy is assigned.");
98
99 if (RegisterDeathRecipientInner(gsp->AsObject())) {
100 g_apProxy = gsp;
101 }
102
103 return gsp;
104 }
105
RecoverAndGetAudioPolicyManagerProxy()106 static const sptr<IAudioPolicy> RecoverAndGetAudioPolicyManagerProxy()
107 {
108 AUDIO_DEBUG_LOG("In");
109 lock_guard<mutex> lock(g_apProxyMutex);
110 if (g_apProxy != nullptr) {
111 sptr<IRemoteObject> object = g_apProxy->AsObject();
112 if (object != nullptr && !object->IsObjectDead()) {
113 AUDIO_INFO_LOG("direct return g_apProxy");
114 return g_apProxy;
115 }
116 }
117
118 sptr<IAudioPolicy> gsp = GetAudioPolicyProxyFromSamgr();
119 CHECK_AND_RETURN_RET_LOG(gsp, nullptr, "gsp is null");
120
121 AUDIO_DEBUG_LOG("Init g_apProxy is assigned.");
122 CHECK_AND_RETURN_RET_LOG(RegisterDeathRecipientInner(gsp->AsObject()), nullptr, "RegisterDeathRecipient failed");
123
124 g_apProxy = gsp;
125 return gsp;
126 }
127
RegisterPolicyCallbackClientFunc(const sptr<IAudioPolicy> & gsp)128 int32_t AudioPolicyManager::RegisterPolicyCallbackClientFunc(const sptr<IAudioPolicy> &gsp)
129 {
130 AudioXCollie audioXCollie("AudioPolicyManager::RegisterPolicyCallbackClientFunc", TIME_OUT_SECONDS,
131 nullptr, nullptr, AUDIO_XCOLLIE_FLAG_LOG);
132 std::unique_lock<std::mutex> lock(registerCallbackMutex_);
133 if (audioPolicyClientStubCB_ == nullptr) {
134 audioPolicyClientStubCB_ = new(std::nothrow) AudioPolicyClientStubImpl();
135 CHECK_AND_RETURN_RET_LOG(audioPolicyClientStubCB_ != nullptr, ERROR, "audioPolicyClientStubCB_ is nullptr");
136 }
137 sptr<IRemoteObject> object = audioPolicyClientStubCB_->AsObject();
138 if (object == nullptr) {
139 AUDIO_ERR_LOG("audioPolicyClientStubCB_->AsObject is nullptr");
140 lock.unlock();
141 return ERROR;
142 }
143 lock.unlock();
144
145 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "AudioPolicy is nullptr");
146 int32_t ret = gsp->RegisterPolicyCallbackClient(object, 0);
147 if (ret == SUCCESS) {
148 isAudioPolicyClientRegisted_ = true;
149 }
150 return ret;
151 }
152
RecoverAudioPolicyCallbackClient()153 void AudioPolicyManager::RecoverAudioPolicyCallbackClient()
154 {
155 std::unique_lock<std::mutex> lockRegisterCallbackMutex(registerCallbackMutex_);
156 if (audioPolicyClientStubCB_ == nullptr) {
157 AUDIO_ERR_LOG("audioPolicyClientStubCB_ is null.");
158 return;
159 }
160 lockRegisterCallbackMutex.unlock();
161
162 int32_t retry = RETRY_TIMES;
163 sptr<IAudioPolicy> gsp = nullptr;
164 while (retry--) {
165 // Sleep and wait for 1 second;
166 sleep(SLEEP_TIME);
167 gsp = RecoverAndGetAudioPolicyManagerProxy();
168 if (gsp != nullptr) {
169 AUDIO_INFO_LOG("Reconnect audio policy service success!");
170 break;
171 }
172 if (retry == 0) {
173 AUDIO_WARNING_LOG("Reconnect audio policy service %{public}d times, sleep ", RETRY_TIMES);
174 std::this_thread::sleep_for(SLEEP_TIMES_RETYT_FAILED);
175 retry = RETRY_TIMES;
176 }
177 }
178
179 CHECK_AND_RETURN_LOG(gsp != nullptr, "Reconnect audio policy service fail!");
180
181 sptr<IRemoteObject> object = audioPolicyClientStubCB_->AsObject();
182 if (object == nullptr) {
183 AUDIO_ERR_LOG("RegisterPolicyCallbackClientFunc: audioPolicyClientStubCB_->AsObject is nullptr");
184 return;
185 }
186
187 gsp->RegisterPolicyCallbackClient(object, 0);
188 if (audioPolicyClientStubCB_->HasMicStateChangeCallback()) {
189 AUDIO_INFO_LOG("RecoverAudioPolicyCallbackClient has micStateChangeCallback");
190 gsp->SetClientCallbacksEnable(CALLBACK_MICMUTE_STATE_CHANGE, true);
191 }
192
193 for (auto enumIndex : CALLBACK_ENUMS) {
194 auto &[mutex, isEnable] = callbackChangeInfos_[enumIndex];
195 std::lock_guard<std::mutex> lock(mutex);
196 if (isEnable) {
197 SetCallbackStreamInfo(enumIndex);
198 gsp->SetClientCallbacksEnable(enumIndex, true);
199 }
200 }
201
202 std::lock_guard<std::mutex> lock(handleAvailableDeviceChangeCbsMapMutex_);
203 for (auto it = availableDeviceChangeCbsMap_.begin(); it != availableDeviceChangeCbsMap_.end(); ++it) {
204 gsp->SetAvailableDeviceChangeCallback(it->first.first, it->first.second, it->second);
205 }
206 }
207
SetCallbackStreamInfo(const CallbackChange & callbackChange)208 int32_t AudioPolicyManager::SetCallbackStreamInfo(const CallbackChange &callbackChange)
209 {
210 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
211 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
212
213 int32_t ret = SUCCESS;
214 if (callbackChange == CALLBACK_PREFERRED_OUTPUT_DEVICE_CHANGE) {
215 for (auto &rendererInfo : rendererInfos_) {
216 ret = gsp->SetCallbackRendererInfo(rendererInfo);
217 }
218 } else if (callbackChange == CALLBACK_PREFERRED_INPUT_DEVICE_CHANGE) {
219 for (auto &capturerInfo : capturerInfos_) {
220 ret = gsp->SetCallbackCapturerInfo(capturerInfo);
221 }
222 }
223 return ret;
224 }
225
AudioPolicyServerDied(pid_t pid,pid_t uid)226 void AudioPolicyManager::AudioPolicyServerDied(pid_t pid, pid_t uid)
227 {
228 GetInstance().ResetClientTrackerStubMap();
229 if (auto capturerCb = capturerCB_.lock()) {
230 capturerCb->OnAudioPolicyServiceDied();
231 }
232 {
233 std::lock_guard<std::mutex> lockCbMap(g_cBMapMutex);
234 AUDIO_INFO_LOG("Audio policy server died: reestablish connection");
235 std::shared_ptr<AudioRendererPolicyServiceDiedCallback> cb;
236 for (auto it = rendererCBMap_.begin(); it != rendererCBMap_.end(); ++it) {
237 cb = it->second.lock();
238 if (cb != nullptr) {
239 cb->OnAudioPolicyServiceDied();
240 }
241 }
242 }
243 {
244 std::lock_guard<std::mutex> lock(g_apProxyMutex);
245 if (g_apProxy != nullptr) {
246 sptr<IRemoteObject> object = g_apProxy->AsObject();
247 if (object == nullptr || object->IsObjectDead()) {
248 AUDIO_INFO_LOG("assign g_apProxy to nullptr");
249 g_apProxy = nullptr;
250 }
251 }
252 }
253 GetInstance().RecoverAudioPolicyCallbackClient();
254
255 {
256 std::lock_guard<std::mutex> lockCbMap(g_cBDiedMapMutex);
257 if (audioStreamCBMap_.size() != 0) {
258 for (auto it = audioStreamCBMap_.begin(); it != audioStreamCBMap_.end();) {
259 auto cb = (*it).lock();
260 if (cb == nullptr) {
261 it = audioStreamCBMap_.erase(it);
262 continue;
263 }
264 cb->OnAudioPolicyServiceDied();
265 ++it;
266 }
267 }
268 }
269
270 {
271 std::lock_guard<std::mutex> lockCbMap(serverDiedCbkMutex_);
272 for (auto func : serverDiedCbks_) {
273 CHECK_AND_CONTINUE(func != nullptr);
274 func();
275 }
276 }
277
278 AudioSessionManagerCallback();
279 }
280
RegisterServerDiedCallBack(AudioServerDiedCallBack func)281 void AudioPolicyManager::RegisterServerDiedCallBack(AudioServerDiedCallBack func)
282 {
283 CHECK_AND_RETURN_LOG(func != nullptr, "func is null");
284 std::lock_guard<std::mutex> lockCbMap(serverDiedCbkMutex_);
285 serverDiedCbks_.emplace_back(func);
286 }
287
GetMaxVolumeLevel(AudioVolumeType volumeType,DeviceType deviceType)288 int32_t AudioPolicyManager::GetMaxVolumeLevel(AudioVolumeType volumeType, DeviceType deviceType)
289 {
290 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
291 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
292
293 int32_t volumeLevel = -1;
294 gsp->GetMaxVolumeLevel(volumeType, volumeLevel, deviceType);
295 return volumeLevel;
296 }
297
GetMinVolumeLevel(AudioVolumeType volumeType,DeviceType deviceType)298 int32_t AudioPolicyManager::GetMinVolumeLevel(AudioVolumeType volumeType, DeviceType deviceType)
299 {
300 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
301 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
302
303 int32_t volumeLevel = -1;
304 gsp->GetMinVolumeLevel(volumeType, volumeLevel, deviceType);
305 return volumeLevel;
306 }
307
SetSelfAppVolumeLevel(int32_t volumeLevel,int32_t volumeFlag)308 int32_t AudioPolicyManager::SetSelfAppVolumeLevel(int32_t volumeLevel, int32_t volumeFlag)
309 {
310 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
311 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
312 return gsp->SetSelfAppVolumeLevel(volumeLevel, volumeFlag);
313 }
314
SetAppVolumeLevel(int32_t appUid,int32_t volumeLevel,int32_t volumeFlag)315 int32_t AudioPolicyManager::SetAppVolumeLevel(int32_t appUid, int32_t volumeLevel, int32_t volumeFlag)
316 {
317 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
318 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
319 return gsp->SetAppVolumeLevel(appUid, volumeLevel, volumeFlag);
320 }
321
SetAppVolumeMuted(int32_t appUid,bool muted,int32_t volumeFlag)322 int32_t AudioPolicyManager::SetAppVolumeMuted(int32_t appUid, bool muted, int32_t volumeFlag)
323 {
324 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
325 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
326 return gsp->SetAppVolumeMuted(appUid, muted, volumeFlag);
327 }
328
IsAppVolumeMute(int32_t appUid,bool muted,bool & isMute)329 int32_t AudioPolicyManager::IsAppVolumeMute(int32_t appUid, bool muted, bool &isMute)
330 {
331 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
332 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
333 return gsp->IsAppVolumeMute(appUid, muted, isMute);
334 }
335
SetAppRingMuted(int32_t appUid,bool muted)336 int32_t AudioPolicyManager::SetAppRingMuted(int32_t appUid, bool muted)
337 {
338 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
339 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
340 return gsp->SetAppRingMuted(appUid, muted);
341 }
342
SetAdjustVolumeForZone(int32_t zoneId)343 int32_t AudioPolicyManager::SetAdjustVolumeForZone(int32_t zoneId)
344 {
345 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
346 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
347 return gsp->SetAdjustVolumeForZone(zoneId);
348 }
349
SetSystemVolumeLevel(AudioVolumeType volumeType,int32_t volumeLevel,bool isLegacy,int32_t volumeFlag,int32_t uid)350 int32_t AudioPolicyManager::SetSystemVolumeLevel(AudioVolumeType volumeType, int32_t volumeLevel, bool isLegacy,
351 int32_t volumeFlag, int32_t uid)
352 {
353 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
354 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
355
356 if (isLegacy) {
357 return gsp->SetSystemVolumeLevelLegacy(volumeType, volumeLevel);
358 }
359 return gsp->SetSystemVolumeLevel(volumeType, volumeLevel, volumeFlag, uid);
360 }
361
SetSystemNotificationVolumeLevel(AudioVolumeType volumeType,int32_t volumeLevel,bool isLegacy,int32_t volumeFlag,int32_t uid)362 int32_t AudioPolicyManager::SetSystemNotificationVolumeLevel(AudioVolumeType volumeType, int32_t volumeLevel,
363 bool isLegacy, int32_t volumeFlag, int32_t uid)
364 {
365 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
366 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
367
368 volumeType = STREAM_RING;
369 if (isLegacy) {
370 return gsp->SetSystemVolumeLevelLegacy(volumeType, volumeLevel);
371 }
372 return gsp->SetSystemVolumeLevel(volumeType, volumeLevel, volumeFlag, uid);
373 }
374
SetSystemVolumeLevelWithDevice(AudioVolumeType volumeType,int32_t volumeLevel,DeviceType deviceType,int32_t volumeFlag)375 int32_t AudioPolicyManager::SetSystemVolumeLevelWithDevice(AudioVolumeType volumeType, int32_t volumeLevel,
376 DeviceType deviceType, int32_t volumeFlag)
377 {
378 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
379 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
380
381 return gsp->SetSystemVolumeLevelWithDevice(volumeType, volumeLevel, deviceType, volumeFlag);
382 }
383
SetRingerModeLegacy(AudioRingerMode ringMode)384 int32_t AudioPolicyManager::SetRingerModeLegacy(AudioRingerMode ringMode)
385 {
386 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
387 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
388 return gsp->SetRingerModeLegacy(ringMode);
389 }
390
SetRingerMode(AudioRingerMode ringMode)391 int32_t AudioPolicyManager::SetRingerMode(AudioRingerMode ringMode)
392 {
393 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
394 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
395 return gsp->SetRingerMode(ringMode);
396 }
397
GetRingerMode()398 AudioRingerMode AudioPolicyManager::GetRingerMode()
399 {
400 AudioXCollie audioXCollie("AudioPolicyManager::GetRingerMode", TIME_OUT_SECONDS,
401 nullptr, nullptr, AUDIO_XCOLLIE_FLAG_LOG);
402 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
403 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, RINGER_MODE_NORMAL, "audio policy manager proxy is NULL.");
404
405 int32_t out = RINGER_MODE_NORMAL;
406 gsp->GetRingerMode(out);
407 return static_cast<AudioRingerMode>(out);
408 }
409
SetAudioScene(AudioScene scene)410 int32_t AudioPolicyManager::SetAudioScene(AudioScene scene)
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->SetAudioScene(scene);
415 }
416
SetMicrophoneMute(bool isMute)417 int32_t AudioPolicyManager::SetMicrophoneMute(bool isMute)
418 {
419 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
420 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
421 return gsp->SetMicrophoneMute(isMute);
422 }
423
SetMicrophoneMuteAudioConfig(bool isMute)424 int32_t AudioPolicyManager::SetMicrophoneMuteAudioConfig(bool isMute)
425 {
426 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
427 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
428 return gsp->SetMicrophoneMuteAudioConfig(isMute);
429 }
430
SetMicrophoneMutePersistent(const bool isMute,const PolicyType type)431 int32_t AudioPolicyManager::SetMicrophoneMutePersistent(const bool isMute, const PolicyType type)
432 {
433 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
434 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
435 return gsp->SetMicrophoneMutePersistent(isMute, type);
436 }
437
GetPersistentMicMuteState()438 bool AudioPolicyManager::GetPersistentMicMuteState()
439 {
440 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
441 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
442
443 bool mute = true;
444 gsp->GetPersistentMicMuteState(mute);
445 return mute;
446 }
447
IsMicrophoneMuteLegacy()448 bool AudioPolicyManager::IsMicrophoneMuteLegacy()
449 {
450 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
451 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
452 if (!isAudioPolicyClientRegisted_) {
453 RegisterPolicyCallbackClientFunc(gsp);
454 }
455
456 bool mute = true;
457 gsp->IsMicrophoneMuteLegacy(mute);
458 return mute;
459 }
460
IsMicrophoneMute()461 bool AudioPolicyManager::IsMicrophoneMute()
462 {
463 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
464 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
465 if (!isAudioPolicyClientRegisted_) {
466 RegisterPolicyCallbackClientFunc(gsp);
467 }
468
469 bool mute = true;
470 gsp->IsMicrophoneMute(mute);
471 return mute;
472 }
473
GetAudioScene()474 AudioScene AudioPolicyManager::GetAudioScene()
475 {
476 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
477 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, AUDIO_SCENE_DEFAULT, "audio policy manager proxy is NULL.");
478 int32_t scene = AUDIO_SCENE_DEFAULT;
479 gsp->GetAudioScene(scene);
480 return static_cast<AudioScene>(scene);
481 }
482
GetSystemActiveVolumeType(const int32_t clientUid)483 AudioStreamType AudioPolicyManager::GetSystemActiveVolumeType(const int32_t clientUid)
484 {
485 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
486 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, STREAM_DEFAULT, "audio policy manager proxy is NULL.");
487 int32_t streamType = STREAM_DEFAULT;
488 gsp->GetSystemActiveVolumeType(clientUid, streamType);
489 return static_cast<AudioStreamType>(streamType);
490 }
491
GetSelfAppVolumeLevel(int32_t & volumeLevel)492 int32_t AudioPolicyManager::GetSelfAppVolumeLevel(int32_t &volumeLevel)
493 {
494 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
495 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
496 return gsp->GetSelfAppVolumeLevel(volumeLevel);
497 }
498
GetAppVolumeLevel(int32_t appUid,int32_t & volumeLevel)499 int32_t AudioPolicyManager::GetAppVolumeLevel(int32_t appUid, int32_t &volumeLevel)
500 {
501 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
502 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
503 return gsp->GetAppVolumeLevel(appUid, volumeLevel);
504 }
505
GetSystemVolumeLevel(AudioVolumeType volumeType,int32_t uid)506 int32_t AudioPolicyManager::GetSystemVolumeLevel(AudioVolumeType volumeType, int32_t uid)
507 {
508 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
509 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
510
511 int32_t volumeLevel = -1;
512 gsp->GetSystemVolumeLevel(volumeType, uid, volumeLevel);
513 return volumeLevel;
514 }
515
GetSystemNotificationVolumeLevel(AudioVolumeType volumeType,int32_t uid)516 int32_t AudioPolicyManager::GetSystemNotificationVolumeLevel(AudioVolumeType volumeType, int32_t uid)
517 {
518 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
519 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
520
521 volumeType = STREAM_RING;
522 int32_t volumeLevel = -1;
523 gsp->GetSystemVolumeLevel(volumeType, uid, volumeLevel);
524 return volumeLevel;
525 }
526
SetStreamMute(AudioVolumeType volumeType,bool mute,bool isLegacy,const DeviceType & deviceType)527 int32_t AudioPolicyManager::SetStreamMute(AudioVolumeType volumeType, bool mute, bool isLegacy,
528 const DeviceType &deviceType)
529 {
530 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
531 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
532 if (isLegacy) {
533 return gsp->SetStreamMuteLegacy(volumeType, mute, deviceType);
534 }
535 return gsp->SetStreamMute(volumeType, mute, deviceType);
536 }
537
GetStreamMute(AudioVolumeType volumeType)538 bool AudioPolicyManager::GetStreamMute(AudioVolumeType volumeType)
539 {
540 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
541 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
542
543 bool mute = false;
544 gsp->GetStreamMute(volumeType, mute);
545 return mute;
546 }
547
SetLowPowerVolume(int32_t streamId,float volume)548 int32_t AudioPolicyManager::SetLowPowerVolume(int32_t streamId, float volume)
549 {
550 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
551 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
552 return gsp->SetLowPowerVolume(streamId, volume);
553 }
554
GetLowPowerVolume(int32_t streamId)555 float AudioPolicyManager::GetLowPowerVolume(int32_t streamId)
556 {
557 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
558 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
559
560 float outVolume = -1;
561 gsp->GetLowPowerVolume(streamId, outVolume);
562 return outVolume;
563 }
564
GetFastStreamInfo()565 AudioStreamInfo AudioPolicyManager::GetFastStreamInfo()
566 {
567 AudioStreamInfo streamInfo = {SAMPLE_RATE_48000, ENCODING_PCM, SAMPLE_S16LE, STEREO};
568 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
569 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, streamInfo, "audio policy manager proxy is NULL.");
570 gsp->GetFastStreamInfo(streamInfo);
571 return streamInfo;
572 }
573
GetSingleStreamVolume(int32_t streamId)574 float AudioPolicyManager::GetSingleStreamVolume(int32_t streamId)
575 {
576 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
577 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
578
579 float outVolume = -1;
580 gsp->GetSingleStreamVolume(streamId, outVolume);
581 return outVolume;
582 }
583
IsStreamActive(AudioVolumeType volumeType)584 bool AudioPolicyManager::IsStreamActive(AudioVolumeType volumeType)
585 {
586 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
587 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
588
589 bool active = false;
590 gsp->IsStreamActive(volumeType, active);
591 return active;
592 }
593
IsStreamActiveByStreamUsage(StreamUsage streamUsage)594 bool AudioPolicyManager::IsStreamActiveByStreamUsage(StreamUsage streamUsage)
595 {
596 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
597 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
598 bool active = false;
599 gsp->IsStreamActiveByStreamUsage(streamUsage, active);
600 return active;
601 }
602
IsFastPlaybackSupported(AudioStreamInfo & streamInfo,StreamUsage usage)603 bool AudioPolicyManager::IsFastPlaybackSupported(AudioStreamInfo &streamInfo, StreamUsage usage)
604 {
605 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
606 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
607
608 bool support = false;
609 gsp->IsFastPlaybackSupported(streamInfo, static_cast<int32_t>(usage), support);
610 return support;
611 }
612
IsFastRecordingSupported(AudioStreamInfo & streamInfo,SourceType source)613 bool AudioPolicyManager::IsFastRecordingSupported(AudioStreamInfo &streamInfo, SourceType source)
614 {
615 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
616 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
617
618 bool support = false;
619 gsp->IsFastRecordingSupported(streamInfo, static_cast<int32_t>(source), support);
620 return support;
621 }
622
GetAudioFocusInfoList(std::list<std::pair<AudioInterrupt,AudioFocuState>> & focusInfoList,const int32_t zoneID)623 int32_t AudioPolicyManager::GetAudioFocusInfoList(std::list<std::pair<AudioInterrupt, AudioFocuState>> &focusInfoList,
624 const int32_t zoneID)
625 {
626 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
627 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
628 auto ipcInterrupts = ToIpcInterrupts(focusInfoList);
629 int32_t ret = gsp->GetAudioFocusInfoList(ipcInterrupts, zoneID);
630 focusInfoList = FromIpcInterrupts(ipcInterrupts);
631 return ret;
632 }
633
SetClientCallbacksEnable(const CallbackChange & callbackchange,const bool & enable,bool block)634 int32_t AudioPolicyManager::SetClientCallbacksEnable(const CallbackChange &callbackchange,
635 const bool &enable, bool block)
636 {
637 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy(block);
638 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
639 return gsp->SetClientCallbacksEnable(callbackchange, enable);
640 }
641
SetCallbackRendererInfo(const AudioRendererInfo & rendererInfo)642 int32_t AudioPolicyManager::SetCallbackRendererInfo(const AudioRendererInfo &rendererInfo)
643 {
644 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
645 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
646 return gsp->SetCallbackRendererInfo(rendererInfo);
647 }
648
SetCallbackCapturerInfo(const AudioCapturerInfo & capturerInfo)649 int32_t AudioPolicyManager::SetCallbackCapturerInfo(const AudioCapturerInfo &capturerInfo)
650 {
651 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
652 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
653 return gsp->SetCallbackCapturerInfo(capturerInfo);
654 }
655
RegisterFocusInfoChangeCallback(const int32_t clientId,const std::shared_ptr<AudioFocusInfoChangeCallback> & callback)656 int32_t AudioPolicyManager::RegisterFocusInfoChangeCallback(const int32_t clientId,
657 const std::shared_ptr<AudioFocusInfoChangeCallback> &callback)
658 {
659 AUDIO_DEBUG_LOG("AudioPolicyManager::RegisterFocusInfoChangeCallback");
660 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM,
661 "RegisterFocusInfoChangeCallback: callback is nullptr");
662
663 if (!isAudioPolicyClientRegisted_) {
664 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
665 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
666 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
667 if (ret != SUCCESS) {
668 return ret;
669 }
670 }
671
672 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_FOCUS_INFO_CHANGE].mutex);
673 audioPolicyClientStubCB_->AddFocusInfoChangeCallback(callback);
674 size_t callbackSize = audioPolicyClientStubCB_->GetFocusInfoChangeCallbackSize();
675 if (callbackSize == 1) {
676 callbackChangeInfos_[CALLBACK_FOCUS_INFO_CHANGE].isEnable = true;
677 SetClientCallbacksEnable(CALLBACK_FOCUS_INFO_CHANGE, true);
678 }
679
680 return SUCCESS;
681 }
682
UnregisterFocusInfoChangeCallback(const int32_t clientId)683 int32_t AudioPolicyManager::UnregisterFocusInfoChangeCallback(const int32_t clientId)
684 {
685 AUDIO_DEBUG_LOG("AudioPolicyManager::UnregisterFocusInfoChangeCallback");
686 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_FOCUS_INFO_CHANGE].mutex);
687 if (audioPolicyClientStubCB_ != nullptr) {
688 audioPolicyClientStubCB_->RemoveFocusInfoChangeCallback();
689 if (audioPolicyClientStubCB_->GetFocusInfoChangeCallbackSize() == 0) {
690 callbackChangeInfos_[CALLBACK_FOCUS_INFO_CHANGE].isEnable = false;
691 SetClientCallbacksEnable(CALLBACK_FOCUS_INFO_CHANGE, false, false);
692 }
693 }
694 return SUCCESS;
695 }
696
697 #ifdef FEATURE_DTMF_TONE
GetSupportedTones(const std::string & countryCode)698 std::vector<int32_t> AudioPolicyManager::GetSupportedTones(const std::string &countryCode)
699 {
700 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
701 std::vector<int> lSupportedToneList = {};
702 if (gsp == nullptr) {
703 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
704 return lSupportedToneList;
705 }
706
707 gsp->GetSupportedTones(countryCode, lSupportedToneList);
708
709 int32_t lListSize = static_cast<int32_t>(lSupportedToneList.size());
710 CHECK_AND_RETURN_RET_LOG(lListSize >= 0 && lListSize <= static_cast<int32_t>(MAX_SUPPORTED_TONEINFO_SIZE),
711 {}, "supported tone size exceed limits");
712
713 return lSupportedToneList;
714 }
715
GetToneConfig(int32_t ltonetype,const std::string & countryCode)716 std::shared_ptr<ToneInfo> AudioPolicyManager::GetToneConfig(int32_t ltonetype, const std::string &countryCode)
717 {
718 AUDIO_DEBUG_LOG("AudioPolicyManager::GetToneConfig");
719 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
720 std::shared_ptr<ToneInfo> config = nullptr;
721 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, nullptr, "audio policy manager proxy is NULL.");
722
723 gsp->GetToneConfig(ltonetype, countryCode, config);
724 return config;
725 }
726 #endif
727
SetActiveVolumeTypeCallback(const std::shared_ptr<AudioManagerActiveVolumeTypeChangeCallback> & callback)728 int32_t AudioPolicyManager::SetActiveVolumeTypeCallback(
729 const std::shared_ptr<AudioManagerActiveVolumeTypeChangeCallback> &callback)
730 {
731 AUDIO_DEBUG_LOG("enter set active volume type change callback");
732 if (!PermissionUtil::VerifySystemPermission()) {
733 AUDIO_ERR_LOG("No system permission");
734 return ERR_PERMISSION_DENIED;
735 }
736 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
737 if (!isAudioPolicyClientRegisted_) {
738 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
739 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
740 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
741 if (ret != SUCCESS) {
742 return ret;
743 }
744 }
745
746 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_ACTIVE_VOLUME_TYPE_CHANGE].mutex);
747 if (audioPolicyClientStubCB_ != nullptr) {
748 audioPolicyClientStubCB_->AddActiveVolumeTypeChangeCallback(callback);
749 size_t callbackSize = audioPolicyClientStubCB_->GetActiveVolumeTypeChangeCallbackSize();
750 if (callbackSize == 1) {
751 callbackChangeInfos_[CALLBACK_ACTIVE_VOLUME_TYPE_CHANGE].isEnable = true;
752 SetClientCallbacksEnable(CALLBACK_ACTIVE_VOLUME_TYPE_CHANGE, true);
753 }
754 }
755 return SUCCESS;
756 }
757
UnsetActiveVolumeTypeCallback(const std::shared_ptr<AudioManagerActiveVolumeTypeChangeCallback> & callback)758 int32_t AudioPolicyManager::UnsetActiveVolumeTypeCallback(
759 const std::shared_ptr<AudioManagerActiveVolumeTypeChangeCallback> &callback)
760 {
761 AUDIO_DEBUG_LOG("enter unset active volume type change callback");
762 if (!PermissionUtil::VerifySystemPermission()) {
763 AUDIO_ERR_LOG("No system permission");
764 return ERR_PERMISSION_DENIED;
765 }
766 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_ACTIVE_VOLUME_TYPE_CHANGE].mutex);
767 if (audioPolicyClientStubCB_ == nullptr) {
768 AUDIO_ERR_LOG("audioPolicyClientStubCB_ is error");
769 return ERR_NULL_POINTER;
770 }
771 if (callback != nullptr) {
772 AUDIO_DEBUG_LOG("callback is not null");
773 audioPolicyClientStubCB_->RemoveActiveVolumeTypeChangeCallback(callback);
774 } else {
775 AUDIO_DEBUG_LOG("callback is null");
776 audioPolicyClientStubCB_->RemoveAllActiveVolumeTypeChangeCallback();
777 }
778 if (audioPolicyClientStubCB_->GetActiveVolumeTypeChangeCallbackSize() == 0) {
779 AUDIO_DEBUG_LOG("active volumeType change callback list is empty");
780 callbackChangeInfos_[CALLBACK_ACTIVE_VOLUME_TYPE_CHANGE].isEnable = false;
781 SetClientCallbacksEnable(CALLBACK_ACTIVE_VOLUME_TYPE_CHANGE, false);
782 }
783 return SUCCESS;
784 }
785
SetSelfAppVolumeChangeCallback(const std::shared_ptr<AudioManagerAppVolumeChangeCallback> & callback)786 int32_t AudioPolicyManager::SetSelfAppVolumeChangeCallback(
787 const std::shared_ptr<AudioManagerAppVolumeChangeCallback> &callback)
788 {
789 AUDIO_DEBUG_LOG("enter set self volume change callback");
790 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
791 if (!isAudioPolicyClientRegisted_) {
792 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
793 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
794 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
795 if (ret != SUCCESS) {
796 return ret;
797 }
798 }
799
800 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SELF_APP_VOLUME_CHANGE].mutex);
801 if (audioPolicyClientStubCB_ != nullptr) {
802 audioPolicyClientStubCB_->AddSelfAppVolumeChangeCallback(getuid(), callback);
803 size_t callbackSize = audioPolicyClientStubCB_->GetSelfAppVolumeChangeCallbackSize();
804 if (callbackSize == 1) {
805 callbackChangeInfos_[CALLBACK_SELF_APP_VOLUME_CHANGE].isEnable = true;
806 SetClientCallbacksEnable(CALLBACK_SELF_APP_VOLUME_CHANGE, true);
807 }
808 }
809 return SUCCESS;
810 }
811
UnsetSelfAppVolumeCallback(const std::shared_ptr<AudioManagerAppVolumeChangeCallback> & callback)812 int32_t AudioPolicyManager::UnsetSelfAppVolumeCallback(
813 const std::shared_ptr<AudioManagerAppVolumeChangeCallback> &callback)
814 {
815 AUDIO_DEBUG_LOG("enter unset self volume change callback");
816 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SELF_APP_VOLUME_CHANGE].mutex);
817 if (audioPolicyClientStubCB_ == nullptr) {
818 AUDIO_ERR_LOG("audioPolicyClientStubCB_ is error");
819 return ERR_NULL_POINTER;
820 }
821 if (callback != nullptr) {
822 AUDIO_DEBUG_LOG("callback is not null");
823 audioPolicyClientStubCB_->RemoveSelfAppVolumeChangeCallback(getuid(), callback);
824 } else {
825 AUDIO_DEBUG_LOG("callback is null");
826 audioPolicyClientStubCB_->RemoveAllSelfAppVolumeChangeCallback(getuid());
827 }
828 if (audioPolicyClientStubCB_->GetSelfAppVolumeChangeCallbackSize() == 0) {
829 callbackChangeInfos_[CALLBACK_SELF_APP_VOLUME_CHANGE].isEnable = false;
830 SetClientCallbacksEnable(CALLBACK_SELF_APP_VOLUME_CHANGE, false);
831 }
832 return SUCCESS;
833 }
834
UnsetAppVolumeCallbackForUid(const std::shared_ptr<AudioManagerAppVolumeChangeCallback> & callback)835 int32_t AudioPolicyManager::UnsetAppVolumeCallbackForUid(
836 const std::shared_ptr<AudioManagerAppVolumeChangeCallback> &callback)
837 {
838 AUDIO_DEBUG_LOG("enter");
839 if (!PermissionUtil::VerifySystemPermission()) {
840 AUDIO_ERR_LOG("SetAppVolumeChangeCallbackForUid: No system permission");
841 return ERR_PERMISSION_DENIED;
842 }
843 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_APP_VOLUME_CHANGE].mutex);
844 if (audioPolicyClientStubCB_ == nullptr) {
845 AUDIO_ERR_LOG("audioPolicyClientStubCB_ is error");
846 return ERR_NULL_POINTER;
847 }
848 if (callback != nullptr) {
849 audioPolicyClientStubCB_->RemoveAppVolumeChangeForUidCallback(callback);
850 } else {
851 audioPolicyClientStubCB_->RemoveAllAppVolumeChangeForUidCallback();
852 }
853 if (audioPolicyClientStubCB_->GetAppVolumeChangeCallbackForUidSize() == 0) {
854 callbackChangeInfos_[CALLBACK_APP_VOLUME_CHANGE].isEnable = false;
855 SetClientCallbacksEnable(CALLBACK_APP_VOLUME_CHANGE, false);
856 }
857 return SUCCESS;
858 }
859
SetAppVolumeChangeCallbackForUid(const int32_t appUid,const std::shared_ptr<AudioManagerAppVolumeChangeCallback> & callback)860 int32_t AudioPolicyManager::SetAppVolumeChangeCallbackForUid(const int32_t appUid,
861 const std::shared_ptr<AudioManagerAppVolumeChangeCallback> &callback)
862 {
863 AUDIO_DEBUG_LOG("enter set volume change callback for uid");
864 if (!PermissionUtil::VerifySystemPermission()) {
865 AUDIO_ERR_LOG("SetAppVolumeChangeCallbackForUid: No system permission");
866 return ERR_PERMISSION_DENIED;
867 }
868 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
869
870 if (!isAudioPolicyClientRegisted_) {
871 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
872 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
873 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
874 if (ret != SUCCESS) {
875 return ret;
876 }
877 }
878
879 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_APP_VOLUME_CHANGE].mutex);
880 if (audioPolicyClientStubCB_ != nullptr) {
881 audioPolicyClientStubCB_->AddAppVolumeChangeForUidCallback(appUid, callback);
882 size_t callbackSize = audioPolicyClientStubCB_->GetAppVolumeChangeCallbackForUidSize();
883 if (callbackSize == 1) {
884 callbackChangeInfos_[CALLBACK_APP_VOLUME_CHANGE].isEnable = true;
885 SetClientCallbacksEnable(CALLBACK_APP_VOLUME_CHANGE, true);
886 }
887 }
888 return SUCCESS;
889 }
890
SetRingerModeCallback(const int32_t clientId,const std::shared_ptr<AudioRingerModeCallback> & callback,API_VERSION api_v)891 int32_t AudioPolicyManager::SetRingerModeCallback(const int32_t clientId,
892 const std::shared_ptr<AudioRingerModeCallback> &callback, API_VERSION api_v)
893 {
894 AUDIO_DEBUG_LOG("AudioPolicyManager::SetRingerModeCallback");
895 if (api_v == API_8 && !PermissionUtil::VerifySystemPermission()) {
896 AUDIO_ERR_LOG("SetRingerModeCallback: No system permission");
897 return ERR_PERMISSION_DENIED;
898 }
899
900 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
901
902 if (!isAudioPolicyClientRegisted_) {
903 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
904 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
905 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
906 if (ret != SUCCESS) {
907 return ret;
908 }
909 }
910 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_RINGER_MODE].mutex);
911 if (audioPolicyClientStubCB_ != nullptr) {
912 audioPolicyClientStubCB_->AddRingerModeCallback(callback);
913 size_t callbackSize = audioPolicyClientStubCB_->GetRingerModeCallbackSize();
914 if (callbackSize == 1) {
915 callbackChangeInfos_[CALLBACK_SET_RINGER_MODE].isEnable = true;
916 SetClientCallbacksEnable(CALLBACK_SET_RINGER_MODE, true);
917 }
918 }
919 return SUCCESS;
920 }
921
UnsetRingerModeCallback(const int32_t clientId)922 int32_t AudioPolicyManager::UnsetRingerModeCallback(const int32_t clientId)
923 {
924 AUDIO_DEBUG_LOG("Remove all ringer mode callbacks");
925 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_RINGER_MODE].mutex);
926 if (audioPolicyClientStubCB_ != nullptr) {
927 audioPolicyClientStubCB_->RemoveRingerModeCallback();
928 if (audioPolicyClientStubCB_->GetRingerModeCallbackSize() == 0) {
929 callbackChangeInfos_[CALLBACK_SET_RINGER_MODE].isEnable = false;
930 SetClientCallbacksEnable(CALLBACK_SET_RINGER_MODE, false);
931 }
932 }
933 return SUCCESS;
934 }
935
UnsetRingerModeCallback(const int32_t clientId,const std::shared_ptr<AudioRingerModeCallback> & callback)936 int32_t AudioPolicyManager::UnsetRingerModeCallback(const int32_t clientId,
937 const std::shared_ptr<AudioRingerModeCallback> &callback)
938 {
939 AUDIO_DEBUG_LOG("Remove one ringer mode callback");
940 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_RINGER_MODE].mutex);
941 if (audioPolicyClientStubCB_ != nullptr) {
942 audioPolicyClientStubCB_->RemoveRingerModeCallback(callback);
943 if (audioPolicyClientStubCB_->GetRingerModeCallbackSize() == 0) {
944 callbackChangeInfos_[CALLBACK_SET_RINGER_MODE].isEnable = false;
945 SetClientCallbacksEnable(CALLBACK_SET_RINGER_MODE, false);
946 }
947 }
948 return SUCCESS;
949 }
950
SetMicrophoneBlockedCallback(const int32_t clientId,const std::shared_ptr<AudioManagerMicrophoneBlockedCallback> & callback)951 int32_t AudioPolicyManager::SetMicrophoneBlockedCallback(const int32_t clientId,
952 const std::shared_ptr<AudioManagerMicrophoneBlockedCallback> &callback)
953 {
954 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
955 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
956 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM,
957 "SetMicrophoneBlockedCallback: callback is nullptr");
958 if (!isAudioPolicyClientRegisted_) {
959 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
960 if (ret != SUCCESS) {
961 return ret;
962 }
963 }
964 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_MICROPHONE_BLOCKED].mutex);
965 if (audioPolicyClientStubCB_ != nullptr) {
966 audioPolicyClientStubCB_->AddMicrophoneBlockedCallback(clientId, callback);
967 size_t callbackSize = audioPolicyClientStubCB_->GetMicrophoneBlockedCallbackSize();
968 if (callbackSize == 1) {
969 callbackChangeInfos_[CALLBACK_SET_MICROPHONE_BLOCKED].isEnable = true;
970 SetClientCallbacksEnable(CALLBACK_SET_MICROPHONE_BLOCKED, true);
971 }
972 }
973 return SUCCESS;
974 }
975
UnsetMicrophoneBlockedCallback(const int32_t clientId,const std::shared_ptr<AudioManagerMicrophoneBlockedCallback> & callback)976 int32_t AudioPolicyManager::UnsetMicrophoneBlockedCallback(const int32_t clientId,
977 const std::shared_ptr<AudioManagerMicrophoneBlockedCallback> &callback)
978 {
979 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_MICROPHONE_BLOCKED].mutex);
980 if (audioPolicyClientStubCB_ != nullptr) {
981 audioPolicyClientStubCB_->RemoveMicrophoneBlockedCallback(clientId, callback);
982 if (audioPolicyClientStubCB_->GetMicrophoneBlockedCallbackSize() == 0) {
983 callbackChangeInfos_[CALLBACK_SET_MICROPHONE_BLOCKED].isEnable = false;
984 SetClientCallbacksEnable(CALLBACK_SET_MICROPHONE_BLOCKED, false);
985 }
986 }
987 return SUCCESS;
988 }
989
SetAudioSceneChangeCallback(const int32_t clientId,const std::shared_ptr<AudioManagerAudioSceneChangedCallback> & callback)990 int32_t AudioPolicyManager::SetAudioSceneChangeCallback(const int32_t clientId,
991 const std::shared_ptr<AudioManagerAudioSceneChangedCallback> &callback)
992 {
993 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
994 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
995 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM,
996 "AudioManagerAudioSceneChangedCallback: callback is nullptr");
997 if (!isAudioPolicyClientRegisted_) {
998 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
999 if (ret != SUCCESS) {
1000 return ret;
1001 }
1002 }
1003 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_AUDIO_SCENE_CHANGE].mutex);
1004 if (audioPolicyClientStubCB_ != nullptr) {
1005 audioPolicyClientStubCB_->AddAudioSceneChangedCallback(clientId, callback);
1006 size_t callbackSize = audioPolicyClientStubCB_->GetAudioSceneChangedCallbackSize();
1007 if (callbackSize == 1) {
1008 callbackChangeInfos_[CALLBACK_SET_AUDIO_SCENE_CHANGE].isEnable = true;
1009 SetClientCallbacksEnable(CALLBACK_SET_AUDIO_SCENE_CHANGE, true);
1010 }
1011 }
1012 return SUCCESS;
1013 }
1014
UnsetAudioSceneChangeCallback(const std::shared_ptr<AudioManagerAudioSceneChangedCallback> & callback)1015 int32_t AudioPolicyManager::UnsetAudioSceneChangeCallback(
1016 const std::shared_ptr<AudioManagerAudioSceneChangedCallback> &callback)
1017 {
1018 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_AUDIO_SCENE_CHANGE].mutex);
1019 if (audioPolicyClientStubCB_ != nullptr) {
1020 audioPolicyClientStubCB_->RemoveAudioSceneChangedCallback(callback);
1021 if (audioPolicyClientStubCB_->GetAudioSceneChangedCallbackSize() == 0) {
1022 callbackChangeInfos_[CALLBACK_SET_AUDIO_SCENE_CHANGE].isEnable = false;
1023 SetClientCallbacksEnable(CALLBACK_SET_AUDIO_SCENE_CHANGE, false);
1024 }
1025 }
1026 return SUCCESS;
1027 }
1028
SetMicStateChangeCallback(const int32_t clientId,const std::shared_ptr<AudioManagerMicStateChangeCallback> & callback)1029 int32_t AudioPolicyManager::SetMicStateChangeCallback(const int32_t clientId,
1030 const std::shared_ptr<AudioManagerMicStateChangeCallback> &callback)
1031 {
1032 AUDIO_DEBUG_LOG("AudioPolicyManager::SetMicStateChangeCallback");
1033 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
1034
1035 if (!isAudioPolicyClientRegisted_) {
1036 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1037 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1038 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
1039 if (ret != SUCCESS) {
1040 return ret;
1041 }
1042 }
1043
1044 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_MIC_STATE_CHANGE].mutex);
1045 if (audioPolicyClientStubCB_ != nullptr) {
1046 audioPolicyClientStubCB_->AddMicStateChangeCallback(callback);
1047 size_t callbackSize = audioPolicyClientStubCB_->GetMicStateChangeCallbackSize();
1048 if (callbackSize == 1) {
1049 callbackChangeInfos_[CALLBACK_SET_MIC_STATE_CHANGE].isEnable = true;
1050 SetClientCallbacksEnable(CALLBACK_SET_MIC_STATE_CHANGE, true);
1051 }
1052 }
1053 return SUCCESS;
1054 }
1055
UnsetMicStateChangeCallback(const std::shared_ptr<AudioManagerMicStateChangeCallback> & callback)1056 int32_t AudioPolicyManager::UnsetMicStateChangeCallback(
1057 const std::shared_ptr<AudioManagerMicStateChangeCallback> &callback)
1058 {
1059 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1060 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1061 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
1062 CHECK_AND_RETURN_RET_LOG(audioPolicyClientStubCB_ != nullptr, ERR_INVALID_OPERATION,
1063 "audioPolicyClientStubCB is nullptr");
1064 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_MIC_STATE_CHANGE].mutex);
1065 if (audioPolicyClientStubCB_ != nullptr) {
1066 audioPolicyClientStubCB_->RemoveMicStateChangeCallback();
1067 if (audioPolicyClientStubCB_->GetMicStateChangeCallbackSize() == 0) {
1068 callbackChangeInfos_[CALLBACK_SET_MIC_STATE_CHANGE].isEnable = false;
1069 SetClientCallbacksEnable(CALLBACK_SET_MIC_STATE_CHANGE, false);
1070 }
1071 }
1072 return SUCCESS;
1073 }
1074
SetAudioInterruptCallback(const uint32_t sessionID,const std::shared_ptr<AudioInterruptCallback> & callback,uint32_t clientUid,const int32_t zoneID)1075 int32_t AudioPolicyManager::SetAudioInterruptCallback(const uint32_t sessionID,
1076 const std::shared_ptr<AudioInterruptCallback> &callback, uint32_t clientUid, const int32_t zoneID)
1077 {
1078 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1079 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1080 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
1081
1082 sptr<AudioPolicyManagerListenerStubImpl> listener = new(std::nothrow) AudioPolicyManagerListenerStubImpl();
1083 CHECK_AND_RETURN_RET_LOG(listener != nullptr, ERROR, "object null");
1084 listener->SetInterruptCallback(callback);
1085
1086 sptr<IRemoteObject> object = listener->AsObject();
1087 CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "listenerStub->AsObject is nullptr..");
1088 return gsp->SetAudioInterruptCallback(sessionID, object, clientUid, zoneID);
1089 }
1090
UnsetAudioInterruptCallback(const uint32_t sessionID,const int32_t zoneID)1091 int32_t AudioPolicyManager::UnsetAudioInterruptCallback(const uint32_t sessionID, const int32_t zoneID)
1092 {
1093 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1094 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1095 return gsp->UnsetAudioInterruptCallback(sessionID, zoneID);
1096 }
1097
SetAudioRouteCallback(uint32_t sessionId,std::shared_ptr<AudioRouteCallback> callback,uint32_t clientUid)1098 int32_t AudioPolicyManager::SetAudioRouteCallback(uint32_t sessionId, std::shared_ptr<AudioRouteCallback> callback,
1099 uint32_t clientUid)
1100 {
1101 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1102 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1103 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
1104
1105 sptr<AudioPolicyManagerListenerStubImpl> listener = new(std::nothrow) AudioPolicyManagerListenerStubImpl();
1106 CHECK_AND_RETURN_RET_LOG(listener != nullptr, ERROR, "object null");
1107 listener->SetAudioRouteCallback(callback);
1108
1109 sptr<IRemoteObject> object = listener->AsObject();
1110 CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "listenerStub->AsObject is nullptr..");
1111 return gsp->SetAudioRouteCallback(sessionId, object, clientUid);
1112 }
1113
UnsetAudioRouteCallback(uint32_t sessionId)1114 int32_t AudioPolicyManager::UnsetAudioRouteCallback(uint32_t sessionId)
1115 {
1116 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1117 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1118 return gsp->UnsetAudioRouteCallback(sessionId);
1119 }
1120
SetQueryClientTypeCallback(const std::shared_ptr<AudioQueryClientTypeCallback> & callback)1121 int32_t AudioPolicyManager::SetQueryClientTypeCallback(const std::shared_ptr<AudioQueryClientTypeCallback> &callback)
1122 {
1123 AUDIO_INFO_LOG("In");
1124 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1125 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1126 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
1127
1128 sptr<AudioPolicyManagerListenerStubImpl> listener = new(std::nothrow) AudioPolicyManagerListenerStubImpl();
1129 CHECK_AND_RETURN_RET_LOG(listener != nullptr, ERROR, "object null");
1130 listener->SetQueryClientTypeCallback(callback);
1131
1132 sptr<IRemoteObject> object = listener->AsObject();
1133 CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "listenerStub->AsObject is nullptr.");
1134
1135 return gsp->SetQueryClientTypeCallback(object);
1136 }
1137
SetQueryBundleNameListCallback(const std::shared_ptr<AudioQueryBundleNameListCallback> & callback)1138 int32_t AudioPolicyManager::SetQueryBundleNameListCallback(
1139 const std::shared_ptr<AudioQueryBundleNameListCallback> &callback)
1140 {
1141 AUDIO_INFO_LOG("In");
1142 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1143 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1144 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
1145
1146 sptr<AudioPolicyManagerListenerStubImpl> listener = new(std::nothrow) AudioPolicyManagerListenerStubImpl();
1147 CHECK_AND_RETURN_RET_LOG(listener != nullptr, ERROR, "object null");
1148 listener->SetQueryBundleNameListCallback(callback);
1149
1150 sptr<IRemoteObject> object = listener->AsObject();
1151 CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "listenerStub->AsObject is nullptr.");
1152
1153 return gsp->SetQueryBundleNameListCallback(object);
1154 }
1155
ActivateAudioInterrupt(AudioInterrupt & audioInterrupt,const int32_t zoneID,const bool isUpdatedAudioStrategy)1156 int32_t AudioPolicyManager::ActivateAudioInterrupt(
1157 AudioInterrupt &audioInterrupt, const int32_t zoneID, const bool isUpdatedAudioStrategy)
1158 {
1159 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1160 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1161 return gsp->ActivateAudioInterrupt(audioInterrupt, zoneID, isUpdatedAudioStrategy);
1162 }
1163
SetAppConcurrencyMode(const int32_t appUid,const int32_t mode)1164 int32_t AudioPolicyManager::SetAppConcurrencyMode(const int32_t appUid, const int32_t mode)
1165 {
1166 AudioConcurrencyMode audioConcurrencyMode = static_cast<AudioConcurrencyMode>(mode);
1167 CHECK_AND_RETURN_RET_LOG((audioConcurrencyMode == AudioConcurrencyMode::DEFAULT ||
1168 audioConcurrencyMode == AudioConcurrencyMode::STANDALONE), -1, "mode is illegal parameters");
1169 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1170 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1171 if (!isAudioPolicyClientRegisted_) {
1172 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
1173 if (ret != SUCCESS) {
1174 return ret;
1175 }
1176 }
1177 return gsp->SetAppConcurrencyMode(appUid, mode);
1178 }
1179
SetAppSlientOnDisplay(const int32_t displayId)1180 int32_t AudioPolicyManager::SetAppSlientOnDisplay(const int32_t displayId)
1181 {
1182 CHECK_AND_RETURN_RET_LOG((displayId > 0 || displayId == -1), -1,
1183 "mode is illegal parameters");
1184 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1185 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1186 if (!isAudioPolicyClientRegisted_) {
1187 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
1188 if (ret != SUCCESS) {
1189 return ret;
1190 }
1191 }
1192 return gsp->SetAppSlientOnDisplay(displayId);
1193 }
1194
DeactivateAudioInterrupt(const AudioInterrupt & audioInterrupt,const int32_t zoneID)1195 int32_t AudioPolicyManager::DeactivateAudioInterrupt(const AudioInterrupt &audioInterrupt, const int32_t zoneID)
1196 {
1197 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1198 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1199 return gsp->DeactivateAudioInterrupt(audioInterrupt, zoneID);
1200 }
1201
ActivatePreemptMode()1202 int32_t AudioPolicyManager::ActivatePreemptMode()
1203 {
1204 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1205 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1206 return gsp->ActivatePreemptMode();
1207 }
1208
DeactivatePreemptMode()1209 int32_t AudioPolicyManager::DeactivatePreemptMode()
1210 {
1211 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1212 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1213 return gsp->DeactivatePreemptMode();
1214 }
1215
SetAudioManagerInterruptCallback(const int32_t clientId,const std::shared_ptr<AudioInterruptCallback> & callback)1216 int32_t AudioPolicyManager::SetAudioManagerInterruptCallback(const int32_t clientId,
1217 const std::shared_ptr<AudioInterruptCallback> &callback)
1218 {
1219 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1220 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1221 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
1222
1223 std::unique_lock<std::mutex> lock(listenerStubMutex_);
1224 sptr<AudioPolicyManagerListenerStubImpl> interruptListenerStub =
1225 new(std::nothrow) AudioPolicyManagerListenerStubImpl();
1226 CHECK_AND_RETURN_RET_LOG(interruptListenerStub != nullptr, ERROR, "object null");
1227 interruptListenerStub->SetInterruptCallback(callback);
1228
1229 sptr<IRemoteObject> object = interruptListenerStub->AsObject();
1230 CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "onInterruptListenerStub->AsObject is nullptr.");
1231 lock.unlock();
1232
1233 return gsp->SetAudioManagerInterruptCallback(clientId, object);
1234 }
1235
UnsetAudioManagerInterruptCallback(const int32_t clientId)1236 int32_t AudioPolicyManager::UnsetAudioManagerInterruptCallback(const int32_t clientId)
1237 {
1238 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1239 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1240 return gsp->UnsetAudioManagerInterruptCallback(clientId);
1241 }
1242
CheckVKBInfo(const std::string & bundleName,bool & isValid)1243 int32_t AudioPolicyManager::CheckVKBInfo(const std::string &bundleName, bool &isValid)
1244 {
1245 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1246 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1247 return gsp->CheckVKBInfo(bundleName, isValid);
1248 }
1249
RequestAudioFocus(const int32_t clientId,const AudioInterrupt & audioInterrupt)1250 int32_t AudioPolicyManager::RequestAudioFocus(const int32_t clientId, const AudioInterrupt &audioInterrupt)
1251 {
1252 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1253 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1254 return gsp->RequestAudioFocus(clientId, audioInterrupt);
1255 }
1256
AbandonAudioFocus(const int32_t clientId,const AudioInterrupt & audioInterrupt)1257 int32_t AudioPolicyManager::AbandonAudioFocus(const int32_t clientId, const AudioInterrupt &audioInterrupt)
1258 {
1259 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1260 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1261 return gsp->AbandonAudioFocus(clientId, audioInterrupt);
1262 }
1263
GetStreamInFocus(const int32_t zoneID)1264 AudioStreamType AudioPolicyManager::GetStreamInFocus(const int32_t zoneID)
1265 {
1266 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1267 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, STREAM_DEFAULT, "audio policy manager proxy is NULL.");
1268 int32_t out = STREAM_DEFAULT;
1269 gsp->GetStreamInFocus(zoneID, out);
1270 return static_cast<AudioStreamType>(out);
1271 }
1272
GetStreamInFocusByUid(const int32_t uid,const int32_t zoneID)1273 AudioStreamType AudioPolicyManager::GetStreamInFocusByUid(const int32_t uid, const int32_t zoneID)
1274 {
1275 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1276 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, STREAM_DEFAULT, "audio policy manager proxy is NULL.");
1277 int32_t out = STREAM_DEFAULT;
1278 gsp->GetStreamInFocusByUid(uid, zoneID, out);
1279 return static_cast<AudioStreamType>(out);
1280 }
1281
GetSessionInfoInFocus(AudioInterrupt & audioInterrupt,const int32_t zoneID)1282 int32_t AudioPolicyManager::GetSessionInfoInFocus(AudioInterrupt &audioInterrupt, const int32_t zoneID)
1283 {
1284 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1285 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1286 return gsp->GetSessionInfoInFocus(audioInterrupt, zoneID);
1287 }
1288
SetVolumeKeyEventCallback(const int32_t clientPid,const std::shared_ptr<VolumeKeyEventCallback> & callback,API_VERSION api_v)1289 int32_t AudioPolicyManager::SetVolumeKeyEventCallback(const int32_t clientPid,
1290 const std::shared_ptr<VolumeKeyEventCallback> &callback, API_VERSION api_v)
1291 {
1292 AUDIO_INFO_LOG("SetVolumeKeyEventCallback: client: %{public}d", clientPid);
1293 if (api_v == API_8 && !PermissionUtil::VerifySystemPermission()) {
1294 AUDIO_ERR_LOG("SetVolumeKeyEventCallback: No system permission");
1295 return ERR_PERMISSION_DENIED;
1296 }
1297 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "volume back is nullptr");
1298
1299 if (!isAudioPolicyClientRegisted_) {
1300 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1301 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1302 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
1303 if (ret != SUCCESS) {
1304 return ret;
1305 }
1306 }
1307
1308 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_VOLUME_KEY_EVENT].mutex);
1309 if (audioPolicyClientStubCB_ != nullptr) {
1310 audioPolicyClientStubCB_->AddVolumeKeyEventCallback(callback);
1311 size_t callbackSize = audioPolicyClientStubCB_->GetVolumeKeyEventCallbackSize();
1312 if (callbackSize == 1) {
1313 callbackChangeInfos_[CALLBACK_SET_VOLUME_KEY_EVENT].isEnable = true;
1314 SetClientCallbacksEnable(CALLBACK_SET_VOLUME_KEY_EVENT, true);
1315 }
1316 }
1317 return SUCCESS;
1318 }
1319
UnsetVolumeKeyEventCallback(const std::shared_ptr<VolumeKeyEventCallback> & callback)1320 int32_t AudioPolicyManager::UnsetVolumeKeyEventCallback(
1321 const std::shared_ptr<VolumeKeyEventCallback> &callback)
1322 {
1323 AUDIO_DEBUG_LOG("UnsetVolumeKeyEventCallback");
1324 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_VOLUME_KEY_EVENT].mutex);
1325 if (audioPolicyClientStubCB_ != nullptr) {
1326 audioPolicyClientStubCB_->RemoveVolumeKeyEventCallback(callback);
1327 if (audioPolicyClientStubCB_->GetVolumeKeyEventCallbackSize() == 0) {
1328 callbackChangeInfos_[CALLBACK_SET_VOLUME_KEY_EVENT].isEnable = false;
1329 SetClientCallbacksEnable(CALLBACK_SET_VOLUME_KEY_EVENT, false, false);
1330 }
1331 }
1332 return SUCCESS;
1333 }
1334
SetSystemVolumeChangeCallback(const int32_t clientPid,const std::shared_ptr<SystemVolumeChangeCallback> & callback)1335 int32_t AudioPolicyManager::SetSystemVolumeChangeCallback(const int32_t clientPid,
1336 const std::shared_ptr<SystemVolumeChangeCallback> &callback)
1337 {
1338 AUDIO_INFO_LOG("SetSystemVolumeChangeCallback: client: %{public}d", clientPid);
1339 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "systemVolumeChange callback is nullptr");
1340
1341 if (!isAudioPolicyClientRegisted_) {
1342 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1343 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1344 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
1345 if (ret != SUCCESS) {
1346 return ret;
1347 }
1348 }
1349
1350 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SYSTEM_VOLUME_CHANGE].mutex);
1351 if (audioPolicyClientStubCB_ != nullptr) {
1352 audioPolicyClientStubCB_->AddSystemVolumeChangeCallback(callback);
1353 size_t callbackSize = audioPolicyClientStubCB_->GetSystemVolumeChangeCallbackSize();
1354 if (callbackSize == 1) {
1355 callbackChangeInfos_[CALLBACK_SYSTEM_VOLUME_CHANGE].isEnable = true;
1356 SetClientCallbacksEnable(CALLBACK_SYSTEM_VOLUME_CHANGE, true);
1357 }
1358 }
1359 return SUCCESS;
1360 }
1361
UnsetSystemVolumeChangeCallback(const std::shared_ptr<SystemVolumeChangeCallback> & callback)1362 int32_t AudioPolicyManager::UnsetSystemVolumeChangeCallback
1363 (const std::shared_ptr<SystemVolumeChangeCallback> &callback)
1364 {
1365 AUDIO_DEBUG_LOG("UnsetSystemVolumeChangeCallback");
1366 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SYSTEM_VOLUME_CHANGE].mutex);
1367 if (audioPolicyClientStubCB_ != nullptr) {
1368 audioPolicyClientStubCB_->RemoveSystemVolumeChangeCallback(callback);
1369 if (audioPolicyClientStubCB_->GetSystemVolumeChangeCallbackSize() == 0) {
1370 callbackChangeInfos_[CALLBACK_SYSTEM_VOLUME_CHANGE].isEnable = false;
1371 SetClientCallbacksEnable(CALLBACK_SYSTEM_VOLUME_CHANGE, false);
1372 }
1373 }
1374 return SUCCESS;
1375 }
1376
RegisterAudioRendererEventListener(const std::shared_ptr<AudioRendererStateChangeCallback> & callback)1377 int32_t AudioPolicyManager::RegisterAudioRendererEventListener(
1378 const std::shared_ptr<AudioRendererStateChangeCallback> &callback)
1379 {
1380 AUDIO_DEBUG_LOG("in");
1381 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "RendererEvent Listener callback is nullptr");
1382
1383 if (!isAudioPolicyClientRegisted_) {
1384 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1385 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1386 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
1387 if (ret != SUCCESS) {
1388 return ret;
1389 }
1390 }
1391
1392 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_RENDERER_STATE_CHANGE].mutex);
1393 audioPolicyClientStubCB_->AddRendererStateChangeCallback(callback);
1394 size_t callbackSize = audioPolicyClientStubCB_->GetRendererStateChangeCallbackSize();
1395 if (callbackSize == 1) {
1396 callbackChangeInfos_[CALLBACK_RENDERER_STATE_CHANGE].isEnable = true;
1397 SetClientCallbacksEnable(CALLBACK_RENDERER_STATE_CHANGE, true);
1398 }
1399 isAudioRendererEventListenerRegistered = true;
1400 return SUCCESS;
1401 }
1402
UnregisterAudioRendererEventListener(const std::vector<std::shared_ptr<AudioRendererStateChangeCallback>> & callbacks)1403 int32_t AudioPolicyManager::UnregisterAudioRendererEventListener(
1404 const std::vector<std::shared_ptr<AudioRendererStateChangeCallback>> &callbacks)
1405 {
1406 AUDIO_DEBUG_LOG("in");
1407 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_RENDERER_STATE_CHANGE].mutex);
1408 if ((audioPolicyClientStubCB_ != nullptr) && isAudioRendererEventListenerRegistered) {
1409 audioPolicyClientStubCB_->RemoveRendererStateChangeCallback(callbacks);
1410 if (audioPolicyClientStubCB_->GetRendererStateChangeCallbackSize() == 0) {
1411 callbackChangeInfos_[CALLBACK_RENDERER_STATE_CHANGE].isEnable = false;
1412 SetClientCallbacksEnable(CALLBACK_RENDERER_STATE_CHANGE, false);
1413 }
1414 isAudioRendererEventListenerRegistered = false;
1415 }
1416 return SUCCESS;
1417 }
1418
UnregisterAudioRendererEventListener(const std::shared_ptr<AudioRendererStateChangeCallback> & callback)1419 int32_t AudioPolicyManager::UnregisterAudioRendererEventListener(
1420 const std::shared_ptr<AudioRendererStateChangeCallback> &callback)
1421 {
1422 AUDIO_DEBUG_LOG("in");
1423 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_RENDERER_STATE_CHANGE].mutex);
1424 if ((audioPolicyClientStubCB_ != nullptr) && isAudioRendererEventListenerRegistered) {
1425 audioPolicyClientStubCB_->RemoveRendererStateChangeCallback(callback);
1426 if (audioPolicyClientStubCB_->GetRendererStateChangeCallbackSize() == 0) {
1427 callbackChangeInfos_[CALLBACK_RENDERER_STATE_CHANGE].isEnable = false;
1428 SetClientCallbacksEnable(CALLBACK_RENDERER_STATE_CHANGE, false);
1429 }
1430 isAudioRendererEventListenerRegistered = false;
1431 }
1432 return SUCCESS;
1433 }
1434
RegisterAudioCapturerEventListener(const int32_t clientPid,const std::shared_ptr<AudioCapturerStateChangeCallback> & callback)1435 int32_t AudioPolicyManager::RegisterAudioCapturerEventListener(const int32_t clientPid,
1436 const std::shared_ptr<AudioCapturerStateChangeCallback> &callback)
1437 {
1438 AUDIO_DEBUG_LOG("AudioPolicyManager::RegisterAudioCapturerEventListener");
1439
1440 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "Capturer Event Listener callback is nullptr");
1441
1442 if (!isAudioPolicyClientRegisted_) {
1443 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1444 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1445 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
1446 if (ret != SUCCESS) {
1447 return ret;
1448 }
1449 }
1450
1451 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_CAPTURER_STATE_CHANGE].mutex);
1452 audioPolicyClientStubCB_->AddCapturerStateChangeCallback(callback);
1453 size_t callbackSize = audioPolicyClientStubCB_->GetCapturerStateChangeCallbackSize();
1454 if (callbackSize == 1) {
1455 callbackChangeInfos_[CALLBACK_CAPTURER_STATE_CHANGE].isEnable = true;
1456 SetClientCallbacksEnable(CALLBACK_CAPTURER_STATE_CHANGE, true);
1457 }
1458 isAudioCapturerEventListenerRegistered = true;
1459 return SUCCESS;
1460 }
1461
UnregisterAudioCapturerEventListener(const int32_t clientPid)1462 int32_t AudioPolicyManager::UnregisterAudioCapturerEventListener(const int32_t clientPid)
1463 {
1464 AUDIO_DEBUG_LOG("AudioPolicyManager::UnregisterAudioCapturerEventListener");
1465 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_CAPTURER_STATE_CHANGE].mutex);
1466 if ((audioPolicyClientStubCB_ != nullptr) && isAudioCapturerEventListenerRegistered) {
1467 audioPolicyClientStubCB_->RemoveCapturerStateChangeCallback();
1468 if (audioPolicyClientStubCB_->GetCapturerStateChangeCallbackSize() == 0) {
1469 callbackChangeInfos_[CALLBACK_CAPTURER_STATE_CHANGE].isEnable = false;
1470 SetClientCallbacksEnable(CALLBACK_CAPTURER_STATE_CHANGE, false);
1471 }
1472 isAudioCapturerEventListenerRegistered = false;
1473 }
1474 return SUCCESS;
1475 }
1476
RegisterTracker(AudioMode & mode,AudioStreamChangeInfo & streamChangeInfo,const std::shared_ptr<AudioClientTracker> & clientTrackerObj)1477 int32_t AudioPolicyManager::RegisterTracker(AudioMode &mode, AudioStreamChangeInfo &streamChangeInfo,
1478 const std::shared_ptr<AudioClientTracker> &clientTrackerObj)
1479 {
1480 AUDIO_DEBUG_LOG("AudioPolicyManager::RegisterTracker");
1481 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1482 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1483
1484 std::lock_guard<std::mutex> lock(clientTrackerStubMutex_);
1485 sptr<AudioClientTrackerCallbackService> callback = new(std::nothrow) AudioClientTrackerCallbackService();
1486 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERROR, "clientTrackerCbStub: memory allocation failed");
1487
1488 callback->SetClientTrackerCallback(clientTrackerObj);
1489
1490 sptr<IRemoteObject> object = callback->AsObject();
1491 CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "clientTrackerCbStub: IPC object creation failed");
1492
1493 int32_t ret = gsp->RegisterTracker(mode, streamChangeInfo, object);
1494 CHECK_AND_RETURN_RET_LOG(ret == SUCCESS, ERROR, "RegisterTracker failed");
1495 int32_t sessionId = mode == AUDIO_MODE_PLAYBACK ? streamChangeInfo.audioRendererChangeInfo.sessionId :
1496 streamChangeInfo.audioCapturerChangeInfo.sessionId;
1497 clientTrackerStubMap_[sessionId] = callback;
1498 return ret;
1499 }
1500
UpdateTracker(AudioMode & mode,AudioStreamChangeInfo & streamChangeInfo)1501 int32_t AudioPolicyManager::UpdateTracker(AudioMode &mode, AudioStreamChangeInfo &streamChangeInfo)
1502 {
1503 AUDIO_DEBUG_LOG("AudioPolicyManager::UpdateTracker");
1504 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1505 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1506 int32_t ret = gsp->UpdateTracker(mode, streamChangeInfo);
1507 CheckAndRemoveClientTrackerStub(mode, streamChangeInfo);
1508 return ret;
1509 }
1510
GetPreferredOutputStreamType(AudioRendererInfo & rendererInfo)1511 int32_t AudioPolicyManager::GetPreferredOutputStreamType(AudioRendererInfo &rendererInfo)
1512 {
1513 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1514 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, AUDIO_FLAG_INVALID, "audio policy manager proxy is NULL.");
1515 int32_t streamType = AUDIO_FLAG_INVALID;
1516 gsp->GetPreferredOutputStreamType(rendererInfo, streamType);
1517 return streamType;
1518 }
1519
GetPreferredInputStreamType(AudioCapturerInfo & capturerInfo)1520 int32_t AudioPolicyManager::GetPreferredInputStreamType(AudioCapturerInfo &capturerInfo)
1521 {
1522 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1523 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, AUDIO_FLAG_INVALID, "audio policy manager proxy is NULL.");
1524 int32_t streamType = AUDIO_FLAG_INVALID;
1525 gsp->GetPreferredInputStreamType(capturerInfo, streamType);
1526 return streamType;
1527 }
1528
CreateRendererClient(std::shared_ptr<AudioStreamDescriptor> streamDesc,uint32_t & flag,uint32_t & sessionId,std::string & networkId)1529 int32_t AudioPolicyManager::CreateRendererClient(
1530 std::shared_ptr<AudioStreamDescriptor> streamDesc, uint32_t &flag, uint32_t &sessionId, std::string &networkId)
1531 {
1532 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1533 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, AUDIO_FLAG_INVALID, "audio policy manager proxy is NULL.");
1534 return gsp->CreateRendererClient(streamDesc, flag, sessionId, networkId);
1535 }
1536
CreateCapturerClient(std::shared_ptr<AudioStreamDescriptor> streamDesc,uint32_t & flag,uint32_t & sessionId)1537 int32_t AudioPolicyManager::CreateCapturerClient(
1538 std::shared_ptr<AudioStreamDescriptor> streamDesc, uint32_t &flag, uint32_t &sessionId)
1539 {
1540 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1541 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, AUDIO_FLAG_INVALID, "audio policy manager proxy is NULL.");
1542 return gsp->CreateCapturerClient(streamDesc, flag, sessionId);
1543 }
1544
GetCurrentRendererChangeInfos(vector<shared_ptr<AudioRendererChangeInfo>> & audioRendererChangeInfos)1545 int32_t AudioPolicyManager::GetCurrentRendererChangeInfos(
1546 vector<shared_ptr<AudioRendererChangeInfo>> &audioRendererChangeInfos)
1547 {
1548 AUDIO_DEBUG_LOG("GetCurrentRendererChangeInfos");
1549 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1550 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1551 return gsp->GetCurrentRendererChangeInfos(audioRendererChangeInfos);
1552 }
1553
GetCurrentCapturerChangeInfos(vector<shared_ptr<AudioCapturerChangeInfo>> & audioCapturerChangeInfos)1554 int32_t AudioPolicyManager::GetCurrentCapturerChangeInfos(
1555 vector<shared_ptr<AudioCapturerChangeInfo>> &audioCapturerChangeInfos)
1556 {
1557 AUDIO_DEBUG_LOG("GetCurrentCapturerChangeInfos");
1558 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1559 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1560 return gsp->GetCurrentCapturerChangeInfos(audioCapturerChangeInfos);
1561 }
1562
UpdateStreamState(const int32_t clientUid,StreamSetState streamSetState,StreamUsage streamUsage)1563 int32_t AudioPolicyManager::UpdateStreamState(const int32_t clientUid,
1564 StreamSetState streamSetState, StreamUsage streamUsage)
1565 {
1566 AUDIO_DEBUG_LOG("UpdateStreamState");
1567 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1568 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1569 return gsp->UpdateStreamState(clientUid, streamSetState, streamUsage);
1570 }
1571
GetVolumeGroupInfos(std::string networkId,std::vector<sptr<VolumeGroupInfo>> & infos)1572 int32_t AudioPolicyManager::GetVolumeGroupInfos(std::string networkId, std::vector<sptr<VolumeGroupInfo>> &infos)
1573 {
1574 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1575 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1576 return gsp->GetVolumeGroupInfos(networkId, infos);
1577 }
1578
GetNetworkIdByGroupId(int32_t groupId,std::string & networkId)1579 int32_t AudioPolicyManager::GetNetworkIdByGroupId(int32_t groupId, std::string &networkId)
1580 {
1581 AudioXCollie audioXCollie("AudioPolicyManager::GetNetworkIdByGroupId", TIME_OUT_SECONDS,
1582 nullptr, nullptr, AUDIO_XCOLLIE_FLAG_LOG);
1583 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1584 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "GetNetworkIdByGroupId failed, g_apProxy is nullptr.");
1585 return gsp->GetNetworkIdByGroupId(groupId, networkId);
1586 }
1587
SetSystemSoundUri(const std::string & key,const std::string & uri)1588 int32_t AudioPolicyManager::SetSystemSoundUri(const std::string &key, const std::string &uri)
1589 {
1590 AUDIO_DEBUG_LOG("SetSystemSoundUri: [%{public}s]: [%{public}s]", key.c_str(), uri.c_str());
1591 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1592 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1593
1594 return gsp->SetSystemSoundUri(key, uri);
1595 }
1596
GetSystemSoundUri(const std::string & key)1597 std::string AudioPolicyManager::GetSystemSoundUri(const std::string &key)
1598 {
1599 AUDIO_DEBUG_LOG("GetSystemSoundUri: %{public}s", key.c_str());
1600 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1601 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, "", "audio policy manager proxy is NULL.");
1602
1603 std::string out{};
1604 gsp->GetSystemSoundUri(key, out);
1605 return out;
1606 }
1607
GetMinStreamVolume()1608 float AudioPolicyManager::GetMinStreamVolume()
1609 {
1610 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1611 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1612 float out = -1;
1613 gsp->GetMinStreamVolume(out);
1614 return out;
1615 }
1616
GetMaxStreamVolume()1617 float AudioPolicyManager::GetMaxStreamVolume()
1618 {
1619 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1620 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1621 float out = -1;
1622 gsp->GetMaxStreamVolume(out);
1623 return out;
1624 }
1625
RegisterAudioPolicyServerDiedCb(const int32_t clientPid,const std::shared_ptr<AudioRendererPolicyServiceDiedCallback> & callback)1626 int32_t AudioPolicyManager::RegisterAudioPolicyServerDiedCb(const int32_t clientPid,
1627 const std::shared_ptr<AudioRendererPolicyServiceDiedCallback> &callback)
1628 {
1629 std::lock_guard<std::mutex> lockCbMap(g_cBMapMutex);
1630 if (rendererCBMap_.count(clientPid)) {
1631 rendererCBMap_.erase(clientPid);
1632 }
1633 rendererCBMap_[clientPid] = callback;
1634 return SUCCESS;
1635 }
1636
RegisterAudioPolicyServerDiedCb(const int32_t clientPid,const std::shared_ptr<AudioCapturerPolicyServiceDiedCallback> & callback)1637 int32_t AudioPolicyManager::RegisterAudioPolicyServerDiedCb(const int32_t clientPid,
1638 const std::shared_ptr<AudioCapturerPolicyServiceDiedCallback> &callback)
1639 {
1640 std::lock_guard<std::mutex> lockCbMap(g_cBMapMutex);
1641 capturerCB_ = callback;
1642 return SUCCESS;
1643 }
1644
UnregisterAudioPolicyServerDiedCb(const int32_t clientPid)1645 int32_t AudioPolicyManager::UnregisterAudioPolicyServerDiedCb(const int32_t clientPid)
1646 {
1647 std::lock_guard<std::mutex> lockCbMap(g_cBMapMutex);
1648 AUDIO_DEBUG_LOG("client pid: %{public}d", clientPid);
1649 rendererCBMap_.erase(getpid());
1650 return SUCCESS;
1651 }
1652
RegisterAudioStreamPolicyServerDiedCb(const std::shared_ptr<AudioStreamPolicyServiceDiedCallback> & callback)1653 int32_t AudioPolicyManager::RegisterAudioStreamPolicyServerDiedCb(
1654 const std::shared_ptr<AudioStreamPolicyServiceDiedCallback> &callback)
1655 {
1656 std::lock_guard<std::mutex> lockCbMap(g_cBDiedMapMutex);
1657 AUDIO_DEBUG_LOG("RegisterAudioStreamPolicyServerDiedCb");
1658 audioStreamCBMap_.emplace_back(callback);
1659
1660 return SUCCESS;
1661 }
1662
UnregisterAudioStreamPolicyServerDiedCb(const std::shared_ptr<AudioStreamPolicyServiceDiedCallback> & callback)1663 int32_t AudioPolicyManager::UnregisterAudioStreamPolicyServerDiedCb(
1664 const std::shared_ptr<AudioStreamPolicyServiceDiedCallback> &callback)
1665 {
1666 std::lock_guard<std::mutex> lockCbMap(g_cBDiedMapMutex);
1667 AUDIO_DEBUG_LOG("UnregisterAudioStreamPolicyServerDiedCb");
1668
1669 audioStreamCBMap_.erase(std::remove_if(audioStreamCBMap_.begin(), audioStreamCBMap_.end(),
1670 [&callback] (const weak_ptr<AudioStreamPolicyServiceDiedCallback> &cb) {
1671 auto sharedCb = cb.lock();
1672 if (sharedCb == callback || sharedCb == nullptr) {
1673 return true;
1674 }
1675 return false;
1676 }), audioStreamCBMap_.end());
1677
1678 return SUCCESS;
1679 }
1680
GetMaxRendererInstances()1681 int32_t AudioPolicyManager::GetMaxRendererInstances()
1682 {
1683 AUDIO_DEBUG_LOG("AudioPolicyManager::GetMaxRendererInstances");
1684 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1685 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1686
1687 int32_t ret = -1;
1688 gsp->GetMaxRendererInstances(ret);
1689 return ret;
1690 }
1691
IsVolumeUnadjustable()1692 bool AudioPolicyManager::IsVolumeUnadjustable()
1693 {
1694 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1695 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1696 bool out = false;
1697 gsp->IsVolumeUnadjustable(out);
1698 return out;
1699 }
1700
AdjustVolumeByStep(VolumeAdjustType adjustType)1701 int32_t AudioPolicyManager::AdjustVolumeByStep(VolumeAdjustType adjustType)
1702 {
1703 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1704 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1705 return gsp->AdjustVolumeByStep(adjustType);
1706 }
1707
AdjustSystemVolumeByStep(AudioVolumeType volumeType,VolumeAdjustType adjustType)1708 int32_t AudioPolicyManager::AdjustSystemVolumeByStep(AudioVolumeType volumeType, VolumeAdjustType adjustType)
1709 {
1710 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1711 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1712 return gsp->AdjustSystemVolumeByStep(volumeType, adjustType);
1713 }
1714
GetSystemVolumeInDb(AudioVolumeType volumeType,int32_t volumeLevel,DeviceType deviceType)1715 float AudioPolicyManager::GetSystemVolumeInDb(AudioVolumeType volumeType, int32_t volumeLevel, DeviceType deviceType)
1716 {
1717 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1718 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1719 float out = -1.0f;
1720 int32_t ret = gsp->GetSystemVolumeInDb(volumeType, volumeLevel, deviceType, out);
1721 return ret == SUCCESS ? out : static_cast<float>(ERR_INVALID_PARAM);
1722 }
1723
QueryEffectSceneMode(SupportedEffectConfig & supportedEffectConfig)1724 int32_t AudioPolicyManager::QueryEffectSceneMode(SupportedEffectConfig &supportedEffectConfig)
1725 {
1726 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1727 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1728 int error = gsp->QueryEffectSceneMode(supportedEffectConfig);
1729 return error;
1730 }
1731
GetHardwareOutputSamplingRate(const std::shared_ptr<AudioDeviceDescriptor> & desc)1732 int32_t AudioPolicyManager::GetHardwareOutputSamplingRate(const std::shared_ptr<AudioDeviceDescriptor> &desc)
1733 {
1734 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1735 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1736 int32_t ret = ERROR;
1737 gsp->GetHardwareOutputSamplingRate(desc, ret);
1738 return ret;
1739 }
1740
GetAudioCapturerMicrophoneDescriptors(int32_t sessionID)1741 vector<sptr<MicrophoneDescriptor>> AudioPolicyManager::GetAudioCapturerMicrophoneDescriptors(int32_t sessionID)
1742 {
1743 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1744 std::vector<sptr<MicrophoneDescriptor>> descs;
1745 if (gsp == nullptr) {
1746 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1747 return descs;
1748 }
1749 gsp->GetAudioCapturerMicrophoneDescriptors(sessionID, descs);
1750 return descs;
1751 }
1752
GetAvailableMicrophones()1753 vector<sptr<MicrophoneDescriptor>> AudioPolicyManager::GetAvailableMicrophones()
1754 {
1755 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1756 if (gsp == nullptr) {
1757 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1758 std::vector<sptr<MicrophoneDescriptor>> descs;
1759 return descs;
1760 }
1761 vector<sptr<MicrophoneDescriptor>> retMicList;
1762 gsp->GetAvailableMicrophones(retMicList);
1763 return retMicList;
1764 }
1765
SetDeviceAbsVolumeSupported(const std::string & macAddress,const bool support)1766 int32_t AudioPolicyManager::SetDeviceAbsVolumeSupported(const std::string &macAddress, const bool support)
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->SetDeviceAbsVolumeSupported(macAddress, support);
1771 }
1772
IsAbsVolumeScene()1773 bool AudioPolicyManager::IsAbsVolumeScene()
1774 {
1775 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1776 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1777 bool ret = true;
1778 gsp->IsAbsVolumeScene(ret);
1779 return ret;
1780 }
1781
SetA2dpDeviceVolume(const std::string & macAddress,const int32_t volume,const bool updateUi)1782 int32_t AudioPolicyManager::SetA2dpDeviceVolume(const std::string &macAddress, const int32_t volume,
1783 const bool updateUi)
1784 {
1785 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1786 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1787 return gsp->SetA2dpDeviceVolume(macAddress, volume, updateUi);
1788 }
1789
SetNearlinkDeviceVolume(const std::string & macAddress,AudioVolumeType volumeType,const int32_t volume,const bool updateUi)1790 int32_t AudioPolicyManager::SetNearlinkDeviceVolume(const std::string &macAddress, AudioVolumeType volumeType,
1791 const int32_t volume, const bool updateUi)
1792 {
1793 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1794 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1795 return gsp->SetNearlinkDeviceVolume(macAddress, volumeType, volume, updateUi);
1796 }
1797
ConfigDistributedRoutingRole(std::shared_ptr<AudioDeviceDescriptor> descriptor,CastType type)1798 int32_t AudioPolicyManager::ConfigDistributedRoutingRole(
1799 std::shared_ptr<AudioDeviceDescriptor> descriptor, CastType type)
1800 {
1801 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1802 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1803 return gsp->ConfigDistributedRoutingRole(descriptor, static_cast<int32_t>(type));
1804 }
1805
SetDistributedRoutingRoleCallback(const std::shared_ptr<AudioDistributedRoutingRoleCallback> & callback)1806 int32_t AudioPolicyManager::SetDistributedRoutingRoleCallback(
1807 const std::shared_ptr<AudioDistributedRoutingRoleCallback> &callback)
1808 {
1809 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1810 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1811 if (callback == nullptr) {
1812 AUDIO_ERR_LOG("SetDistributedRoutingRoleCallback: callback is nullptr");
1813 return ERR_INVALID_PARAM;
1814 }
1815
1816 std::unique_lock<std::mutex> lock(listenerStubMutex_);
1817 auto activeDistributedRoutingRoleCb = new(std::nothrow) AudioRoutingManagerListener();
1818 if (activeDistributedRoutingRoleCb == nullptr) {
1819 AUDIO_ERR_LOG("SetDistributedRoutingRoleCallback: object is nullptr");
1820 return ERROR;
1821 }
1822 activeDistributedRoutingRoleCb->SetDistributedRoutingRoleCallback(callback);
1823 sptr<IRemoteObject> object = activeDistributedRoutingRoleCb->AsObject();
1824 if (object == nullptr) {
1825 AUDIO_ERR_LOG("SetDistributedRoutingRoleCallback: listenerStub is nullptr.");
1826 delete activeDistributedRoutingRoleCb;
1827 return ERROR;
1828 }
1829 return gsp->SetDistributedRoutingRoleCallback(object);
1830 }
1831
UnsetDistributedRoutingRoleCallback()1832 int32_t AudioPolicyManager::UnsetDistributedRoutingRoleCallback()
1833 {
1834 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1835 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1836 return gsp->UnsetDistributedRoutingRoleCallback();
1837 }
1838
IsSpatializationEnabled()1839 bool AudioPolicyManager::IsSpatializationEnabled()
1840 {
1841 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1842 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1843 bool ret = false;
1844 gsp->IsSpatializationEnabled(ret);
1845 return ret;
1846 }
1847
IsSpatializationEnabled(const std::string address)1848 bool AudioPolicyManager::IsSpatializationEnabled(const std::string address)
1849 {
1850 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1851 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1852 bool ret = false;
1853 gsp->IsSpatializationEnabled(address, ret);
1854 return ret;
1855 }
1856
IsSpatializationEnabledForCurrentDevice()1857 bool AudioPolicyManager::IsSpatializationEnabledForCurrentDevice()
1858 {
1859 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1860 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1861 bool ret = false;
1862 gsp->IsSpatializationEnabledForCurrentDevice(ret);
1863 return ret;
1864 }
1865
SetSpatializationEnabled(const bool enable)1866 int32_t AudioPolicyManager::SetSpatializationEnabled(const bool enable)
1867 {
1868 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1869 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1870 return gsp->SetSpatializationEnabled(enable);
1871 }
1872
SetSpatializationEnabled(const std::shared_ptr<AudioDeviceDescriptor> & selectedAudioDevice,const bool enable)1873 int32_t AudioPolicyManager::SetSpatializationEnabled(
1874 const std::shared_ptr<AudioDeviceDescriptor> &selectedAudioDevice, const bool enable)
1875 {
1876 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1877 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1878 return gsp->SetSpatializationEnabled(selectedAudioDevice, enable);
1879 }
1880
IsHeadTrackingEnabled()1881 bool AudioPolicyManager::IsHeadTrackingEnabled()
1882 {
1883 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1884 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1885 bool ret = false;
1886 gsp->IsHeadTrackingEnabled(ret);
1887 return ret;
1888 }
1889
IsHeadTrackingEnabled(const std::string address)1890 bool AudioPolicyManager::IsHeadTrackingEnabled(const std::string address)
1891 {
1892 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1893 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1894 bool ret = false;
1895 gsp->IsHeadTrackingEnabled(address, ret);
1896 return ret;
1897 }
1898
SetHeadTrackingEnabled(const bool enable)1899 int32_t AudioPolicyManager::SetHeadTrackingEnabled(const bool enable)
1900 {
1901 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1902 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1903 return gsp->SetHeadTrackingEnabled(enable);
1904 }
1905
SetHeadTrackingEnabled(const std::shared_ptr<AudioDeviceDescriptor> & selectedAudioDevice,const bool enable)1906 int32_t AudioPolicyManager::SetHeadTrackingEnabled(
1907 const std::shared_ptr<AudioDeviceDescriptor> &selectedAudioDevice, const bool enable)
1908 {
1909 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1910 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1911 return gsp->SetHeadTrackingEnabled(selectedAudioDevice, enable);
1912 }
1913
RegisterSpatializationEnabledEventListener(const std::shared_ptr<AudioSpatializationEnabledChangeCallback> & callback)1914 int32_t AudioPolicyManager::RegisterSpatializationEnabledEventListener(
1915 const std::shared_ptr<AudioSpatializationEnabledChangeCallback> &callback)
1916 {
1917 AUDIO_DEBUG_LOG("Start to register");
1918 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
1919
1920 if (!isAudioPolicyClientRegisted_) {
1921 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1922 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1923 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
1924 if (ret != SUCCESS) {
1925 return ret;
1926 }
1927 }
1928
1929 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SPATIALIZATION_ENABLED_CHANGE].mutex);
1930 if (audioPolicyClientStubCB_ != nullptr) {
1931 audioPolicyClientStubCB_->AddSpatializationEnabledChangeCallback(callback);
1932 size_t callbackSize = audioPolicyClientStubCB_->GetSpatializationEnabledChangeCallbackSize();
1933 if (callbackSize == 1) {
1934 callbackChangeInfos_[CALLBACK_SPATIALIZATION_ENABLED_CHANGE].isEnable = true;
1935 SetClientCallbacksEnable(CALLBACK_SPATIALIZATION_ENABLED_CHANGE, true);
1936 }
1937 }
1938 return SUCCESS;
1939 }
1940
RegisterSpatializationEnabledForCurrentDeviceEventListener(const std::shared_ptr<AudioSpatializationEnabledChangeForCurrentDeviceCallback> & callback)1941 int32_t AudioPolicyManager::RegisterSpatializationEnabledForCurrentDeviceEventListener(
1942 const std::shared_ptr<AudioSpatializationEnabledChangeForCurrentDeviceCallback> &callback)
1943 {
1944 AUDIO_DEBUG_LOG("Start to register");
1945 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
1946
1947 if (!isAudioPolicyClientRegisted_) {
1948 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1949 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1950 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
1951 if (ret != SUCCESS) {
1952 return ret;
1953 }
1954 }
1955
1956 std::lock_guard<std::mutex>
1957 lockCbMap(callbackChangeInfos_[CALLBACK_SPATIALIZATION_ENABLED_CHANGE_FOR_CURRENT_DEVICE].mutex);
1958 if (audioPolicyClientStubCB_ != nullptr) {
1959 audioPolicyClientStubCB_->AddSpatializationEnabledChangeForCurrentDeviceCallback(callback);
1960 size_t callbackSize = audioPolicyClientStubCB_->GetSpatializationEnabledChangeForCurrentDeviceCallbackSize();
1961 if (callbackSize == 1) {
1962 callbackChangeInfos_[CALLBACK_SPATIALIZATION_ENABLED_CHANGE_FOR_CURRENT_DEVICE].isEnable = true;
1963 SetClientCallbacksEnable(CALLBACK_SPATIALIZATION_ENABLED_CHANGE_FOR_CURRENT_DEVICE, true);
1964 }
1965 }
1966 return SUCCESS;
1967 }
1968
RegisterHeadTrackingEnabledEventListener(const std::shared_ptr<AudioHeadTrackingEnabledChangeCallback> & callback)1969 int32_t AudioPolicyManager::RegisterHeadTrackingEnabledEventListener(
1970 const std::shared_ptr<AudioHeadTrackingEnabledChangeCallback> &callback)
1971 {
1972 AUDIO_DEBUG_LOG("Start to register");
1973 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
1974
1975 if (!isAudioPolicyClientRegisted_) {
1976 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1977 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1978 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
1979 if (ret != SUCCESS) {
1980 return ret;
1981 }
1982 }
1983
1984 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_HEAD_TRACKING_ENABLED_CHANGE].mutex);
1985 if (audioPolicyClientStubCB_ != nullptr) {
1986 audioPolicyClientStubCB_->AddHeadTrackingEnabledChangeCallback(callback);
1987 size_t callbackSize = audioPolicyClientStubCB_->GetHeadTrackingEnabledChangeCallbacSize();
1988 if (callbackSize == 1) {
1989 callbackChangeInfos_[CALLBACK_HEAD_TRACKING_ENABLED_CHANGE].isEnable = true;
1990 SetClientCallbacksEnable(CALLBACK_HEAD_TRACKING_ENABLED_CHANGE, true);
1991 }
1992 }
1993 return SUCCESS;
1994 }
1995
RegisterNnStateEventListener(const std::shared_ptr<AudioNnStateChangeCallback> & callback)1996 int32_t AudioPolicyManager::RegisterNnStateEventListener(const std::shared_ptr<AudioNnStateChangeCallback> &callback)
1997 {
1998 AUDIO_DEBUG_LOG("Start to register");
1999 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
2000
2001 if (!isAudioPolicyClientRegisted_) {
2002 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2003 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2004 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
2005 CHECK_AND_RETURN_RET(ret == SUCCESS, ret);
2006 }
2007
2008 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_NN_STATE_CHANGE].mutex);
2009 CHECK_AND_RETURN_RET(audioPolicyClientStubCB_ != nullptr, SUCCESS);
2010 audioPolicyClientStubCB_->AddNnStateChangeCallback(callback);
2011 if (audioPolicyClientStubCB_->GetNnStateChangeCallbackSize() == 1) {
2012 callbackChangeInfos_[CALLBACK_NN_STATE_CHANGE].isEnable = true;
2013 SetClientCallbacksEnable(CALLBACK_NN_STATE_CHANGE, true);
2014 }
2015 return SUCCESS;
2016 }
2017
UnregisterSpatializationEnabledEventListener()2018 int32_t AudioPolicyManager::UnregisterSpatializationEnabledEventListener()
2019 {
2020 AUDIO_DEBUG_LOG("Start to unregister");
2021 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SPATIALIZATION_ENABLED_CHANGE].mutex);
2022 if (audioPolicyClientStubCB_ != nullptr) {
2023 audioPolicyClientStubCB_->RemoveSpatializationEnabledChangeCallback();
2024 if (audioPolicyClientStubCB_->GetSpatializationEnabledChangeCallbackSize() == 0) {
2025 callbackChangeInfos_[CALLBACK_SPATIALIZATION_ENABLED_CHANGE].isEnable = false;
2026 SetClientCallbacksEnable(CALLBACK_SPATIALIZATION_ENABLED_CHANGE, false);
2027 }
2028 }
2029 return SUCCESS;
2030 }
2031
UnregisterSpatializationEnabledForCurrentDeviceEventListener()2032 int32_t AudioPolicyManager::UnregisterSpatializationEnabledForCurrentDeviceEventListener()
2033 {
2034 AUDIO_DEBUG_LOG("Start to unregister");
2035 std::lock_guard<std::mutex>
2036 lockCbMap(callbackChangeInfos_[CALLBACK_SPATIALIZATION_ENABLED_CHANGE_FOR_CURRENT_DEVICE].mutex);
2037 if (audioPolicyClientStubCB_ != nullptr) {
2038 audioPolicyClientStubCB_->RemoveSpatializationEnabledChangeForCurrentDeviceCallback();
2039 if (audioPolicyClientStubCB_->GetSpatializationEnabledChangeForCurrentDeviceCallbackSize() == 0) {
2040 callbackChangeInfos_[CALLBACK_SPATIALIZATION_ENABLED_CHANGE_FOR_CURRENT_DEVICE].isEnable = false;
2041 SetClientCallbacksEnable(CALLBACK_SPATIALIZATION_ENABLED_CHANGE_FOR_CURRENT_DEVICE, false);
2042 }
2043 }
2044 return SUCCESS;
2045 }
2046
UnregisterHeadTrackingEnabledEventListener()2047 int32_t AudioPolicyManager::UnregisterHeadTrackingEnabledEventListener()
2048 {
2049 AUDIO_DEBUG_LOG("Start to unregister");
2050 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_HEAD_TRACKING_ENABLED_CHANGE].mutex);
2051 if (audioPolicyClientStubCB_ != nullptr) {
2052 audioPolicyClientStubCB_->RemoveHeadTrackingEnabledChangeCallback();
2053 if (audioPolicyClientStubCB_->GetHeadTrackingEnabledChangeCallbacSize() == 0) {
2054 callbackChangeInfos_[CALLBACK_HEAD_TRACKING_ENABLED_CHANGE].isEnable = false;
2055 SetClientCallbacksEnable(CALLBACK_HEAD_TRACKING_ENABLED_CHANGE, false);
2056 }
2057 }
2058 return SUCCESS;
2059 }
2060
UnregisterNnStateEventListener()2061 int32_t AudioPolicyManager::UnregisterNnStateEventListener()
2062 {
2063 AUDIO_DEBUG_LOG("Start to unregister");
2064 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_NN_STATE_CHANGE].mutex);
2065 CHECK_AND_RETURN_RET(audioPolicyClientStubCB_ != nullptr, SUCCESS);
2066 audioPolicyClientStubCB_->RemoveNnStateChangeCallback();
2067 if (audioPolicyClientStubCB_->GetNnStateChangeCallbackSize() == 0) {
2068 callbackChangeInfos_[CALLBACK_NN_STATE_CHANGE].isEnable = false;
2069 SetClientCallbacksEnable(CALLBACK_NN_STATE_CHANGE, false);
2070 }
2071 return SUCCESS;
2072 }
2073
GetSpatializationState(const StreamUsage streamUsage)2074 AudioSpatializationState AudioPolicyManager::GetSpatializationState(const StreamUsage streamUsage)
2075 {
2076 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2077 if (gsp == nullptr) {
2078 AUDIO_ERR_LOG("GetSpatializationState: audio policy manager proxy is NULL.");
2079 AudioSpatializationState spatializationState = {false, false};
2080 return spatializationState;
2081 }
2082 AudioSpatializationState state;
2083 gsp->GetSpatializationState(streamUsage, state);
2084 return state;
2085 }
2086
IsSpatializationSupported()2087 bool AudioPolicyManager::IsSpatializationSupported()
2088 {
2089 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2090 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
2091 bool ret = false;
2092 gsp->IsSpatializationSupported(ret);
2093 return ret;
2094 }
2095
IsSpatializationSupportedForDevice(const std::string address)2096 bool AudioPolicyManager::IsSpatializationSupportedForDevice(const std::string address)
2097 {
2098 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2099 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
2100 bool ret = false;
2101 gsp->IsSpatializationSupportedForDevice(address, ret);
2102 return ret;
2103 }
2104
IsHeadTrackingSupported()2105 bool AudioPolicyManager::IsHeadTrackingSupported()
2106 {
2107 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2108 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
2109 bool ret = false;
2110 gsp->IsHeadTrackingSupported(ret);
2111 return ret;
2112 }
2113
IsHeadTrackingSupportedForDevice(const std::string address)2114 bool AudioPolicyManager::IsHeadTrackingSupportedForDevice(const std::string address)
2115 {
2116 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2117 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
2118 bool ret = false;
2119 gsp->IsHeadTrackingSupportedForDevice(address, ret);
2120 return ret;
2121 }
2122
UpdateSpatialDeviceState(const AudioSpatialDeviceState audioSpatialDeviceState)2123 int32_t AudioPolicyManager::UpdateSpatialDeviceState(const AudioSpatialDeviceState audioSpatialDeviceState)
2124 {
2125 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2126 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2127 return gsp->UpdateSpatialDeviceState(audioSpatialDeviceState);
2128 }
2129
RegisterSpatializationStateEventListener(const uint32_t sessionID,const StreamUsage streamUsage,const std::shared_ptr<AudioSpatializationStateChangeCallback> & callback)2130 int32_t AudioPolicyManager::RegisterSpatializationStateEventListener(const uint32_t sessionID,
2131 const StreamUsage streamUsage, const std::shared_ptr<AudioSpatializationStateChangeCallback> &callback)
2132 {
2133 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2134 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2135
2136 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "Spatialization state callback is nullptr");
2137
2138 sptr<AudioSpatializationStateChangeListener> spatializationStateChangeListenerStub =
2139 new(std::nothrow) AudioSpatializationStateChangeListener();
2140 CHECK_AND_RETURN_RET_LOG(spatializationStateChangeListenerStub != nullptr, ERROR, "object null");
2141
2142 spatializationStateChangeListenerStub->SetCallback(callback);
2143
2144 sptr<IRemoteObject> object = spatializationStateChangeListenerStub->AsObject();
2145 CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "IPC object creation failed");
2146
2147 return gsp->RegisterSpatializationStateEventListener(sessionID, streamUsage, object);
2148 }
2149
UnregisterSpatializationStateEventListener(const uint32_t sessionID)2150 int32_t AudioPolicyManager::UnregisterSpatializationStateEventListener(const uint32_t sessionID)
2151 {
2152 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2153 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2154
2155 return gsp->UnregisterSpatializationStateEventListener(sessionID);
2156 }
2157
CreateAudioInterruptZone(const std::set<int32_t> & pids,const int32_t zoneID)2158 int32_t AudioPolicyManager::CreateAudioInterruptZone(const std::set<int32_t> &pids, const int32_t zoneID)
2159 {
2160 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2161 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2162
2163 return gsp->CreateAudioInterruptZone(pids, zoneID);
2164 }
2165
AddAudioInterruptZonePids(const std::set<int32_t> & pids,const int32_t zoneID)2166 int32_t AudioPolicyManager::AddAudioInterruptZonePids(const std::set<int32_t> &pids, const int32_t zoneID)
2167 {
2168 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2169 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2170
2171 return gsp->AddAudioInterruptZonePids(pids, zoneID);
2172 }
2173
RemoveAudioInterruptZonePids(const std::set<int32_t> & pids,const int32_t zoneID)2174 int32_t AudioPolicyManager::RemoveAudioInterruptZonePids(const std::set<int32_t> &pids, const int32_t zoneID)
2175 {
2176 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2177 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2178
2179 return gsp->RemoveAudioInterruptZonePids(pids, zoneID);
2180 }
2181
ReleaseAudioInterruptZone(const int32_t zoneID)2182 int32_t AudioPolicyManager::ReleaseAudioInterruptZone(const int32_t zoneID)
2183 {
2184 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2185 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2186
2187 return gsp->ReleaseAudioInterruptZone(zoneID);
2188 }
2189
GetConverterConfig()2190 ConverterConfig AudioPolicyManager::GetConverterConfig()
2191 {
2192 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2193 if (gsp == nullptr) {
2194 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
2195 return ConverterConfig();
2196 }
2197 ConverterConfig cfg;
2198 gsp->GetConverterConfig(cfg);
2199 return cfg;
2200 }
2201
IsHighResolutionExist()2202 bool AudioPolicyManager::IsHighResolutionExist()
2203 {
2204 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2205 if (gsp == nullptr) {
2206 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
2207 return false;
2208 }
2209 bool gspIsHighResolutionExist = false;
2210 gsp->IsHighResolutionExist(gspIsHighResolutionExist);
2211 return gspIsHighResolutionExist;
2212 }
2213
SetHighResolutionExist(bool highResExist)2214 int32_t AudioPolicyManager::SetHighResolutionExist(bool highResExist)
2215 {
2216 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2217 if (gsp == nullptr) {
2218 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
2219 return -1;
2220 }
2221 gsp->SetHighResolutionExist(highResExist);
2222 return SUCCESS;
2223 }
2224
RegisterAudioPolicyServerDiedCb(std::shared_ptr<AudioSessionManagerPolicyServiceDiedCallback> & callback)2225 int32_t AudioPolicyManager::RegisterAudioPolicyServerDiedCb(
2226 std::shared_ptr<AudioSessionManagerPolicyServiceDiedCallback> &callback)
2227 {
2228 std::lock_guard<std::mutex> lockCb(serverDiedSessionManagerCbkMutex_);
2229 audioSessionManagerCb_ = callback;
2230 return SUCCESS;
2231 }
2232
AudioSessionManagerCallback()2233 void AudioPolicyManager::AudioSessionManagerCallback()
2234 {
2235 std::lock_guard<std::mutex> lockCb(serverDiedSessionManagerCbkMutex_);
2236 auto cbSharedPtr = audioSessionManagerCb_.lock();
2237 CHECK_AND_RETURN_LOG(cbSharedPtr != nullptr, "func audioSessionManagerCb is nullptr");
2238
2239 cbSharedPtr->OnAudioPolicyServiceDied();
2240 }
2241
ActivateAudioSession(const AudioSessionStrategy & strategy)2242 int32_t AudioPolicyManager::ActivateAudioSession(const AudioSessionStrategy &strategy)
2243 {
2244 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2245 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2246 if (!isAudioPolicyClientRegisted_) {
2247 int32_t result = RegisterPolicyCallbackClientFunc(gsp);
2248 if (result != SUCCESS) {
2249 AUDIO_ERR_LOG("Failed to register policy callback clent");
2250 return result;
2251 }
2252 }
2253 return gsp->ActivateAudioSession(static_cast<int32_t>(strategy.concurrencyMode));
2254 }
2255
DeactivateAudioSession()2256 int32_t AudioPolicyManager::DeactivateAudioSession()
2257 {
2258 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2259 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2260 return gsp->DeactivateAudioSession();
2261 }
2262
IsAudioSessionActivated()2263 bool AudioPolicyManager::IsAudioSessionActivated()
2264 {
2265 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2266 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
2267 bool active = false;
2268 gsp->IsAudioSessionActivated(active);
2269 return active;
2270 }
2271
SetInputDevice(const DeviceType deviceType,const uint32_t sessionID,const SourceType sourceType,bool isRunning)2272 int32_t AudioPolicyManager::SetInputDevice(const DeviceType deviceType, const uint32_t sessionID,
2273 const SourceType sourceType, bool isRunning)
2274 {
2275 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2276 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2277 return gsp->SetInputDevice(deviceType, sessionID, sourceType, isRunning);
2278 }
2279
SetAudioSessionCallback(const std::shared_ptr<AudioSessionCallback> & audioSessionCallback)2280 int32_t AudioPolicyManager::SetAudioSessionCallback(const std::shared_ptr<AudioSessionCallback> &audioSessionCallback)
2281 {
2282 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2283 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2284 CHECK_AND_RETURN_RET_LOG(audioSessionCallback != nullptr, ERR_INVALID_PARAM, "audioSessionCallback is nullptr");
2285
2286 int32_t result = SUCCESS;
2287 if (!isAudioPolicyClientRegisted_) {
2288 result = RegisterPolicyCallbackClientFunc(gsp);
2289 if (result != SUCCESS) {
2290 AUDIO_ERR_LOG("Failed to register policy callback clent");
2291 return result;
2292 }
2293 }
2294 if (audioPolicyClientStubCB_ == nullptr) {
2295 AUDIO_ERR_LOG("audioPolicyClientStubCB_ is null");
2296 return ERROR_ILLEGAL_STATE;
2297 }
2298
2299 result = audioPolicyClientStubCB_->AddAudioSessionCallback(audioSessionCallback);
2300 if (result != SUCCESS) {
2301 AUDIO_ERR_LOG("Failed to add audio session callback.");
2302 return result;
2303 }
2304
2305 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_AUDIO_SESSION].mutex);
2306 if (audioPolicyClientStubCB_->GetAudioSessionCallbackSize() == 1) {
2307 // Notify audio server that the client has registerd one listener.
2308 callbackChangeInfos_[CALLBACK_AUDIO_SESSION].isEnable = true;
2309 SetClientCallbacksEnable(CALLBACK_AUDIO_SESSION, true);
2310 }
2311 return result;
2312 }
2313
UnsetAudioSessionCallback()2314 int32_t AudioPolicyManager::UnsetAudioSessionCallback()
2315 {
2316 if (audioPolicyClientStubCB_ == nullptr) {
2317 AUDIO_ERR_LOG("audioPolicyClientStubCB_ is null");
2318 return ERROR_ILLEGAL_STATE;
2319 }
2320
2321 int32_t result = audioPolicyClientStubCB_->RemoveAudioSessionCallback();
2322 if (result != SUCCESS) {
2323 AUDIO_ERR_LOG("Failed to remove all audio session callbacks.");
2324 return result;
2325 }
2326
2327 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_AUDIO_SESSION].mutex);
2328 if (audioPolicyClientStubCB_->GetAudioSessionCallbackSize() == 0) {
2329 // Notify audio server that all of the client listeners have been unregisterd.
2330 callbackChangeInfos_[CALLBACK_AUDIO_SESSION].isEnable = false;
2331 SetClientCallbacksEnable(CALLBACK_AUDIO_SESSION, false);
2332 }
2333 return result;
2334 }
2335
UnsetAudioSessionCallback(const std::shared_ptr<AudioSessionCallback> & audioSessionCallback)2336 int32_t AudioPolicyManager::UnsetAudioSessionCallback(
2337 const std::shared_ptr<AudioSessionCallback> &audioSessionCallback)
2338 {
2339 if (audioPolicyClientStubCB_ == nullptr) {
2340 AUDIO_ERR_LOG("audioPolicyClientStubCB_ is null");
2341 return ERROR_ILLEGAL_STATE;
2342 }
2343 int32_t result = audioPolicyClientStubCB_->RemoveAudioSessionCallback(audioSessionCallback);
2344 if (result != SUCCESS) {
2345 AUDIO_ERR_LOG("Failed to remove the audio session callback.");
2346 return result;
2347 }
2348
2349 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_AUDIO_SESSION].mutex);
2350 if (audioPolicyClientStubCB_->GetAudioSessionCallbackSize() == 0) {
2351 // Notify audio server that all of the client listeners have been unregisterd.
2352 callbackChangeInfos_[CALLBACK_AUDIO_SESSION].isEnable = false;
2353 SetClientCallbacksEnable(CALLBACK_AUDIO_SESSION, false);
2354 }
2355 return result;
2356 }
2357
SetAudioSessionScene(const AudioSessionScene audioSessionScene)2358 int32_t AudioPolicyManager::SetAudioSessionScene(const AudioSessionScene audioSessionScene)
2359 {
2360 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2361 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2362 if (!isAudioPolicyClientRegisted_) {
2363 int32_t result = RegisterPolicyCallbackClientFunc(gsp);
2364 if (result != SUCCESS) {
2365 AUDIO_ERR_LOG("Failed to register policy callback clent");
2366 return result;
2367 }
2368 }
2369 return gsp->SetAudioSessionScene(static_cast<int32_t>(audioSessionScene));
2370 }
2371
SetAudioSessionStateChangeCallback(const std::shared_ptr<AudioSessionStateChangedCallback> & stateChangedCallback)2372 int32_t AudioPolicyManager::SetAudioSessionStateChangeCallback(
2373 const std::shared_ptr<AudioSessionStateChangedCallback> &stateChangedCallback)
2374 {
2375 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2376 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2377 CHECK_AND_RETURN_RET_LOG(stateChangedCallback != nullptr, ERR_INVALID_PARAM, "stateChangedCallback is nullptr");
2378
2379 int32_t result = SUCCESS;
2380 if (!isAudioPolicyClientRegisted_) {
2381 result = RegisterPolicyCallbackClientFunc(gsp);
2382 if (result != SUCCESS) {
2383 AUDIO_ERR_LOG("Failed to register policy callback clent");
2384 return result;
2385 }
2386 }
2387 if (audioPolicyClientStubCB_ == nullptr) {
2388 AUDIO_ERR_LOG("audioPolicyClientStubCB_ is null");
2389 return ERROR_ILLEGAL_STATE;
2390 }
2391
2392 result = audioPolicyClientStubCB_->AddAudioSessionStateCallback(stateChangedCallback);
2393 if (result != SUCCESS) {
2394 AUDIO_ERR_LOG("Failed to add audio session callback.");
2395 return result;
2396 }
2397
2398 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_AUDIO_SESSION_STATE].mutex);
2399 if (audioPolicyClientStubCB_->GetAudioSessionStateCallbackSize() == 1) {
2400 // Notify audio server that the client has registerd one listener.
2401 callbackChangeInfos_[CALLBACK_AUDIO_SESSION_STATE].isEnable = true;
2402 SetClientCallbacksEnable(CALLBACK_AUDIO_SESSION_STATE, true);
2403 }
2404 return result;
2405 }
2406
UnsetAudioSessionStateChangeCallback()2407 int32_t AudioPolicyManager::UnsetAudioSessionStateChangeCallback()
2408 {
2409 if (audioPolicyClientStubCB_ == nullptr) {
2410 AUDIO_ERR_LOG("audioPolicyClientStubCB_ is null");
2411 return ERROR_ILLEGAL_STATE;
2412 }
2413
2414 int32_t result = audioPolicyClientStubCB_->RemoveAudioSessionStateCallback();
2415 if (result != SUCCESS) {
2416 AUDIO_ERR_LOG("Failed to remove all audio session state callbacks.");
2417 return result;
2418 }
2419
2420 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_AUDIO_SESSION_STATE].mutex);
2421 if (audioPolicyClientStubCB_->GetAudioSessionStateCallbackSize() == 0) {
2422 // Notify audio server that all of the client listeners have been unregisterd.
2423 callbackChangeInfos_[CALLBACK_AUDIO_SESSION_STATE].isEnable = false;
2424 SetClientCallbacksEnable(CALLBACK_AUDIO_SESSION_STATE, false);
2425 }
2426 return result;
2427 }
2428
UnsetAudioSessionStateChangeCallback(const std::shared_ptr<AudioSessionStateChangedCallback> & stateChangedCallback)2429 int32_t AudioPolicyManager::UnsetAudioSessionStateChangeCallback(
2430 const std::shared_ptr<AudioSessionStateChangedCallback> &stateChangedCallback)
2431 {
2432 if (audioPolicyClientStubCB_ == nullptr) {
2433 AUDIO_ERR_LOG("audioPolicyClientStubCB_ is null");
2434 return ERROR_ILLEGAL_STATE;
2435 }
2436 int32_t result = audioPolicyClientStubCB_->RemoveAudioSessionStateCallback(stateChangedCallback);
2437 if (result != SUCCESS) {
2438 AUDIO_ERR_LOG("Failed to remove the audio session state callback.");
2439 return result;
2440 }
2441
2442 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_AUDIO_SESSION_STATE].mutex);
2443 if (audioPolicyClientStubCB_->GetAudioSessionStateCallbackSize() == 0) {
2444 // Notify audio server that all of the client listeners have been unregisterd.
2445 callbackChangeInfos_[CALLBACK_AUDIO_SESSION_STATE].isEnable = false;
2446 SetClientCallbacksEnable(CALLBACK_AUDIO_SESSION_STATE, false);
2447 }
2448 return result;
2449 }
2450
GetDefaultOutputDevice(DeviceType & deviceType)2451 int32_t AudioPolicyManager::GetDefaultOutputDevice(DeviceType &deviceType)
2452 {
2453 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2454 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2455 if (!isAudioPolicyClientRegisted_) {
2456 int32_t result = RegisterPolicyCallbackClientFunc(gsp);
2457 if (result != SUCCESS) {
2458 AUDIO_ERR_LOG("Failed to register policy callback clent");
2459 return result;
2460 }
2461 }
2462 int32_t deviceTypeOut = DEVICE_TYPE_NONE;
2463 int32_t ret = gsp->GetDefaultOutputDevice(deviceTypeOut);
2464 deviceType = static_cast<DeviceType>(deviceTypeOut);
2465 return ret;
2466 }
2467
SetDefaultOutputDevice(DeviceType deviceType)2468 int32_t AudioPolicyManager::SetDefaultOutputDevice(DeviceType deviceType)
2469 {
2470 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2471 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2472 if (!isAudioPolicyClientRegisted_) {
2473 int32_t result = RegisterPolicyCallbackClientFunc(gsp);
2474 if (result != SUCCESS) {
2475 AUDIO_ERR_LOG("Failed to register policy callback clent");
2476 return result;
2477 }
2478 }
2479 return gsp->SetDefaultOutputDevice(static_cast<int32_t>(deviceType));
2480 }
2481
SetAudioSessionCurrentDeviceChangeCallback(const std::shared_ptr<AudioSessionCurrentDeviceChangedCallback> & deviceChangedCallback)2482 int32_t AudioPolicyManager::SetAudioSessionCurrentDeviceChangeCallback(
2483 const std::shared_ptr<AudioSessionCurrentDeviceChangedCallback> &deviceChangedCallback)
2484 {
2485 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2486 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2487 CHECK_AND_RETURN_RET_LOG(deviceChangedCallback != nullptr, ERR_INVALID_PARAM, "deviceChangedCallback is nullptr");
2488
2489 int32_t result = SUCCESS;
2490 if (!isAudioPolicyClientRegisted_) {
2491 result = RegisterPolicyCallbackClientFunc(gsp);
2492 if (result != SUCCESS) {
2493 AUDIO_ERR_LOG("Failed to register policy callback clent");
2494 return result;
2495 }
2496 }
2497 if (audioPolicyClientStubCB_ == nullptr) {
2498 AUDIO_ERR_LOG("audioPolicyClientStubCB_ is null");
2499 return ERROR_ILLEGAL_STATE;
2500 }
2501
2502 result = audioPolicyClientStubCB_->AddAudioSessionDeviceCallback(deviceChangedCallback);
2503 if (result != SUCCESS) {
2504 AUDIO_ERR_LOG("Failed to add audio session device callback.");
2505 return result;
2506 }
2507
2508 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_AUDIO_SESSION_DEVICE].mutex);
2509 if (audioPolicyClientStubCB_->GetAudioSessionDeviceCallbackSize() == 1) {
2510 // Notify audio server that the client has registerd one listener.
2511 callbackChangeInfos_[CALLBACK_AUDIO_SESSION_DEVICE].isEnable = true;
2512 SetClientCallbacksEnable(CALLBACK_AUDIO_SESSION_DEVICE, true);
2513 }
2514 return result;
2515 }
2516
UnsetAudioSessionCurrentDeviceChangeCallback()2517 int32_t AudioPolicyManager::UnsetAudioSessionCurrentDeviceChangeCallback()
2518 {
2519 if (audioPolicyClientStubCB_ == nullptr) {
2520 AUDIO_ERR_LOG("audioPolicyClientStubCB_ is null");
2521 return ERROR_ILLEGAL_STATE;
2522 }
2523
2524 int32_t result = audioPolicyClientStubCB_->RemoveAudioSessionDeviceCallback();
2525 if (result != SUCCESS) {
2526 AUDIO_ERR_LOG("Failed to remove all audio session device callbacks.");
2527 return result;
2528 }
2529
2530 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_AUDIO_SESSION_DEVICE].mutex);
2531 if (audioPolicyClientStubCB_->GetAudioSessionDeviceCallbackSize() == 0) {
2532 // Notify audio server that all of the client listeners have been unregisterd.
2533 callbackChangeInfos_[CALLBACK_AUDIO_SESSION_DEVICE].isEnable = false;
2534 SetClientCallbacksEnable(CALLBACK_AUDIO_SESSION_DEVICE, false);
2535 }
2536 return result;
2537 }
2538
UnsetAudioSessionCurrentDeviceChangeCallback(const std::shared_ptr<AudioSessionCurrentDeviceChangedCallback> & deviceChangedCallback)2539 int32_t AudioPolicyManager::UnsetAudioSessionCurrentDeviceChangeCallback(
2540 const std::shared_ptr<AudioSessionCurrentDeviceChangedCallback> &deviceChangedCallback)
2541 {
2542 if (audioPolicyClientStubCB_ == nullptr) {
2543 AUDIO_ERR_LOG("audioPolicyClientStubCB_ is null");
2544 return ERROR_ILLEGAL_STATE;
2545 }
2546 int32_t result = audioPolicyClientStubCB_->RemoveAudioSessionDeviceCallback(deviceChangedCallback);
2547 if (result != SUCCESS) {
2548 AUDIO_ERR_LOG("Failed to remove the audio session device callback.");
2549 return result;
2550 }
2551
2552 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_AUDIO_SESSION_DEVICE].mutex);
2553 if (audioPolicyClientStubCB_->GetAudioSessionDeviceCallbackSize() == 0) {
2554 // Notify audio server that all of the client listeners have been unregisterd.
2555 callbackChangeInfos_[CALLBACK_AUDIO_SESSION_DEVICE].isEnable = false;
2556 SetClientCallbacksEnable(CALLBACK_AUDIO_SESSION_DEVICE, false);
2557 }
2558 return result;
2559 }
2560
GetSpatializationSceneType()2561 AudioSpatializationSceneType AudioPolicyManager::GetSpatializationSceneType()
2562 {
2563 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2564 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, SPATIALIZATION_SCENE_TYPE_MUSIC, "audio policy manager proxy is NULL.");
2565 int32_t type = SPATIALIZATION_SCENE_TYPE_MUSIC;
2566 gsp->GetSpatializationSceneType(type);
2567 return static_cast<AudioSpatializationSceneType>(type);
2568 }
2569
SetSpatializationSceneType(const AudioSpatializationSceneType spatializationSceneType)2570 int32_t AudioPolicyManager::SetSpatializationSceneType(const AudioSpatializationSceneType spatializationSceneType)
2571 {
2572 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2573 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2574 return gsp->SetSpatializationSceneType(spatializationSceneType);
2575 }
2576
GetMaxAmplitude(const int32_t deviceId)2577 float AudioPolicyManager::GetMaxAmplitude(const int32_t deviceId)
2578 {
2579 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2580 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, SPATIALIZATION_SCENE_TYPE_DEFAULT, "audio policy manager proxy is NULL.");
2581 float ret = SPATIALIZATION_SCENE_TYPE_DEFAULT;
2582 gsp->GetMaxAmplitude(deviceId, ret);
2583 return ret;
2584 }
2585
DisableSafeMediaVolume()2586 int32_t AudioPolicyManager::DisableSafeMediaVolume()
2587 {
2588 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2589 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2590 return gsp->DisableSafeMediaVolume();
2591 }
2592
IsHeadTrackingDataRequested(const std::string & macAddress)2593 bool AudioPolicyManager::IsHeadTrackingDataRequested(const std::string &macAddress)
2594 {
2595 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2596 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
2597 bool ret = false;
2598 gsp->IsHeadTrackingDataRequested(macAddress, ret);
2599 return ret;
2600 }
2601
RegisterHeadTrackingDataRequestedEventListener(const std::string & macAddress,const std::shared_ptr<HeadTrackingDataRequestedChangeCallback> & callback)2602 int32_t AudioPolicyManager::RegisterHeadTrackingDataRequestedEventListener(const std::string &macAddress,
2603 const std::shared_ptr<HeadTrackingDataRequestedChangeCallback> &callback)
2604 {
2605 AUDIO_DEBUG_LOG("Start to register");
2606 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
2607
2608 if (!isAudioPolicyClientRegisted_) {
2609 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2610 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2611 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
2612 if (ret != SUCCESS) {
2613 return ret;
2614 }
2615 }
2616
2617 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_HEAD_TRACKING_DATA_REQUESTED_CHANGE].mutex);
2618 if (audioPolicyClientStubCB_ != nullptr) {
2619 audioPolicyClientStubCB_->AddHeadTrackingDataRequestedChangeCallback(macAddress, callback);
2620 size_t callbackSize = audioPolicyClientStubCB_->GetHeadTrackingDataRequestedChangeCallbackSize();
2621 if (callbackSize == 1) {
2622 callbackChangeInfos_[CALLBACK_HEAD_TRACKING_DATA_REQUESTED_CHANGE].isEnable = true;
2623 SetClientCallbacksEnable(CALLBACK_HEAD_TRACKING_DATA_REQUESTED_CHANGE, true);
2624 }
2625 }
2626 return SUCCESS;
2627 }
2628
UnregisterHeadTrackingDataRequestedEventListener(const std::string & macAddress)2629 int32_t AudioPolicyManager::UnregisterHeadTrackingDataRequestedEventListener(const std::string &macAddress)
2630 {
2631 AUDIO_DEBUG_LOG("Start to unregister");
2632 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_HEAD_TRACKING_DATA_REQUESTED_CHANGE].mutex);
2633 if (audioPolicyClientStubCB_ != nullptr) {
2634 audioPolicyClientStubCB_->RemoveHeadTrackingDataRequestedChangeCallback(macAddress);
2635 if (audioPolicyClientStubCB_->GetHeadTrackingDataRequestedChangeCallbackSize() == 0) {
2636 callbackChangeInfos_[CALLBACK_HEAD_TRACKING_DATA_REQUESTED_CHANGE].isEnable = false;
2637 SetClientCallbacksEnable(CALLBACK_HEAD_TRACKING_DATA_REQUESTED_CHANGE, false);
2638 }
2639 }
2640 return SUCCESS;
2641 }
SetAudioDeviceRefinerCallback(const std::shared_ptr<AudioDeviceRefiner> & callback)2642 int32_t AudioPolicyManager::SetAudioDeviceRefinerCallback(const std::shared_ptr<AudioDeviceRefiner> &callback)
2643 {
2644 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2645 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2646 if (callback == nullptr) {
2647 return ERR_INVALID_PARAM;
2648 };
2649
2650 std::unique_lock<std::mutex> lock(listenerStubMutex_);
2651 auto activeDistributedRoutingRoleCb = new (std::nothrow) AudioRoutingManagerListener();
2652 if (activeDistributedRoutingRoleCb == nullptr) {
2653 AUDIO_ERR_LOG("object is nullptr");
2654 return ERROR;
2655 }
2656 activeDistributedRoutingRoleCb->SetAudioDeviceRefinerCallback(callback);
2657 sptr<IRemoteObject> object = activeDistributedRoutingRoleCb->AsObject();
2658 if (object == nullptr) {
2659 AUDIO_ERR_LOG("listenerStub is nullptr");
2660 delete activeDistributedRoutingRoleCb;
2661 return ERROR;
2662 }
2663
2664 return gsp->SetAudioDeviceRefinerCallback(object);
2665 }
2666
UnsetAudioDeviceRefinerCallback()2667 int32_t AudioPolicyManager::UnsetAudioDeviceRefinerCallback()
2668 {
2669 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2670 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2671 return gsp->UnsetAudioDeviceRefinerCallback();
2672 }
2673
SetAudioClientInfoMgrCallback(const std::shared_ptr<AudioClientInfoMgrCallback> & callback)2674 int32_t AudioPolicyManager::SetAudioClientInfoMgrCallback(
2675 const std::shared_ptr<AudioClientInfoMgrCallback> &callback)
2676 {
2677 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2678 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2679 if (callback == nullptr) {
2680 return ERR_INVALID_PARAM;
2681 };
2682
2683 sptr<AudioPolicyManagerListenerStubImpl> listener = new (std::nothrow) AudioPolicyManagerListenerStubImpl();
2684 CHECK_AND_RETURN_RET_LOG(listener != nullptr, ERROR, "object null");
2685 listener->SetAudioClientInfoMgrCallback(callback);
2686
2687 sptr<IRemoteObject> object = listener->AsObject();
2688 CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "listenerStub->AsObject is nullptr.");
2689
2690 return gsp->SetAudioClientInfoMgrCallback(object);
2691 }
2692
SetAudioVKBInfoMgrCallback(const std::shared_ptr<AudioVKBInfoMgrCallback> & callback)2693 int32_t AudioPolicyManager::SetAudioVKBInfoMgrCallback(
2694 const std::shared_ptr<AudioVKBInfoMgrCallback> &callback)
2695 {
2696 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2697 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2698 if (callback == nullptr) {
2699 return ERR_INVALID_PARAM;
2700 };
2701
2702 sptr<AudioPolicyManagerListenerStubImpl> listener = new (std::nothrow) AudioPolicyManagerListenerStubImpl();
2703 CHECK_AND_RETURN_RET_LOG(listener != nullptr, ERROR, "object null");
2704 listener->SetAudioVKBInfoMgrCallback(callback);
2705
2706 sptr<IRemoteObject> object = listener->AsObject();
2707 CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "listenerStub->AsObject is nullptr.");
2708
2709 return gsp->SetAudioVKBInfoMgrCallback(object);
2710 }
2711
2712 // When AudioPolicyServer died, clear client tracker stubs. New tracker stubs will be added
2713 // in IAudioStream::RestoreAudioStream. Only called in AudioPolicyServerDied().
ResetClientTrackerStubMap()2714 void AudioPolicyManager::ResetClientTrackerStubMap()
2715 {
2716 std::lock_guard<std::mutex> lock(clientTrackerStubMutex_);
2717 for (auto it : clientTrackerStubMap_) {
2718 if (it.second != nullptr) {
2719 it.second->UnsetClientTrackerCallback();
2720 } else {
2721 AUDIO_WARNING_LOG("Client tracker stub is nullptr in local map");
2722 }
2723 }
2724 clientTrackerStubMap_.clear();
2725 }
2726
CheckAndRemoveClientTrackerStub(const AudioMode & mode,const AudioStreamChangeInfo & streamChangeInfo)2727 void AudioPolicyManager::CheckAndRemoveClientTrackerStub(const AudioMode &mode,
2728 const AudioStreamChangeInfo &streamChangeInfo)
2729 {
2730 if (streamChangeInfo.audioRendererChangeInfo.rendererState != RENDERER_RELEASED &&
2731 streamChangeInfo.audioCapturerChangeInfo.capturerState != CAPTURER_RELEASED) {
2732 return;
2733 }
2734 int32_t sessionId = mode == AUDIO_MODE_PLAYBACK ? streamChangeInfo.audioRendererChangeInfo.sessionId :
2735 streamChangeInfo.audioCapturerChangeInfo.sessionId;
2736 RemoveClientTrackerStub(sessionId);
2737 }
2738
RemoveClientTrackerStub(int32_t sessionId)2739 void AudioPolicyManager::RemoveClientTrackerStub(int32_t sessionId)
2740 {
2741 std::unique_lock<std::mutex> lock(clientTrackerStubMutex_);
2742 if (clientTrackerStubMap_.find(sessionId) != clientTrackerStubMap_.end() &&
2743 clientTrackerStubMap_[sessionId] != nullptr) {
2744 clientTrackerStubMap_[sessionId]->UnsetClientTrackerCallback();
2745 clientTrackerStubMap_.erase(sessionId);
2746 AUDIO_INFO_LOG("Client tracker for session %{public}d removed", sessionId);
2747 } else {
2748 AUDIO_WARNING_LOG("Client tracker for session %{public}d not exist", sessionId);
2749 }
2750 }
2751
GetSupportedAudioEffectProperty(AudioEffectPropertyArrayV3 & propertyArray)2752 int32_t AudioPolicyManager::GetSupportedAudioEffectProperty(AudioEffectPropertyArrayV3 &propertyArray)
2753 {
2754 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2755 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
2756 int32_t result = gsp->GetSupportedAudioEffectProperty(propertyArray);
2757 CHECK_AND_RETURN_RET_LOG(result == ERR_NONE, result, "Get Supported Audio Effect Property, error: %d", result);
2758
2759 int32_t size = static_cast<int32_t>(propertyArray.property.size());
2760 CHECK_AND_RETURN_RET_LOG(size >= 0 && size <= AUDIO_EFFECT_COUNT_UPPER_LIMIT,
2761 ERROR_INVALID_PARAM, "size invalid");
2762 return result;
2763 }
2764
SetAudioEffectProperty(const AudioEffectPropertyArrayV3 & propertyArray)2765 int32_t AudioPolicyManager::SetAudioEffectProperty(const AudioEffectPropertyArrayV3 &propertyArray)
2766 {
2767 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2768 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
2769 return gsp->SetAudioEffectProperty(propertyArray);
2770 }
2771
GetAudioEffectProperty(AudioEffectPropertyArrayV3 & propertyArray)2772 int32_t AudioPolicyManager::GetAudioEffectProperty(AudioEffectPropertyArrayV3 &propertyArray)
2773 {
2774 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2775 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
2776 int32_t result = gsp->GetAudioEffectProperty(propertyArray);
2777 CHECK_AND_RETURN_RET_LOG(result == ERR_NONE, result, "Get Audio Effect Property, error: %d", result);
2778
2779 int32_t size = static_cast<int32_t>(propertyArray.property.size());
2780 CHECK_AND_RETURN_RET_LOG(size >= 0 && size <= AUDIO_EFFECT_COUNT_UPPER_LIMIT,
2781 ERROR_INVALID_PARAM, "size invalid");
2782 return result;
2783 }
2784
GetSupportedAudioEffectProperty(AudioEffectPropertyArray & propertyArray)2785 int32_t AudioPolicyManager::GetSupportedAudioEffectProperty(AudioEffectPropertyArray &propertyArray)
2786 {
2787 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2788 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
2789 int32_t result = gsp->GetSupportedAudioEffectProperty(propertyArray);
2790 CHECK_AND_RETURN_RET_LOG(result == ERR_NONE, result, "Get Supported Audio Effect Property, error: %d", result);
2791
2792 int32_t size = static_cast<int32_t>(propertyArray.property.size());
2793 CHECK_AND_RETURN_RET_LOG(size >= 0 && size <= AUDIO_EFFECT_COUNT_UPPER_LIMIT,
2794 ERROR_INVALID_PARAM, "size invalid");
2795 return result;
2796 }
2797
GetSupportedAudioEnhanceProperty(AudioEnhancePropertyArray & propertyArray)2798 int32_t AudioPolicyManager::GetSupportedAudioEnhanceProperty(AudioEnhancePropertyArray &propertyArray)
2799 {
2800 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2801 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
2802 int32_t result = gsp->GetSupportedAudioEnhanceProperty(propertyArray);
2803 CHECK_AND_RETURN_RET_LOG(result == ERR_NONE, result, "Get Supported Audio Enhance Property, error: %d", result);
2804
2805 int32_t size = static_cast<int32_t>(propertyArray.property.size());
2806 CHECK_AND_RETURN_RET_LOG(size >= 0 && size <= AUDIO_EFFECT_COUNT_UPPER_LIMIT,
2807 ERROR_INVALID_PARAM, "size invalid");
2808 return result;
2809 }
2810
SetAudioEffectProperty(const AudioEffectPropertyArray & propertyArray)2811 int32_t AudioPolicyManager::SetAudioEffectProperty(const AudioEffectPropertyArray &propertyArray)
2812 {
2813 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2814 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
2815 return gsp->SetAudioEffectProperty(propertyArray);
2816 }
2817
GetAudioEffectProperty(AudioEffectPropertyArray & propertyArray)2818 int32_t AudioPolicyManager::GetAudioEffectProperty(AudioEffectPropertyArray &propertyArray)
2819 {
2820 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2821 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
2822 int32_t result = gsp->GetAudioEffectProperty(propertyArray);
2823 CHECK_AND_RETURN_RET_LOG(result == ERR_NONE, result, "Get Audio Effect Property, error: %d", result);
2824
2825 int32_t size = static_cast<int32_t>(propertyArray.property.size());
2826 CHECK_AND_RETURN_RET_LOG(size >= 0 && size <= AUDIO_EFFECT_COUNT_UPPER_LIMIT,
2827 ERROR_INVALID_PARAM, "size invalid");
2828 return result;
2829 }
2830
SetAudioEnhanceProperty(const AudioEnhancePropertyArray & propertyArray)2831 int32_t AudioPolicyManager::SetAudioEnhanceProperty(const AudioEnhancePropertyArray &propertyArray)
2832 {
2833 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2834 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
2835 return gsp->SetAudioEnhanceProperty(propertyArray);
2836 }
2837
GetAudioEnhanceProperty(AudioEnhancePropertyArray & propertyArray)2838 int32_t AudioPolicyManager::GetAudioEnhanceProperty(AudioEnhancePropertyArray &propertyArray)
2839 {
2840 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2841 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
2842 int32_t result = gsp->GetAudioEnhanceProperty(propertyArray);
2843 CHECK_AND_RETURN_RET_LOG(result == ERR_NONE, result, "Get Audio Enhance Property, error: %d", result);
2844
2845 int32_t size = static_cast<int32_t>(propertyArray.property.size());
2846 CHECK_AND_RETURN_RET_LOG(size >= 0 && size <= AUDIO_EFFECT_COUNT_UPPER_LIMIT,
2847 ERROR_INVALID_PARAM, "size invalid");
2848 return result;
2849 }
2850
InjectInterruption(const std::string networkId,InterruptEvent & event)2851 int32_t AudioPolicyManager::InjectInterruption(const std::string networkId, InterruptEvent &event)
2852 {
2853 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2854 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2855 return gsp->InjectInterruption(networkId, event);
2856 }
2857
LoadSplitModule(const std::string & splitArgs,const std::string & networkId)2858 int32_t AudioPolicyManager::LoadSplitModule(const std::string &splitArgs, const std::string &networkId)
2859 {
2860 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2861 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2862 return gsp->LoadSplitModule(splitArgs, networkId);
2863 }
2864
IsAllowedPlayback(const int32_t & uid,const int32_t & pid)2865 bool AudioPolicyManager::IsAllowedPlayback(const int32_t &uid, const int32_t &pid)
2866 {
2867 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2868 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2869 bool isAllowed = false;
2870 gsp->IsAllowedPlayback(uid, pid, isAllowed);
2871 return isAllowed;
2872 }
2873
SetVoiceRingtoneMute(bool isMute)2874 int32_t AudioPolicyManager::SetVoiceRingtoneMute(bool isMute)
2875 {
2876 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2877 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2878 return gsp->SetVoiceRingtoneMute(isMute);
2879 }
2880
SetVirtualCall(const bool isVirtual)2881 int32_t AudioPolicyManager::SetVirtualCall(const bool isVirtual)
2882 {
2883 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2884 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2885 return gsp->SetVirtualCall(isVirtual);
2886 }
2887
SetQueryAllowedPlaybackCallback(const std::shared_ptr<AudioQueryAllowedPlaybackCallback> & callback)2888 int32_t AudioPolicyManager::SetQueryAllowedPlaybackCallback(
2889 const std::shared_ptr<AudioQueryAllowedPlaybackCallback> &callback)
2890 {
2891 AUDIO_INFO_LOG("In");
2892 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2893 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2894 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
2895
2896 sptr<AudioPolicyManagerListenerStubImpl> listener = new(std::nothrow) AudioPolicyManagerListenerStubImpl();
2897 CHECK_AND_RETURN_RET_LOG(listener != nullptr, ERROR, "object null");
2898 listener->SetQueryAllowedPlaybackCallback(callback);
2899
2900 sptr<IRemoteObject> object = listener->AsObject();
2901 CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "listenerStub->AsObject is nullptr.");
2902
2903 return gsp->SetQueryAllowedPlaybackCallback(object);
2904 }
2905
SetBackgroundMuteCallback(const std::shared_ptr<AudioBackgroundMuteCallback> & callback)2906 int32_t AudioPolicyManager::SetBackgroundMuteCallback(
2907 const std::shared_ptr<AudioBackgroundMuteCallback> &callback)
2908 {
2909 AUDIO_INFO_LOG("In");
2910 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2911 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2912 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
2913
2914 sptr<AudioPolicyManagerListenerStubImpl> listener = new(std::nothrow) AudioPolicyManagerListenerStubImpl();
2915 CHECK_AND_RETURN_RET_LOG(listener != nullptr, ERROR, "object null");
2916 listener->SetBackgroundMuteCallback(callback);
2917
2918 sptr<IRemoteObject> object = listener->AsObject();
2919 CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "listenerStub->AsObject is nullptr.");
2920
2921 return gsp->SetBackgroundMuteCallback(object);
2922 }
2923
NotifySessionStateChange(const int32_t uid,const int32_t pid,const bool hasSession)2924 int32_t AudioPolicyManager::NotifySessionStateChange(const int32_t uid, const int32_t pid, const bool hasSession)
2925 {
2926 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2927 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2928 return gsp->NotifySessionStateChange(uid, pid, hasSession);
2929 }
2930
NotifyFreezeStateChange(const std::set<int32_t> & pidList,const bool isFreeze)2931 int32_t AudioPolicyManager::NotifyFreezeStateChange(const std::set<int32_t> &pidList, const bool isFreeze)
2932 {
2933 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2934 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2935 return gsp->NotifyFreezeStateChange(pidList, isFreeze);
2936 }
2937
ResetAllProxy()2938 int32_t AudioPolicyManager::ResetAllProxy()
2939 {
2940 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2941 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2942 return gsp->ResetAllProxy();
2943 }
2944
NotifyProcessBackgroundState(const int32_t uid,const int32_t pid)2945 int32_t AudioPolicyManager::NotifyProcessBackgroundState(const int32_t uid, const int32_t pid)
2946 {
2947 AUDIO_INFO_LOG("In");
2948 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2949 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2950 return gsp->NotifyProcessBackgroundState(uid, pid);
2951 }
2952
SetAudioFormatUnsupportedErrorCallback(const std::shared_ptr<AudioFormatUnsupportedErrorCallback> & callback)2953 int32_t AudioPolicyManager::SetAudioFormatUnsupportedErrorCallback(
2954 const std::shared_ptr<AudioFormatUnsupportedErrorCallback> &callback)
2955 {
2956 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
2957 if (!isAudioPolicyClientRegisted_) {
2958 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2959 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2960 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
2961 CHECK_AND_RETURN_RET(ret == SUCCESS, ret);
2962 }
2963
2964 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_FORMAT_UNSUPPORTED_ERROR].mutex);
2965 CHECK_AND_RETURN_RET(audioPolicyClientStubCB_ != nullptr, ERR_NULL_POINTER);
2966 audioPolicyClientStubCB_->AddAudioFormatUnsupportedErrorCallback(callback);
2967 if (audioPolicyClientStubCB_->GetAudioFormatUnsupportedErrorCallbackSize() == 1) {
2968 callbackChangeInfos_[CALLBACK_FORMAT_UNSUPPORTED_ERROR].isEnable = true;
2969 SetClientCallbacksEnable(CALLBACK_FORMAT_UNSUPPORTED_ERROR, true);
2970 }
2971 return SUCCESS;
2972 }
2973
UnsetAudioFormatUnsupportedErrorCallback()2974 int32_t AudioPolicyManager::UnsetAudioFormatUnsupportedErrorCallback()
2975 {
2976 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_FORMAT_UNSUPPORTED_ERROR].mutex);
2977 CHECK_AND_RETURN_RET(audioPolicyClientStubCB_ != nullptr, ERR_NULL_POINTER);
2978 audioPolicyClientStubCB_->RemoveAudioFormatUnsupportedErrorCallback();
2979 if (audioPolicyClientStubCB_->GetAudioFormatUnsupportedErrorCallbackSize() == 0) {
2980 callbackChangeInfos_[CALLBACK_FORMAT_UNSUPPORTED_ERROR].isEnable = false;
2981 SetClientCallbacksEnable(CALLBACK_FORMAT_UNSUPPORTED_ERROR, false);
2982 }
2983 return SUCCESS;
2984 }
2985
GetDirectPlaybackSupport(const AudioStreamInfo & streamInfo,const StreamUsage & streamUsage)2986 DirectPlaybackMode AudioPolicyManager::GetDirectPlaybackSupport(const AudioStreamInfo &streamInfo,
2987 const StreamUsage &streamUsage)
2988 {
2989 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2990 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, DIRECT_PLAYBACK_NOT_SUPPORTED, "audio policy manager proxy is NULL.");
2991 int32_t ret = DIRECT_PLAYBACK_NOT_SUPPORTED;
2992 gsp->GetDirectPlaybackSupport(streamInfo, streamUsage, ret);
2993 return static_cast<DirectPlaybackMode>(ret);
2994 }
2995
IsAcousticEchoCancelerSupported(SourceType sourceType)2996 bool AudioPolicyManager::IsAcousticEchoCancelerSupported(SourceType sourceType)
2997 {
2998 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2999 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
3000
3001 bool isSupport = false;
3002 gsp->IsAcousticEchoCancelerSupported(sourceType, isSupport);
3003 return isSupport;
3004 }
3005
SetKaraokeParameters(const std::string & parameters)3006 bool AudioPolicyManager::SetKaraokeParameters(const std::string ¶meters)
3007 {
3008 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3009 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
3010 bool ret = false;
3011 gsp->SetKaraokeParameters(parameters, ret);
3012 return ret;
3013 }
3014
IsAudioLoopbackSupported(AudioLoopbackMode mode)3015 bool AudioPolicyManager::IsAudioLoopbackSupported(AudioLoopbackMode mode)
3016 {
3017 Trace trace("AudioPolicyManager::IsAudioLoopbackSupported");
3018 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3019 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
3020 bool support = false;
3021 gsp->IsAudioLoopbackSupported(mode, support);
3022 return support;
3023 }
3024
GetMaxVolumeLevelByUsage(StreamUsage streamUsage)3025 int32_t AudioPolicyManager::GetMaxVolumeLevelByUsage(StreamUsage streamUsage)
3026 {
3027 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3028 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
3029 int32_t maxVolumeLevel = 0;
3030 gsp->GetMaxVolumeLevelByUsage(streamUsage, maxVolumeLevel);
3031 return maxVolumeLevel;
3032 }
GetMinVolumeLevelByUsage(StreamUsage streamUsage)3033 int32_t AudioPolicyManager::GetMinVolumeLevelByUsage(StreamUsage streamUsage)
3034 {
3035 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3036 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
3037 int32_t minVolumeLevel = 0;
3038 gsp->GetMinVolumeLevelByUsage(streamUsage, minVolumeLevel);
3039 return minVolumeLevel;
3040 }
3041
GetVolumeLevelByUsage(StreamUsage streamUsage)3042 int32_t AudioPolicyManager::GetVolumeLevelByUsage(StreamUsage streamUsage)
3043 {
3044 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3045 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
3046 int32_t volumeLevel = 0;
3047 gsp->GetVolumeLevelByUsage(streamUsage, volumeLevel);
3048 return volumeLevel;
3049 }
3050
GetStreamMuteByUsage(StreamUsage streamUsage)3051 bool AudioPolicyManager::GetStreamMuteByUsage(StreamUsage streamUsage)
3052 {
3053 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3054 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
3055 bool isMute = false;
3056 gsp->GetStreamMuteByUsage(streamUsage, isMute);
3057 return isMute;
3058 }
3059
GetVolumeInDbByStream(StreamUsage streamUsage,int32_t volumeLevel,DeviceType deviceType)3060 float AudioPolicyManager::GetVolumeInDbByStream(StreamUsage streamUsage, int32_t volumeLevel, DeviceType deviceType)
3061 {
3062 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3063 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
3064 float volume = -1;
3065 int32_t ret = gsp->GetVolumeInDbByStream(static_cast<int32_t>(streamUsage), volumeLevel,
3066 static_cast<int32_t>(deviceType), volume);
3067 return ret == SUCCESS ? volume : ERR_INVALID_PARAM;
3068 }
3069
GetSupportedAudioVolumeTypes()3070 std::vector<AudioVolumeType> AudioPolicyManager::GetSupportedAudioVolumeTypes()
3071 {
3072 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3073 std::vector<AudioVolumeType> retList = {};
3074 if (gsp == nullptr) {
3075 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
3076 return retList;
3077 }
3078 std::vector<int32_t> inList = {};
3079 gsp->GetSupportedAudioVolumeTypes(inList);
3080 for (auto &item : inList) {
3081 retList.push_back(static_cast<AudioVolumeType>(item));
3082 }
3083 return retList;
3084 }
3085
GetAudioVolumeTypeByStreamUsage(StreamUsage streamUsage)3086 AudioVolumeType AudioPolicyManager::GetAudioVolumeTypeByStreamUsage(StreamUsage streamUsage)
3087 {
3088 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3089 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, AudioVolumeType::STREAM_DEFAULT, "audio policy manager proxy is NULL.");
3090 int32_t volumeType = AudioVolumeType::STREAM_DEFAULT;
3091 int32_t ret = gsp->GetAudioVolumeTypeByStreamUsage(streamUsage, volumeType);
3092 return ret == SUCCESS ? static_cast<AudioVolumeType>(volumeType) : AudioVolumeType::STREAM_DEFAULT;
3093 }
3094
GetStreamUsagesByVolumeType(AudioVolumeType audioVolumeType)3095 std::vector<StreamUsage> AudioPolicyManager::GetStreamUsagesByVolumeType(AudioVolumeType audioVolumeType)
3096 {
3097 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3098 std::vector<StreamUsage> retList{};
3099 if (gsp == nullptr) {
3100 AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
3101 return retList;
3102 }
3103 std::vector<int32_t> inList = {};
3104 gsp->GetStreamUsagesByVolumeType(static_cast<int32_t>(audioVolumeType), inList);
3105 for (auto &item : inList) {
3106 retList.push_back(static_cast<StreamUsage>(item));
3107 }
3108 return retList;
3109 }
3110
3111
SetStreamVolumeChangeCallback(const int32_t clientPid,const std::set<StreamUsage> & streamUsages,const std::shared_ptr<StreamVolumeChangeCallback> & callback)3112 int32_t AudioPolicyManager::SetStreamVolumeChangeCallback(const int32_t clientPid,
3113 const std::set<StreamUsage> &streamUsages, const std::shared_ptr<StreamVolumeChangeCallback> &callback)
3114 {
3115 AUDIO_INFO_LOG("SetVolumeKeyEventCallback: client: %{public}d", clientPid);
3116 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "volume back is nullptr");
3117
3118 if (!isAudioPolicyClientRegisted_) {
3119 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3120 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
3121 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
3122 if (ret != SUCCESS) {
3123 return ret;
3124 }
3125 }
3126
3127 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_STREAM_VOLUME_CHANGE].mutex);
3128 if (audioPolicyClientStubCB_ != nullptr) {
3129 audioPolicyClientStubCB_->AddStreamVolumeChangeCallback(streamUsages, callback);
3130 size_t callbackSize = audioPolicyClientStubCB_->GetStreamVolumeChangeCallbackSize();
3131 if (callbackSize == 1) {
3132 callbackChangeInfos_[CALLBACK_STREAM_VOLUME_CHANGE].isEnable = true;
3133 SetClientCallbacksEnable(CALLBACK_STREAM_VOLUME_CHANGE, true);
3134 }
3135 SetCallbackStreamUsageInfo(audioPolicyClientStubCB_->GetStreamVolumeChangeCallbackStreamUsages());
3136 }
3137 return SUCCESS;
3138 }
3139
UnsetStreamVolumeChangeCallback(const std::shared_ptr<StreamVolumeChangeCallback> & callback)3140 int32_t AudioPolicyManager::UnsetStreamVolumeChangeCallback(
3141 const std::shared_ptr<StreamVolumeChangeCallback> &callback)
3142 {
3143 AUDIO_DEBUG_LOG("UnsetStreamVolumeKeyEventCallback");
3144 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_STREAM_VOLUME_CHANGE].mutex);
3145 if (audioPolicyClientStubCB_ != nullptr) {
3146 audioPolicyClientStubCB_->RemoveStreamVolumeChangeCallback(callback);
3147 if (audioPolicyClientStubCB_->GetStreamVolumeChangeCallbackSize() == 0) {
3148 callbackChangeInfos_[CALLBACK_STREAM_VOLUME_CHANGE].isEnable = false;
3149 SetClientCallbacksEnable(CALLBACK_STREAM_VOLUME_CHANGE, false);
3150 }
3151 SetCallbackStreamUsageInfo(audioPolicyClientStubCB_->GetStreamVolumeChangeCallbackStreamUsages());
3152 }
3153 return SUCCESS;
3154 }
3155
SetCallbackStreamUsageInfo(const std::set<StreamUsage> & streamUsages)3156 int32_t AudioPolicyManager::SetCallbackStreamUsageInfo(const std::set<StreamUsage> &streamUsages)
3157 {
3158 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3159 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
3160
3161 std::set<int32_t> streamUsagesIn;
3162 for (auto item : streamUsages) {
3163 streamUsagesIn.insert(static_cast<int32_t>(item));
3164 }
3165 return gsp->SetCallbackStreamUsageInfo(streamUsagesIn);
3166 }
3167
IsCollaborativePlaybackSupported()3168 bool AudioPolicyManager::IsCollaborativePlaybackSupported()
3169 {
3170 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3171 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
3172 bool support = false;
3173 gsp->IsCollaborativePlaybackSupported(support);
3174 return support;
3175 }
3176
IsCollaborativePlaybackEnabledForDevice(const std::shared_ptr<AudioDeviceDescriptor> & selectedAudioDevice)3177 bool AudioPolicyManager::IsCollaborativePlaybackEnabledForDevice(
3178 const std::shared_ptr<AudioDeviceDescriptor> &selectedAudioDevice)
3179 {
3180 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3181 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
3182 bool enable = false;
3183 gsp->IsCollaborativePlaybackEnabledForDevice(selectedAudioDevice, enable);
3184 return enable;
3185 }
3186
SetCollaborativePlaybackEnabledForDevice(const std::shared_ptr<AudioDeviceDescriptor> & selectedAudioDevice,bool enabled)3187 int32_t AudioPolicyManager::SetCollaborativePlaybackEnabledForDevice(
3188 const std::shared_ptr<AudioDeviceDescriptor> &selectedAudioDevice, bool enabled)
3189 {
3190 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3191 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
3192 return gsp->SetCollaborativePlaybackEnabledForDevice(selectedAudioDevice, enabled);
3193 }
3194
ForceStopAudioStream(StopAudioType audioType)3195 int32_t AudioPolicyManager::ForceStopAudioStream(StopAudioType audioType)
3196 {
3197 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3198 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
3199 return gsp->ForceStopAudioStream(audioType);
3200 }
3201
IsCapturerFocusAvailable(const AudioCapturerInfo & capturerInfo)3202 bool AudioPolicyManager::IsCapturerFocusAvailable(const AudioCapturerInfo &capturerInfo)
3203 {
3204 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3205 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
3206 bool isAvailable = false;
3207 gsp->IsCapturerFocusAvailable(capturerInfo, isAvailable);
3208 return isAvailable;
3209 }
3210
ForceVolumeKeyControlType(AudioVolumeType volumeType,int32_t duration)3211 int32_t AudioPolicyManager::ForceVolumeKeyControlType(AudioVolumeType volumeType, int32_t duration)
3212 {
3213 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3214 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
3215 int32_t ret = ERROR;
3216 gsp->ForceVolumeKeyControlType(static_cast<int32_t>(volumeType), duration, ret);
3217 return ret;
3218 }
3219
SetVolumeDegreeCallback(const int32_t clientPid,const std::shared_ptr<VolumeKeyEventCallback> & callback)3220 int32_t AudioPolicyManager::SetVolumeDegreeCallback(const int32_t clientPid,
3221 const std::shared_ptr<VolumeKeyEventCallback> &callback)
3222 {
3223 AUDIO_INFO_LOG("client: %{public}d", clientPid);
3224 if (!PermissionUtil::VerifySystemPermission()) {
3225 AUDIO_ERR_LOG("No system permission");
3226 return ERR_PERMISSION_DENIED;
3227 }
3228 CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "volume back is nullptr");
3229
3230 if (!isAudioPolicyClientRegisted_) {
3231 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3232 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
3233 int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
3234 if (ret != SUCCESS) {
3235 return ret;
3236 }
3237 }
3238
3239 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_VOLUME_DEGREE_CHANGE].mutex);
3240 if (audioPolicyClientStubCB_ != nullptr) {
3241 audioPolicyClientStubCB_->AddVolumeDegreeCallback(callback);
3242 size_t callbackSize = audioPolicyClientStubCB_->GetVolumeDegreeCallbackSize();
3243 if (callbackSize == 1) {
3244 callbackChangeInfos_[CALLBACK_SET_VOLUME_DEGREE_CHANGE].isEnable = true;
3245 SetClientCallbacksEnable(CALLBACK_SET_VOLUME_DEGREE_CHANGE, true);
3246 }
3247 }
3248 return SUCCESS;
3249 }
3250
UnsetVolumeDegreeCallback(const std::shared_ptr<VolumeKeyEventCallback> & callback)3251 int32_t AudioPolicyManager::UnsetVolumeDegreeCallback(
3252 const std::shared_ptr<VolumeKeyEventCallback> &callback)
3253 {
3254 AUDIO_DEBUG_LOG("Start to unregister");
3255 std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_VOLUME_DEGREE_CHANGE].mutex);
3256 if (audioPolicyClientStubCB_ != nullptr) {
3257 audioPolicyClientStubCB_->RemoveVolumeDegreeCallback(callback);
3258 if (audioPolicyClientStubCB_->GetVolumeDegreeCallbackSize() == 0) {
3259 callbackChangeInfos_[CALLBACK_SET_VOLUME_DEGREE_CHANGE].isEnable = false;
3260 SetClientCallbacksEnable(CALLBACK_SET_VOLUME_DEGREE_CHANGE, false, false);
3261 }
3262 }
3263 return SUCCESS;
3264 }
3265
SetSystemVolumeDegree(AudioVolumeType volumeType,int32_t volumeDegree,int32_t volumeFlag,int32_t uid)3266 int32_t AudioPolicyManager::SetSystemVolumeDegree(AudioVolumeType volumeType, int32_t volumeDegree,
3267 int32_t volumeFlag, int32_t uid)
3268 {
3269 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3270 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
3271 return gsp->SetSystemVolumeDegree(volumeType, volumeDegree, volumeFlag, uid);
3272 }
3273
GetSystemVolumeDegree(AudioVolumeType volumeType,int32_t uid)3274 int32_t AudioPolicyManager::GetSystemVolumeDegree(AudioVolumeType volumeType, int32_t uid)
3275 {
3276 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3277 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, 0, "audio policy manager proxy is NULL.");
3278
3279 int32_t volumeDegree = 0;
3280 gsp->GetSystemVolumeDegree(volumeType, uid, volumeDegree);
3281 return volumeDegree;
3282 }
3283
GetMinVolumeDegree(AudioVolumeType volumeType)3284 int32_t AudioPolicyManager::GetMinVolumeDegree(AudioVolumeType volumeType)
3285 {
3286 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3287 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, 0, "audio policy manager proxy is NULL.");
3288
3289 int32_t volumeDegree = 0;
3290 gsp->GetMinVolumeDegree(volumeType, volumeDegree);
3291 return volumeDegree;
3292 }
3293
GetInstance()3294 AudioPolicyManager& AudioPolicyManager::GetInstance()
3295 {
3296 static AudioPolicyManager policyManager;
3297 return policyManager;
3298 }
3299 // LCOV_EXCL_STOP
3300 } // namespace AudioStandard
3301 } // namespace OHOS
3302