• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 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 ST_PRO_AUDIO_SERVICE_ADAPTER_H
17 #define ST_PRO_AUDIO_SERVICE_ADAPTER_H
18 #include <mutex>
19 #include "safe_map.h"
20 #include <vector>
21 #include "audio_service_adapter.h"
22 #include "audio_module_info.h"
23 #include "audio_service_hpae_callback.h"
24 
25 namespace OHOS {
26 namespace AudioStandard {
27 
28 class ProAudioServiceAdapterImpl : public AudioServiceAdapter, public AudioServiceHpaeCallback,
29                                    public std::enable_shared_from_this<ProAudioServiceAdapterImpl> {
30 public:
31     explicit ProAudioServiceAdapterImpl(std::unique_ptr<AudioServiceAdapterCallback> &cb);
32     ~ProAudioServiceAdapterImpl();
33 
34     bool Connect() override;
35     uint32_t OpenAudioPort(std::string audioPortName, std::string moduleArgs) override;
36     int32_t OpenAudioPort(std::string audioPortName,  const AudioModuleInfo& audioModuleInfo) override;
37     int32_t ReloadAudioPort(const std::string &audioPortName, const AudioModuleInfo& audioModuleInfo) override;
38     int32_t CloseAudioPort(int32_t audioHandleIndex) override;
39     int32_t SetDefaultSink(std::string name) override;
40     int32_t SetDefaultSource(std::string name) override;
41     int32_t SetSourceOutputMute(int32_t uid, bool setMute) override;
42     int32_t SuspendAudioDevice(std::string &audioPortName, bool isSuspend) override;
43     bool SetSinkMute(const std::string &sinkName, bool isMute, bool isSync = false) override;
44     std::vector<SinkInput> GetAllSinkInputs() override;
45     std::vector<SourceOutput> GetAllSourceOutputs() override;
46     void Disconnect() override;
47 
48     std::vector<uint32_t> GetTargetSinks(std::string adapterName) override;
49     std::vector<SinkInfo> GetAllSinks() override;
50     int32_t SetLocalDefaultSink(std::string name) override;
51     int32_t MoveSinkInputByIndexOrName(uint32_t sinkInputId, uint32_t sinkIndex, std::string sinkName) override;
52     int32_t MoveSourceOutputByIndexOrName(
53         uint32_t sourceOutputId, uint32_t sourceIndex, std::string sourceName) override;
54     int32_t GetAudioEffectProperty(AudioEffectPropertyArrayV3 &propertyArray) override;
55     int32_t GetAudioEffectProperty(AudioEffectPropertyArray &propertyArray) override;
56     int32_t GetAudioEnhanceProperty(AudioEffectPropertyArrayV3 &propertyArray,
57         DeviceType deviceType = DEVICE_TYPE_NONE) override;
58     int32_t GetAudioEnhanceProperty(AudioEnhancePropertyArray &propertyArray,
59         DeviceType deviceType = DEVICE_TYPE_NONE) override;
60     int32_t UpdateCollaborativeState(bool isCollaborationEnabled) override;
61     int32_t SetAbsVolumeStateToEffect(const bool absVolumeState) override;
62     // callback Member functions
63     virtual void OnOpenAudioPortCb(int32_t portId) override;
64     virtual void OnReloadAudioPortCb(int32_t portId) override;
65     virtual void OnCloseAudioPortCb(int32_t result) override;
66     virtual void OnSetSinkMuteCb(int32_t result) override;
67     virtual void OnSetSourceOutputMuteCb(int32_t result) override;
68 
69     virtual void OnGetAllSinkInputsCb(int32_t result, std::vector<SinkInput> &sinkInputs) override;
70     virtual void OnGetAllSourceOutputsCb(int32_t result, std::vector<SourceOutput> &sourceOutputs) override;
71     virtual void OnGetAllSinksCb(int32_t result, std::vector<SinkInfo> &sinks) override;
72 
73     virtual void OnMoveSinkInputByIndexOrNameCb(int32_t result) override;
74     virtual void OnMoveSourceOutputByIndexOrNameCb(int32_t result) override;
75 
76     virtual void OnGetAudioEffectPropertyCbV3(int32_t result) override;
77     virtual void OnGetAudioEffectPropertyCb(int32_t result) override;
78     virtual void OnGetAudioEnhancePropertyCbV3(int32_t result) override;
79     virtual void OnGetAudioEnhancePropertyCb(int32_t result) override;
80     virtual void HandleSourceAudioStreamRemoved(uint32_t sessionId) override;
81 
82 private:
83     std::mutex lock_;
84     // for status operation wait and notify
85     std::mutex callbackMutex_;
86     std::condition_variable callbackCV_;
87 
88     bool isFinishOpenAudioPort_ = false;
89     int32_t AudioPortIndex_ = 0;
90     bool isFinishCloseAudioPort_ = false;
91     bool isFinishReloadAudioPort_ = false;
92 
93     bool isFinishGetAllSinkInputs_ = false;
94     std::vector<SinkInput> sinkInputs_;
95     bool isFinishGetAllSourceOutputs_ = false;
96     std::vector<SourceOutput> sourceOutputs_;
97     bool isFinishGetAllSinks_ = false;
98     std::vector<SinkInfo> sinks_;
99     bool isFinishMoveSinkInputByIndexOrName_ = false;
100     bool isFinishMoveSourceOutputByIndexOrName_ = false;
101 
102     int32_t SourceOutputMuteStreamSet_ = 0;
103     bool isFinishSetSourceOutputMute_ = false;
104     bool isFinishSetSinkMute_ = false;
105 
106     bool isFinishGetAudioEffectPropertyV3_ = false;
107     bool isFinishGetAudioEffectProperty_ = false;
108     bool isFinishGetAudioEnhancePropertyV3_ = false;
109     bool isFinishGetAudioEnhanceProperty_ = false;
110 };
111 }  // namespace AudioStandard
112 }  // namespace OHOS
113 #endif  // ST_PULSEAUDIO_AUDIO_SERVICE_ADAPTER_H
114