• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-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 AUDIO_STREAM_COLLECTOR_H
17 #define AUDIO_STREAM_COLLECTOR_H
18 
19 #include "audio_policy_client.h"
20 #include "audio_system_manager.h"
21 #include "audio_policy_server_handler.h"
22 #include "audio_concurrency_service.h"
23 #include "audio_ability_manager.h"
24 
25 namespace OHOS {
26 namespace AudioStandard {
27 
28 class AudioStreamCollector {
29 public:
GetAudioStreamCollector()30     static AudioStreamCollector& GetAudioStreamCollector()
31     {
32         static AudioStreamCollector audioStreamCollector;
33         return audioStreamCollector;
34     }
35 
36     AudioStreamCollector();
37     ~AudioStreamCollector();
38 
39     void AddAudioPolicyClientProxyMap(int32_t clientPid, const sptr<IAudioPolicyClient>& cb);
40     void ReduceAudioPolicyClientProxyMap(pid_t clientPid);
41     int32_t RegisterTracker(AudioMode &mode, AudioStreamChangeInfo &streamChangeInfo,
42         const sptr<IRemoteObject> &object);
43     int32_t UpdateTracker(AudioMode &mode, AudioStreamChangeInfo &streamChangeInfo);
44     int32_t UpdateTracker(const AudioMode &mode, AudioDeviceDescriptor &deviceInfo);
45     int32_t UpdateTrackerInternal(AudioMode &mode, AudioStreamChangeInfo &streamChangeInfo);
46     AudioStreamType GetStreamType(ContentType contentType, StreamUsage streamUsage);
47     int32_t UpdateRendererDeviceInfo(int32_t clientUID, int32_t sessionId, AudioDeviceDescriptor &outputDeviceInfo);
48     int32_t UpdateRendererPipeInfo(const int32_t sessionId, const AudioPipeType pipeType);
49     int32_t UpdateCapturerDeviceInfo(int32_t clientUID, int32_t sessionId, AudioDeviceDescriptor &inputDeviceInfo);
50     int32_t GetCurrentRendererChangeInfos(std::vector<std::shared_ptr<AudioRendererChangeInfo>> &rendererChangeInfos);
51     int32_t GetCurrentCapturerChangeInfos(std::vector<std::shared_ptr<AudioCapturerChangeInfo>> &capturerChangeInfos);
52     void RegisteredTrackerClientDied(int32_t uid);
53     int32_t UpdateStreamState(int32_t clientUid, StreamSetStateEventInternal &streamSetStateEventInternal);
54     bool IsStreamActive(AudioStreamType volumeType);
55     int32_t GetRunningStream(AudioStreamType certainType = STREAM_DEFAULT, int32_t certainChannelCount = 0);
56     int32_t SetLowPowerVolume(int32_t streamId, float volume);
57     float GetLowPowerVolume(int32_t streamId);
58     int32_t SetOffloadMode(int32_t streamId, int32_t state, bool isAppBack);
59     int32_t UnsetOffloadMode(int32_t streamId);
60     bool IsOffloadAllowed(const int32_t sessionId);
61     float GetSingleStreamVolume(int32_t streamId);
62     bool GetAndCompareStreamType(StreamUsage targetUsage, AudioRendererInfo rendererInfo);
63     int32_t UpdateCapturerInfoMuteStatus(int32_t uid, bool muteStatus);
64     AudioStreamType GetStreamType(int32_t sessionId);
65     int32_t GetChannelCount(int32_t sessionId);
66     int32_t GetUid(int32_t sessionId);
67     void GetRendererStreamInfo(AudioStreamChangeInfo &streamChangeInfo, AudioRendererChangeInfo &rendererInfo);
68     void GetCapturerStreamInfo(AudioStreamChangeInfo &streamChangeInfo, AudioCapturerChangeInfo &capturerInfo);
69     int32_t GetPipeType(const int32_t sessionId, AudioPipeType &pipeType);
70     bool ExistStreamForPipe(AudioPipeType pipeType);
71     int32_t GetRendererDeviceInfo(const int32_t sessionId, AudioDeviceDescriptor &outputDeviceInfo);
72 
73     int32_t SetAudioConcurrencyCallback(const uint32_t sessionID, const sptr<IRemoteObject> &object);
74     int32_t UnsetAudioConcurrencyCallback(const uint32_t sessionID);
75     int32_t ActivateAudioConcurrency(const AudioPipeType &pipeType);
76     void ResetRendererStreamDeviceInfo(const AudioDeviceDescriptor& updatedDesc);
77     void ResetCapturerStreamDeviceInfo(const AudioDeviceDescriptor& updatedDesc);
78     StreamUsage GetRunningStreamUsageNoUltrasonic();
79     SourceType GetRunningSourceTypeNoUltrasonic();
80     StreamUsage GetLastestRunningCallStreamUsage();
81     std::vector<uint32_t> GetAllRendererSessionIDForUID(int32_t uid);
82     int32_t ResumeStreamState();
83     bool HasVoipRendererStream();
84     bool ChangeVoipCapturerStreamToNormal();
85     bool IsCallStreamUsage(StreamUsage usage);
86     std::set<int32_t> GetSessionIdsOnRemoteDeviceByStreamUsage(StreamUsage streamUsage);
87     std::set<int32_t> GetSessionIdsOnRemoteDeviceBySourceType(SourceType sourceType);
88     std::set<int32_t> GetSessionIdsOnRemoteDeviceByDeviceType(DeviceType deviceType);
89     int32_t GetSessionIdsPauseOnRemoteDeviceByRemote(InterruptHint hintType);
90     bool HasRunningRendererStream();
91     bool HasRunningRecognitionCapturerStream();
92     bool IsMediaPlaying();
93     void UpdateAppVolume(int32_t appUid, int32_t volume);
94 
95 private:
96     std::mutex streamsInfoMutex_;
97     std::map<std::pair<int32_t, int32_t>, int32_t> rendererStatequeue_;
98     std::map<std::pair<int32_t, int32_t>, int32_t> capturerStatequeue_;
99     std::vector<std::shared_ptr<AudioRendererChangeInfo>> audioRendererChangeInfos_;
100     std::vector<std::shared_ptr<AudioCapturerChangeInfo>> audioCapturerChangeInfos_;
101     std::unordered_map<int32_t, std::shared_ptr<AudioClientTracker>> clientTracker_;
102     static const std::map<std::pair<ContentType, StreamUsage>, AudioStreamType> streamTypeMap_;
103     static std::map<std::pair<ContentType, StreamUsage>, AudioStreamType> CreateStreamMap();
104     int32_t AddRendererStream(AudioStreamChangeInfo &streamChangeInfo);
105     int32_t AddCapturerStream(AudioStreamChangeInfo &streamChangeInfo);
106     int32_t CheckRendererUpdataState(AudioStreamChangeInfo &streamChangeInfo);
107     int32_t UpdateRendererStream(AudioStreamChangeInfo &streamChangeInfo);
108     int32_t UpdateCapturerStream(AudioStreamChangeInfo &streamChangeInfo);
109     int32_t UpdateRendererDeviceInfo(AudioDeviceDescriptor &outputDeviceInfo);
110     int32_t UpdateCapturerDeviceInfo(AudioDeviceDescriptor &inputDeviceInfo);
111     int32_t UpdateRendererStreamInternal(AudioStreamChangeInfo &streamChangeInfo);
112     AudioStreamType GetVolumeTypeFromContentUsage(ContentType contentType, StreamUsage streamUsage);
113     AudioStreamType GetStreamTypeFromSourceType(SourceType sourceType);
114     void WriterStreamChangeSysEvent(AudioMode &mode, AudioStreamChangeInfo &streamChangeInfo);
115     void WriterRenderStreamChangeSysEvent(AudioStreamChangeInfo &streamChangeInfo);
116     void WriterCaptureStreamChangeSysEvent(AudioStreamChangeInfo &streamChangeInfo);
117     void WriteRenderStreamReleaseSysEvent(const std::shared_ptr<AudioRendererChangeInfo> &audioRendererChangeInfo);
118     void WriteCaptureStreamReleaseSysEvent(const std::shared_ptr<AudioCapturerChangeInfo> &audioCapturerChangeInfo);
119     void SetRendererStreamParam(AudioStreamChangeInfo &streamChangeInfo,
120         std::shared_ptr<AudioRendererChangeInfo> &rendererChangeInfo);
121     void SetCapturerStreamParam(AudioStreamChangeInfo &streamChangeInfo,
122         std::shared_ptr<AudioCapturerChangeInfo> &capturerChangeInfo);
123     void RegisteredRendererTrackerClientDied(const int32_t uid);
124     void RegisteredCapturerTrackerClientDied(const int32_t uid);
125     void SendCapturerInfoEvent(const std::vector<std::shared_ptr<AudioCapturerChangeInfo>> &audioCapturerChangeInfos);
126     bool CheckRendererStateInfoChanged(AudioStreamChangeInfo &streamChangeInfo);
127     bool CheckRendererInfoChanged(AudioStreamChangeInfo &streamChangeInfo);
128     bool IsTransparentCapture(const uint32_t clientUid);
129     void ResetRingerModeMute(RendererState rendererState, StreamUsage streamUsage);
130     AudioAbilityManager *audioAbilityMgr_;
131     std::shared_ptr<AudioPolicyServerHandler> audioPolicyServerHandler_;
132     std::shared_ptr<AudioConcurrencyService> audioConcurrencyService_;
133 };
134 } // namespace AudioStandard
135 } // namespace OHOS
136 #endif
137