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