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