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