• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 &microphoneBlockedInfo) 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