• 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 "iaudio_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 #include "audio_stream_manager.h"
25 
26 namespace OHOS {
27 namespace AudioStandard {
28 
29 class AudioStreamCollector {
30 public:
GetAudioStreamCollector()31     static AudioStreamCollector& GetAudioStreamCollector()
32     {
33         static AudioStreamCollector audioStreamCollector;
34         return audioStreamCollector;
35     }
36 
37     AudioStreamCollector();
38     ~AudioStreamCollector();
39 
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 UpdateRendererDeviceInfo(std::shared_ptr<AudioDeviceDescriptor> outputDeviceInfo);
49     int32_t UpdateRendererPipeInfo(const int32_t sessionId, const AudioPipeType pipeType);
50     int32_t UpdateCapturerDeviceInfo(int32_t clientUID, int32_t sessionId, AudioDeviceDescriptor &inputDeviceInfo);
51     int32_t UpdateCapturerDeviceInfo(std::shared_ptr<AudioDeviceDescriptor> inputDeviceInfo);
52     int32_t GetCurrentRendererChangeInfos(std::vector<std::shared_ptr<AudioRendererChangeInfo>> &rendererChangeInfos);
53     int32_t GetCurrentCapturerChangeInfos(std::vector<std::shared_ptr<AudioCapturerChangeInfo>> &capturerChangeInfos);
54     int32_t GetRunningRendererInfos(std::vector<std::shared_ptr<AudioRendererChangeInfo>> &infos);
55     void RegisteredTrackerClientDied(int32_t uid, int32_t pid);
56     int32_t UpdateStreamState(int32_t clientUid, StreamSetStateEventInternal &streamSetStateEventInternal);
57     void HandleAppStateChange(int32_t uid, int32_t pid, bool mute, bool &notifyMute, bool hasBackTask);
58     void HandleKaraokeAppToBack(int32_t uid, int32_t pid);
59     void HandleForegroundUnmute(int32_t uid, int32_t pid);
60     void HandleFreezeStateChange(int32_t pid, bool mute, bool hasSession);
61     void HandleBackTaskStateChange(int32_t uid, bool hasSession);
62     void HandleStartStreamMuteState(int32_t uid, int32_t pid, bool mute, bool skipMedia);
63     bool IsStreamActive(AudioStreamType volumeType);
64     bool CheckVoiceCallActive(int32_t sessionId);
65     bool IsVoiceCallActive();
66     int32_t GetRunningStream(AudioStreamType certainType = STREAM_DEFAULT, int32_t certainChannelCount = 0);
67     int32_t SetLowPowerVolume(int32_t streamId, float volume);
68     float GetLowPowerVolume(int32_t streamId);
69     int32_t SetOffloadMode(int32_t streamId, int32_t state, bool isAppBack);
70     int32_t UnsetOffloadMode(int32_t streamId);
71     bool IsOffloadAllowed(const int32_t sessionId);
72     float GetSingleStreamVolume(int32_t streamId);
73     bool GetAndCompareStreamType(StreamUsage targetUsage, AudioRendererInfo rendererInfo);
74     int32_t UpdateCapturerInfoMuteStatus(int32_t uid, bool muteStatus);
75     AudioStreamType GetStreamType(int32_t sessionId);
76     int32_t GetChannelCount(int32_t sessionId);
77     int32_t GetUid(int32_t sessionId);
78     void GetRendererStreamInfo(AudioStreamChangeInfo &streamChangeInfo, AudioRendererChangeInfo &rendererInfo);
79     void GetCapturerStreamInfo(AudioStreamChangeInfo &streamChangeInfo, AudioCapturerChangeInfo &capturerInfo);
80     int32_t GetPipeType(const int32_t sessionId, AudioPipeType &pipeType);
81     bool ExistStreamForPipe(AudioPipeType pipeType);
82     int32_t GetRendererDeviceInfo(const int32_t sessionId, AudioDeviceDescriptor &outputDeviceInfo);
83 
84     std::map<std::pair<AudioPipeType, AudioPipeType>, ConcurrencyAction>& GetConcurrencyMap();
85     void ResetRendererStreamDeviceInfo(const AudioDeviceDescriptor& updatedDesc);
86     void ResetCapturerStreamDeviceInfo(const AudioDeviceDescriptor& updatedDesc);
87     StreamUsage GetRunningStreamUsageNoUltrasonic();
88     SourceType GetRunningSourceTypeNoUltrasonic();
89     StreamUsage GetLastestRunningCallStreamUsage();
90     std::vector<uint32_t> GetAllRendererSessionIDForUID(int32_t uid);
91     std::vector<uint32_t> GetAllCapturerSessionIDForUID(int32_t uid);
92     int32_t ResumeStreamState();
93     bool HasVoipRendererStream(bool isFirstCreate = true);
94     bool ChangeVoipCapturerStreamToNormal();
95     bool IsCallStreamUsage(StreamUsage usage);
96     std::set<int32_t> GetSessionIdsOnRemoteDeviceByStreamUsage(StreamUsage streamUsage);
97     std::set<int32_t> GetSessionIdsOnRemoteDeviceBySourceType(SourceType sourceType);
98     std::set<int32_t> GetSessionIdsOnRemoteDeviceByDeviceType(DeviceType deviceType);
99     int32_t GetSessionIdsPauseOnRemoteDeviceByRemote(InterruptHint hintType);
100     bool HasRunningRendererStream();
101     bool HasRunningRecognitionCapturerStream();
102     bool HasRunningNormalCapturerStream(DeviceType type);
103     bool IsMediaPlaying();
104     bool IsVoipStreamActive();
105     void UpdateAppVolume(int32_t appUid, int32_t volume);
106 
107 private:
108     std::mutex streamsInfoMutex_;
109     std::map<std::pair<int32_t, int32_t>, int32_t> rendererStatequeue_;
110     std::map<std::pair<int32_t, int32_t>, int32_t> capturerStatequeue_;
111     std::vector<std::shared_ptr<AudioRendererChangeInfo>> audioRendererChangeInfos_;
112     std::vector<std::shared_ptr<AudioCapturerChangeInfo>> audioCapturerChangeInfos_;
113     std::unordered_map<int32_t, std::shared_ptr<AudioClientTracker>> clientTracker_;
114     static const std::map<std::pair<ContentType, StreamUsage>, AudioStreamType> streamTypeMap_;
115     static std::map<std::pair<ContentType, StreamUsage>, AudioStreamType> CreateStreamMap();
116     int32_t AddRendererStream(AudioStreamChangeInfo &streamChangeInfo);
117     int32_t AddCapturerStream(AudioStreamChangeInfo &streamChangeInfo);
118     int32_t CheckRendererUpdataState(AudioStreamChangeInfo &streamChangeInfo);
119     int32_t UpdateRendererStream(AudioStreamChangeInfo &streamChangeInfo);
120     int32_t UpdateCapturerStream(AudioStreamChangeInfo &streamChangeInfo);
121     int32_t UpdateRendererDeviceInfo(AudioDeviceDescriptor &outputDeviceInfo);
122     int32_t UpdateCapturerDeviceInfo(AudioDeviceDescriptor &inputDeviceInfo);
123     int32_t UpdateRendererStreamInternal(AudioStreamChangeInfo &streamChangeInfo);
124     int32_t UpdateCapturerStreamInternal(AudioStreamChangeInfo &streamChangeInfo);
125     AudioStreamType GetVolumeTypeFromContentUsage(ContentType contentType, StreamUsage streamUsage);
126     AudioStreamType GetStreamTypeFromSourceType(SourceType sourceType);
127     void WriterStreamChangeSysEvent(AudioMode &mode, AudioStreamChangeInfo &streamChangeInfo);
128     void WriterRenderStreamChangeSysEvent(AudioStreamChangeInfo &streamChangeInfo);
129     void WriterCaptureStreamChangeSysEvent(AudioStreamChangeInfo &streamChangeInfo);
130     void WriteRenderStreamReleaseSysEvent(const std::shared_ptr<AudioRendererChangeInfo> &audioRendererChangeInfo);
131     void WriteCaptureStreamReleaseSysEvent(const std::shared_ptr<AudioCapturerChangeInfo> &audioCapturerChangeInfo);
132     void SetRendererStreamParam(AudioStreamChangeInfo &streamChangeInfo,
133         std::shared_ptr<AudioRendererChangeInfo> &rendererChangeInfo);
134     void SetCapturerStreamParam(AudioStreamChangeInfo &streamChangeInfo,
135         std::shared_ptr<AudioCapturerChangeInfo> &capturerChangeInfo);
136     void RegisteredRendererTrackerClientDied(const int32_t uid, const int32_t pid);
137     void RegisteredCapturerTrackerClientDied(const int32_t uid);
138     void SendCapturerInfoEvent(const std::vector<std::shared_ptr<AudioCapturerChangeInfo>> &audioCapturerChangeInfos);
139     bool CheckRendererStateInfoChanged(AudioStreamChangeInfo &streamChangeInfo);
140     bool CheckRendererInfoChanged(AudioStreamChangeInfo &streamChangeInfo);
141     bool IsTransparentCapture(const uint32_t clientUid);
142     void ResetRingerModeMute(RendererState rendererState, StreamUsage streamUsage);
143     AudioAbilityManager *audioAbilityMgr_;
144     std::shared_ptr<AudioPolicyServerHandler> audioPolicyServerHandler_;
145     std::shared_ptr<AudioConcurrencyService> audioConcurrencyService_;
146 };
147 } // namespace AudioStandard
148 } // namespace OHOS
149 #endif
150