1 2 /* 3 * Copyright (c) 2021-2025 Huawei Device Co., Ltd. 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef ST_AUDIO_RECOVERY_DEVICE_H 18 #define ST_AUDIO_RECOVERY_DEVICE_H 19 20 #include <bitset> 21 #include <list> 22 #include <string> 23 #include <unordered_map> 24 #include <unordered_set> 25 #include <mutex> 26 #include "audio_device_info.h" 27 #include "audio_stream_collector.h" 28 #include "audio_device_manager.h" 29 #include "audio_affinity_manager.h" 30 #include "media_monitor_manager.h" 31 32 #include "audio_connected_device.h" 33 #include "audio_router_map.h" 34 #include "audio_device_common.h" 35 #include "audio_active_device.h" 36 #include "audio_scene_manager.h" 37 #include "audio_a2dp_offload_manager.h" 38 #include "audio_capturer_session.h" 39 #include "audio_state_manager.h" 40 41 namespace OHOS { 42 namespace AudioStandard { 43 class AudioRecoveryDevice { 44 public: GetInstance()45 static AudioRecoveryDevice& GetInstance() 46 { 47 static AudioRecoveryDevice instance; 48 return instance; 49 } 50 void Init(std::shared_ptr<AudioA2dpOffloadManager> audioA2dpOffloadManager); 51 void DeInit(); 52 void RecoveryPreferredDevices(); 53 void RecoverExcludedOutputDevices(); 54 55 int32_t SelectOutputDevice(sptr<AudioRendererFilter> audioRendererFilter, 56 std::vector<std::shared_ptr<AudioDeviceDescriptor>> audioDeviceDescriptors); 57 int32_t SelectInputDevice(sptr<AudioCapturerFilter> audioCapturerFilter, 58 std::vector<std::shared_ptr<AudioDeviceDescriptor>> audioDeviceDescriptors); 59 int32_t ExcludeOutputDevices(AudioDeviceUsage audioDevUsage, 60 std::vector<std::shared_ptr<AudioDeviceDescriptor>> &audioDeviceDescriptors); 61 int32_t UnexcludeOutputDevices(AudioDeviceUsage audioDevUsage, 62 std::vector<std::shared_ptr<AudioDeviceDescriptor>> &audioDeviceDescriptors); 63 int32_t UnexcludeOutputDevicesInner(AudioDeviceUsage audioDevUsage, 64 std::vector<std::shared_ptr<AudioDeviceDescriptor>> &audioDeviceDescriptors); 65 private: AudioRecoveryDevice()66 AudioRecoveryDevice() : streamCollector_(AudioStreamCollector::GetAudioStreamCollector()), 67 audioDeviceManager_(AudioDeviceManager::GetAudioDeviceManager()), 68 audioAffinityManager_(AudioAffinityManager::GetAudioAffinityManager()), 69 audioActiveDevice_(AudioActiveDevice::GetInstance()), 70 audioSceneManager_(AudioSceneManager::GetInstance()), 71 audioRouteMap_(AudioRouteMap::GetInstance()), 72 audioConnectedDevice_(AudioConnectedDevice::GetInstance()), 73 audioDeviceCommon_(AudioDeviceCommon::GetInstance()), 74 audioCapturerSession_(AudioCapturerSession::GetInstance()), 75 audioStateManager_(AudioStateManager::GetAudioStateManager()) {} ~AudioRecoveryDevice()76 ~AudioRecoveryDevice() {} 77 int32_t HandleRecoveryPreferredDevices(int32_t preferredType, int32_t deviceType, 78 int32_t usageOrSourceType); 79 int32_t HandleExcludedOutputDevicesRecovery(AudioDeviceUsage audioDevUsage, 80 std::vector<std::shared_ptr<Media::MediaMonitor::MonitorDeviceInfo>> &excludedDevices); 81 82 // selectoutputdevice 83 int32_t SelectOutputDeviceForFastInner(sptr<AudioRendererFilter> audioRendererFilter, 84 std::vector<std::shared_ptr<AudioDeviceDescriptor>> selectedDesc); 85 int32_t SetRenderDeviceForUsage(StreamUsage streamUsage, std::shared_ptr<AudioDeviceDescriptor> desc); 86 int32_t ConnectVirtualDevice(std::shared_ptr<AudioDeviceDescriptor> &desc); 87 void HandleFetchDeviceChange(const AudioStreamDeviceChangeReason &reason, const std::string &caller); 88 void WriteSelectOutputSysEvents(const std::vector<std::shared_ptr<AudioDeviceDescriptor>> &selectedDesc, 89 StreamUsage strUsage); 90 int32_t SelectFastOutputDevice(sptr<AudioRendererFilter> audioRendererFilter, 91 std::shared_ptr<AudioDeviceDescriptor> deviceDescriptor); 92 int32_t SelectOutputDeviceByFilterInner(sptr<AudioRendererFilter> audioRendererFilter, 93 std::vector<std::shared_ptr<AudioDeviceDescriptor>> selectedDesc); 94 void SetDeviceEnableAndUsage(const std::shared_ptr<AudioDeviceDescriptor> &deviceDesc); 95 96 // selectinputdevice 97 void SetCaptureDeviceForUsage(AudioScene scene, SourceType srcType, std::shared_ptr<AudioDeviceDescriptor> desc); 98 int32_t SelectFastInputDevice(sptr<AudioCapturerFilter> audioCapturerFilter, 99 std::shared_ptr<AudioDeviceDescriptor> deviceDescriptor); 100 void WriteSelectInputSysEvents(const std::vector<std::shared_ptr<AudioDeviceDescriptor>> &selectedDesc, 101 SourceType srcType, AudioScene scene); 102 103 void WriteExcludeOutputSysEvents(AudioDeviceUsage audioDevUsage, 104 const std::shared_ptr<AudioDeviceDescriptor> &desc); 105 void WriteUnexcludeOutputSysEvents(AudioDeviceUsage audioDevUsage, 106 const std::shared_ptr<AudioDeviceDescriptor> &desc); 107 private: 108 AudioStreamCollector& streamCollector_; 109 AudioDeviceManager &audioDeviceManager_; 110 AudioAffinityManager &audioAffinityManager_; 111 AudioActiveDevice& audioActiveDevice_; 112 AudioSceneManager& audioSceneManager_; 113 AudioRouteMap& audioRouteMap_; 114 AudioConnectedDevice& audioConnectedDevice_; 115 AudioDeviceCommon& audioDeviceCommon_; 116 AudioCapturerSession& audioCapturerSession_; 117 AudioStateManager &audioStateManager_; 118 std::shared_ptr<AudioA2dpOffloadManager> audioA2dpOffloadManager_ = nullptr; 119 }; 120 } 121 } 122 #endif