1 /* 2 * Copyright (c) 2024-2025 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef OH_AUDIO_ROUTING_MANAGER_H 17 #define OH_AUDIO_ROUTING_MANAGER_H 18 19 #include "audio_common_log.h" 20 #include "native_audio_routing_manager.h" 21 #include "native_audio_common.h" 22 #include "native_audio_device_base.h" 23 #include "audio_system_manager.h" 24 #include "OHAudioDeviceDescriptor.h" 25 26 namespace OHOS { 27 namespace AudioStandard { 28 29 class OHAudioDeviceChangedCallback : public AudioManagerDeviceChangeCallback { 30 public: OHAudioDeviceChangedCallback(OH_AudioRoutingManager_OnDeviceChangedCallback callback)31 explicit OHAudioDeviceChangedCallback(OH_AudioRoutingManager_OnDeviceChangedCallback callback) 32 : callback_(callback) 33 { 34 } 35 void OnDeviceChange(const DeviceChangeAction &deviceChangeAction) override; 36 GetCallback()37 OH_AudioRoutingManager_OnDeviceChangedCallback GetCallback() 38 { 39 return callback_; 40 } 41 ~OHAudioDeviceChangedCallback()42 ~OHAudioDeviceChangedCallback() 43 { 44 AUDIO_INFO_LOG("~OHAudioDeviceChangedCallback called."); 45 if (callback_ != nullptr) { 46 callback_ = nullptr; 47 } 48 } 49 50 private: 51 OH_AudioRoutingManager_OnDeviceChangedCallback callback_; 52 }; 53 54 class OHMicrophoneBlockCallback : public AudioManagerMicrophoneBlockedCallback { 55 public: OHMicrophoneBlockCallback(OH_AudioRoutingManager_OnDeviceBlockStatusCallback callback,void * userData)56 explicit OHMicrophoneBlockCallback(OH_AudioRoutingManager_OnDeviceBlockStatusCallback callback, void *userData) 57 : blockedCallback_(callback) 58 { 59 } 60 GetCallback()61 OH_AudioRoutingManager_OnDeviceBlockStatusCallback GetCallback() 62 { 63 return blockedCallback_; 64 } 65 ~OHMicrophoneBlockCallback()66 ~OHMicrophoneBlockCallback() 67 { 68 AUDIO_INFO_LOG("~OHMicrophoneBlockCallback called."); 69 blockedCallback_ = nullptr; 70 } 71 void OnMicrophoneBlocked(const MicrophoneBlockedInfo µphoneBlockedInfo) override; 72 73 private: 74 OH_AudioRoutingManager_OnDeviceBlockStatusCallback blockedCallback_; 75 }; 76 77 class OHAudioRoutingManager { 78 public: 79 ~OHAudioRoutingManager(); 80 GetInstance()81 static OHAudioRoutingManager* GetInstance() 82 { 83 if (!ohAudioRoutingManager_) { 84 ohAudioRoutingManager_ = new OHAudioRoutingManager(); 85 } 86 return ohAudioRoutingManager_; 87 } 88 OH_AudioDeviceDescriptorArray* GetDevices(DeviceFlag deviceFlag); 89 90 OH_AudioDeviceDescriptorArray *ConvertDesc(std::vector<std::shared_ptr<AudioDeviceDescriptor>> &desc); 91 OH_AudioDeviceDescriptorArray *GetAvailableDevices(AudioDeviceUsage deviceUsage); 92 OH_AudioDeviceDescriptorArray *GetPreferredOutputDevice(StreamUsage streamUsage); 93 OH_AudioDeviceDescriptorArray *GetPreferredInputDevice(SourceType sourceType); 94 95 OH_AudioCommon_Result SetDeviceChangeCallback(const DeviceFlag flag, 96 OH_AudioRoutingManager_OnDeviceChangedCallback callback); 97 OH_AudioCommon_Result UnsetDeviceChangeCallback(DeviceFlag flag, 98 OH_AudioRoutingManager_OnDeviceChangedCallback ohOnDeviceChangedcallback); 99 OH_AudioCommon_Result SetMicrophoneBlockedCallback(OH_AudioRoutingManager_OnDeviceBlockStatusCallback callback, 100 void* userData); 101 OH_AudioCommon_Result UnsetMicrophoneBlockedCallback(OH_AudioRoutingManager_OnDeviceBlockStatusCallback callback); 102 103 private: 104 OHAudioRoutingManager(); 105 static OHAudioRoutingManager *ohAudioRoutingManager_; 106 AudioSystemManager *audioSystemManager_ = AudioSystemManager::GetInstance(); 107 std::vector<std::shared_ptr<OHAudioDeviceChangedCallback>> ohAudioOnDeviceChangedCallbackArray_; 108 std::vector<std::shared_ptr<OHMicrophoneBlockCallback>> ohMicroPhoneBlockCallbackArray_; 109 }; 110 OHAudioRoutingManager* OHAudioRoutingManager::ohAudioRoutingManager_ = nullptr; 111 112 } // namespace AudioStandard 113 } // namespace OHOS 114 #endif // OH_AUDIO_ROUTING_MANAGER_H