• 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 #ifndef AUDIO_PIPE_MANAGER_H
16 #define AUDIO_PIPE_MANAGER_H
17 
18 #include <string>
19 #include <mutex>
20 #include <shared_mutex>
21 #include <set>
22 
23 #include "audio_stream_descriptor.h"
24 #include "audio_module_info.h"
25 #include "audio_pipe_info.h"
26 
27 namespace OHOS {
28 namespace AudioStandard {
29 class AudioPipeManager {
30 public:
31     AudioPipeManager();
32     ~AudioPipeManager();
33 
GetPipeManager()34     static std::shared_ptr<AudioPipeManager> GetPipeManager()
35     {
36         static std::shared_ptr<AudioPipeManager> instance = std::make_shared<AudioPipeManager>();
37         return instance;
38     }
39 
40     void AddAudioPipeInfo(std::shared_ptr<AudioPipeInfo> info);
41     void RemoveAudioPipeInfo(std::shared_ptr<AudioPipeInfo> info);
42     void RemoveAudioPipeInfo(AudioIOHandle id);
43     void UpdateAudioPipeInfo(std::shared_ptr<AudioPipeInfo> newPipe);
44     void Assign(std::shared_ptr<AudioPipeInfo> dst, std::shared_ptr<AudioPipeInfo> src);
45     bool IsSamePipe(std::shared_ptr<AudioPipeInfo> info, std::shared_ptr<AudioPipeInfo> cmpInfo);
46 
47     const std::vector<std::shared_ptr<AudioPipeInfo>> GetPipeList();
48     std::vector<std::shared_ptr<AudioPipeInfo>> GetUnusedPipe();
49     std::vector<std::shared_ptr<AudioPipeInfo>> GetUnusedRecordPipe();
50     std::shared_ptr<AudioPipeInfo> GetPipeinfoByNameAndFlag(const std::string adapterName, const uint32_t routeFlag);
51     std::string GetAdapterNameBySessionId(uint32_t sessionId);
52     std::shared_ptr<AudioDeviceDescriptor> GetProcessDeviceInfoBySessionId(uint32_t sessionId,
53         AudioStreamInfo &streamInfo);
54 
55     void StartClient(uint32_t sessionId);
56     void PauseClient(uint32_t sessionId);
57     void StopClient(uint32_t sessionId);
58     void RemoveClient(uint32_t sessionId);
59 
60     std::vector<std::shared_ptr<AudioStreamDescriptor>> GetAllOutputStreamDescs();
61     std::vector<std::shared_ptr<AudioStreamDescriptor>> GetAllInputStreamDescs();
62     std::vector<std::shared_ptr<AudioStreamDescriptor>> GetStreamDescsByIoHandle(AudioIOHandle id);
63     std::shared_ptr<AudioStreamDescriptor> GetStreamDescById(uint32_t sessionId);
64     std::shared_ptr<AudioStreamDescriptor> GetStreamDescByIdInner(uint32_t sessionId);
65     int32_t GetStreamCount(const std::string adapterName, const uint32_t routeFlag);
66     uint32_t GetPaIndexByIoHandle(AudioIOHandle id);
67     void UpdateRendererPipeInfos(std::vector<std::shared_ptr<AudioPipeInfo>> &pipeInfos);
68     void UpdateCapturerPipeInfos(std::vector<std::shared_ptr<AudioPipeInfo>> &pipeInfos);
69     uint32_t PcmOffloadSessionCount();
70 
71     void Dump(std::string &dumpString);
72     bool IsModemCommunicationIdExist();
73     bool IsModemCommunicationIdExist(uint32_t sessionId);
74     void AddModemCommunicationId(uint32_t sessionId, std::shared_ptr<AudioStreamDescriptor> &streamDesc);
75     void RemoveModemCommunicationId(uint32_t sessionId);
76     std::shared_ptr<AudioStreamDescriptor> GetModemCommunicationStreamDescById(uint32_t sessionId);
77     std::unordered_map<uint32_t, std::shared_ptr<AudioStreamDescriptor>> GetModemCommunicationMap();
78     void UpdateModemStreamStatus(AudioStreamStatus streamStatus);
79     void UpdateModemStreamDevice(std::vector<std::shared_ptr<AudioDeviceDescriptor>> &deviceDescs);
80     bool IsModemStreamDeviceChanged(std::shared_ptr<AudioDeviceDescriptor> &deviceDescs);
81     std::shared_ptr<AudioPipeInfo> GetNormalSourceInfo(bool isEcFeatureEnable);
82     std::vector<uint32_t> GetStreamIdsByUid(uint32_t uid, uint32_t routeFlagMask = UINT32_MAX);
83     void UpdateOutputStreamDescsByIoHandle(AudioIOHandle id,
84         std::vector<std::shared_ptr<AudioStreamDescriptor>> &descs);
85     std::vector<std::shared_ptr<AudioStreamDescriptor>> GetAllCapturerStreamDescs();
86 
87 private:
88     bool IsSpecialPipe(uint32_t routeFlag);
89     bool IsNormalRecordPipe(std::shared_ptr<AudioPipeInfo> pipeInfo);
90     std::shared_ptr<AudioPipeInfo> GetPipeByModuleAndFlag(const std::string moduleName, const uint32_t routeFlag);
91 
92     std::unordered_map<uint32_t, std::shared_ptr<AudioStreamDescriptor>> modemCommunicationIdMap_{};
93     std::vector<std::shared_ptr<AudioPipeInfo>> curPipeList_{};
94     std::shared_mutex pipeListLock_;
95 };
96 } // namespace AudioStandard
97 } // namespace OHOS
98 #endif // AUDIO_PIPE_MANAGER_H
99