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 HPAE_INNER_CAPTURER_MANAGER_H 17 #define HPAE_INNER_CAPTURER_MANAGER_H 18 #include <unordered_map> 19 #include <memory> 20 #include <atomic> 21 #include <string> 22 #include <mutex> 23 #include <shared_mutex> 24 #include "i_renderer_stream.h" 25 #include "hpae_signal_process_thread.h" 26 #include "hpae_sink_input_node.h" 27 #include "hpae_resample_node.h" 28 #include "hpae_inner_cap_sink_node.h" 29 #include "hpae_source_output_node.h" 30 #include "hpae_source_process_cluster.h" 31 #include "hpae_msg_channel.h" 32 #include "hpae_no_lock_queue.h" 33 #include "i_hpae_renderer_manager.h" 34 35 namespace OHOS { 36 namespace AudioStandard { 37 namespace HPAE { 38 class HpaeInnerCapturerManager : public IHpaeRendererManager { 39 public: 40 HpaeInnerCapturerManager(HpaeSinkInfo &sinkInfo); 41 ~HpaeInnerCapturerManager(); 42 int32_t CreateStream(const HpaeStreamInfo &streamInfo) override; 43 int32_t DestroyStream(uint32_t sessionId) override; 44 45 int32_t Start(uint32_t sessionId) override; 46 int32_t Pause(uint32_t sessionId) override; 47 int32_t Flush(uint32_t sessionId) override; 48 int32_t Drain(uint32_t sessionId) override; 49 int32_t Stop(uint32_t sessionId) override; 50 int32_t Release(uint32_t sessionId) override; 51 int32_t MoveStream(uint32_t sessionId, const std::string &sinkName) override; 52 int32_t MoveAllStream(const std::string &sinkName, const std::vector<uint32_t>& sessionIds, 53 MoveSessionType moveType = MOVE_ALL) override; 54 int32_t SuspendStreamManager(bool isSuspend) override; 55 int32_t SetMute(bool isMute) override; 56 void Process() override; 57 void HandleMsg() override; 58 int32_t Init(bool isReload = false) override; 59 int32_t DeInit(bool isMoveDefault = false) override; 60 bool IsInit() override; 61 bool IsRunning(void) override; 62 bool IsMsgProcessing() override; 63 bool DeactivateThread() override; 64 int32_t SetClientVolume(uint32_t sessionId, float volume) override; 65 int32_t SetRate(uint32_t sessionId, int32_t rate) override; 66 int32_t SetAudioEffectMode(uint32_t sessionId, int32_t effectMode) override; 67 int32_t GetAudioEffectMode(uint32_t sessionId, int32_t &effectMode) override; 68 int32_t SetPrivacyType(uint32_t sessionId, int32_t privacyType) override; 69 int32_t GetPrivacyType(uint32_t sessionId, int32_t &privacyType) override; 70 int32_t RegisterWriteCallback(uint32_t sessionId, const std::weak_ptr<IStreamCallback> &callback) override; 71 72 size_t GetWritableSize(uint32_t sessionId) override; 73 int32_t UpdateSpatializationState( 74 uint32_t sessionId, bool spatializationEnabled, bool headTrackingEnabled) override; 75 int32_t UpdateMaxLength(uint32_t sessionId, uint32_t maxLength) override; 76 void SetSpeed(uint32_t sessionId, float speed) override; 77 std::vector<SinkInput> GetAllSinkInputsInfo() override; 78 int32_t GetSinkInputInfo(uint32_t sessionId, HpaeSinkInputInfo &sinkInputInfo) override; 79 int32_t RefreshProcessClusterByDevice() override; 80 HpaeSinkInfo GetSinkInfo() override; 81 82 void OnNodeStatusUpdate(uint32_t sessionId, IOperation operation) override; 83 void OnFadeDone(uint32_t sessionId, IOperation operation) override; 84 85 int32_t AddNodeToSink(const std::shared_ptr<HpaeSinkInputNode> &node) override; 86 int32_t AddAllNodesToSink( 87 const std::vector<std::shared_ptr<HpaeSinkInputNode>> &sinkInputs, bool isConnect) override; 88 89 int32_t RegisterReadCallback(uint32_t sessionId, const std::weak_ptr<ICapturerStreamCallback> &callback) override; 90 int32_t GetSourceOutputInfo(uint32_t sessionId, HpaeSourceOutputInfo &sourceOutputInfo) override; 91 std::vector<SourceOutput> GetAllSourceOutputsInfo() override; 92 std::string GetThreadName() override; 93 int32_t DumpSinkInfo() override; 94 int32_t ReloadRenderManager(const HpaeSinkInfo &sinkInfo, bool isReload = false) override; 95 int32_t SetOffloadPolicy(uint32_t sessionId, int32_t state) override; 96 std::string GetDeviceHDFDumpInfo() override; 97 int32_t SetLoudnessGain(uint32_t sessionId, float loudnessGain) override; 98 void OnDisConnectProcessCluster(HpaeProcessorType sceneType) override; 99 100 private: 101 void TransStreamInfoToNodeInfoInner(const HpaeStreamInfo &streamInfo, HpaeNodeInfo &nodeInfo); 102 int32_t CreateRendererInputSessionInner(const HpaeStreamInfo &streamInfo); 103 int32_t CreateCapturerInputSessionInner(const HpaeStreamInfo &streamInfo); 104 int32_t DeleteRendererInputSessionInner(uint32_t sessionId); 105 void DeleteRendererInputNodeSession(const std::shared_ptr<HpaeSinkInputNode> &sinkInputNode); 106 int32_t DeleteCapturerInputSessionInner(uint32_t sessionId); 107 int32_t ConnectRendererInputSessionInner(uint32_t sessionId); 108 int32_t ConnectCapturerOutputSessionInner(uint32_t sessionId); 109 int32_t DisConnectRendererInputSessionInner(uint32_t sessionId); 110 int32_t DisConnectCapturerInputSessionInner(uint32_t sessionId); 111 void SetSessionStateForRenderer(uint32_t sessionId, HpaeSessionState renderState); 112 void SetSessionStateForCapturer(uint32_t sessionId, HpaeSessionState capturerState); 113 void SendRequestInner(Request &&request, bool isInit = false); 114 uint32_t GetSinkInputNodeIdInner(); 115 void AddSingleNodeToSinkInner(const std::shared_ptr<HpaeSinkInputNode> &node, bool isConnect = true); 116 void MoveAllStreamToNewSinkInner(const std::string &sinkName, const std::vector<uint32_t> &moveIds, 117 MoveSessionType moveType); 118 void InitSinkInner(bool isReload = false); 119 uint32_t sinkInputNodeCounter_ = 0; 120 int32_t sceneTypeToProcessClusterCount_ = 0; 121 std::atomic<bool> isInit_ = false; 122 HpaeSinkInfo sinkInfo_; 123 HpaeNoLockQueue hpaeNoLockQueue_; 124 std::shared_ptr<HpaeInnerCapSinkNode> hpaeInnerCapSinkNode_ = nullptr; 125 std::unique_ptr<HpaeSignalProcessThread> hpaeSignalProcessThread_ = nullptr; 126 std::unordered_map<uint32_t, std::shared_ptr<HpaeSinkInputNode>> sinkInputNodeMap_; 127 std::unordered_map<uint32_t, std::shared_ptr<HpaeSourceOutputNode>> sourceOutputNodeMap_; 128 std::unordered_map<uint32_t, std::shared_ptr<HpaeAudioFormatConverterNode>> capturerAudioFormatConverterNodeMap_; 129 std::unordered_map<HpaeProcessorType, std::shared_ptr<HpaeSourceProcessCluster>> capturerSceneClusterMap_; 130 std::unordered_map<HpaeProcessorType, std::shared_ptr<HpaeProcessCluster>> rendererSceneClusterMap_; 131 std::unordered_map<uint32_t, HpaeCapturerSessionInfo> capturerSessionNodeMap_; 132 std::unordered_map<uint32_t, HpaeRenderSessionInfo> rendererSessionNodeMap_; 133 }; 134 } // namespace HPAE 135 } // namespace AudioStandard 136 } // namespace OHOS 137 #endif