1 /* 2 * Copyright (c) 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 16 #ifndef OH_AUDIO_ROUTING_MANAGER_H 17 #define OH_AUDIO_ROUTING_MANAGER_H 18 19 #include "audio_info.h" 20 #include "audio_common_log.h" 21 #include "native_audio_routing_manager.h" 22 #include "native_audio_common.h" 23 #include "native_audio_device_base.h" 24 #include "audio_system_manager.h" 25 #include "OHAudioDeviceDescriptor.h" 26 27 namespace OHOS { 28 namespace AudioStandard { 29 30 class OHAudioDeviceChangedCallback : public AudioManagerDeviceChangeCallback { 31 public: OHAudioDeviceChangedCallback(OH_AudioRoutingManager_OnDeviceChangedCallback callback)32 explicit OHAudioDeviceChangedCallback(OH_AudioRoutingManager_OnDeviceChangedCallback callback) 33 : callback_(callback) 34 { 35 } 36 void OnDeviceChange(const DeviceChangeAction &deviceChangeAction) override; 37 GetCallback()38 OH_AudioRoutingManager_OnDeviceChangedCallback GetCallback() 39 { 40 return callback_; 41 } 42 ~OHAudioDeviceChangedCallback()43 ~OHAudioDeviceChangedCallback() 44 { 45 AUDIO_INFO_LOG("~OHAudioDeviceChangedCallback called."); 46 if (callback_ != nullptr) { 47 callback_ = nullptr; 48 } 49 } 50 51 private: 52 OH_AudioRoutingManager_OnDeviceChangedCallback callback_; 53 }; 54 55 class OHMicrophoneBlockCallback : public AudioManagerMicrophoneBlockedCallback { 56 public: OHMicrophoneBlockCallback(OH_AudioRoutingManager_OnDeviceBlockStatusCallback callback,void * userData)57 explicit OHMicrophoneBlockCallback(OH_AudioRoutingManager_OnDeviceBlockStatusCallback callback, void *userData) 58 : blockedCallback_(callback) 59 { 60 } 61 GetCallback()62 OH_AudioRoutingManager_OnDeviceBlockStatusCallback GetCallback() 63 { 64 return blockedCallback_; 65 } 66 ~OHMicrophoneBlockCallback()67 ~OHMicrophoneBlockCallback() 68 { 69 AUDIO_INFO_LOG("~OHMicrophoneBlockCallback called."); 70 blockedCallback_ = nullptr; 71 } 72 void OnMicrophoneBlocked(const MicrophoneBlockedInfo µphoneBlockedInfo) override; 73 74 private: 75 OH_AudioRoutingManager_OnDeviceBlockStatusCallback blockedCallback_; 76 }; 77 78 class OHAudioRoutingManager { 79 public: 80 ~OHAudioRoutingManager(); 81 GetInstance()82 static OHAudioRoutingManager* GetInstance() 83 { 84 if (!ohAudioRoutingManager_) { 85 ohAudioRoutingManager_ = new OHAudioRoutingManager(); 86 } 87 return ohAudioRoutingManager_; 88 } 89 OH_AudioDeviceDescriptorArray* GetDevices(DeviceFlag deviceFlag); 90 91 OH_AudioDeviceDescriptorArray *ConvertDesc(std::vector<sptr<AudioDeviceDescriptor>> &desc); 92 OH_AudioDeviceDescriptorArray *GetAvailableDevices(AudioDeviceUsage deviceUsage); 93 OH_AudioDeviceDescriptorArray *GetPreferredOutputDevice(StreamUsage streamUsage); 94 OH_AudioDeviceDescriptorArray *GetPreferredInputDevice(SourceType sourceType); 95 96 OH_AudioCommon_Result SetDeviceChangeCallback(const DeviceFlag flag, 97 OH_AudioRoutingManager_OnDeviceChangedCallback callback); 98 OH_AudioCommon_Result UnsetDeviceChangeCallback(DeviceFlag flag, 99 OH_AudioRoutingManager_OnDeviceChangedCallback ohOnDeviceChangedcallback); 100 OH_AudioCommon_Result SetMicrophoneBlockedCallback(OH_AudioRoutingManager_OnDeviceBlockStatusCallback callback, 101 void* userData); 102 OH_AudioCommon_Result UnsetMicrophoneBlockedCallback(OH_AudioRoutingManager_OnDeviceBlockStatusCallback callback); 103 104 private: 105 OHAudioRoutingManager(); 106 static OHAudioRoutingManager *ohAudioRoutingManager_; 107 AudioSystemManager *audioSystemManager_ = AudioSystemManager::GetInstance(); 108 std::vector<std::shared_ptr<OHAudioDeviceChangedCallback>> ohAudioOnDeviceChangedCallbackArray_; 109 std::vector<std::shared_ptr<OHMicrophoneBlockCallback>> ohMicroPhoneBlockCallbackArray_; 110 }; 111 OHAudioRoutingManager* OHAudioRoutingManager::ohAudioRoutingManager_ = nullptr; 112 113 } // namespace AudioStandard 114 } // namespace OHOS 115 #endif // OH_AUDIO_ROUTING_MANAGER_H