• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2024 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_info.h"
20 #include "audio_policy_client.h"
21 #include "audio_system_manager.h"
22 #include "audio_policy_server_handler.h"
23 #include "audio_concurrency_service.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, DeviceInfo &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, DeviceInfo &outputDeviceInfo);
48     int32_t UpdateRendererPipeInfo(const int32_t sessionId, const AudioPipeType pipeType);
49     int32_t UpdateCapturerDeviceInfo(int32_t clientUID, int32_t sessionId, DeviceInfo &inputDeviceInfo);
50     int32_t GetCurrentRendererChangeInfos(std::vector<std::unique_ptr<AudioRendererChangeInfo>> &rendererChangeInfos);
51     int32_t GetCurrentCapturerChangeInfos(std::vector<std::unique_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, DeviceInfo &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 GetLastestRunningCallStreamUsage();
79     std::vector<uint32_t> GetAllRendererSessionIDForUID(int32_t uid);
80     bool HasVoipRendererStream();
81     bool ChangeVoipCapturerStreamToNormal();
82     bool IsCallStreamUsage(StreamUsage usage);
83 private:
84     std::mutex streamsInfoMutex_;
85     std::map<std::pair<int32_t, int32_t>, int32_t> rendererStatequeue_;
86     std::map<std::pair<int32_t, int32_t>, int32_t> capturerStatequeue_;
87     std::vector<std::unique_ptr<AudioRendererChangeInfo>> audioRendererChangeInfos_;
88     std::vector<std::unique_ptr<AudioCapturerChangeInfo>> audioCapturerChangeInfos_;
89     std::unordered_map<int32_t, std::shared_ptr<AudioClientTracker>> clientTracker_;
90     static const std::map<std::pair<ContentType, StreamUsage>, AudioStreamType> streamTypeMap_;
91     static std::map<std::pair<ContentType, StreamUsage>, AudioStreamType> CreateStreamMap();
92     int32_t AddRendererStream(AudioStreamChangeInfo &streamChangeInfo);
93     int32_t AddCapturerStream(AudioStreamChangeInfo &streamChangeInfo);
94     int32_t CheckRendererUpdataState(AudioStreamChangeInfo &streamChangeInfo);
95     int32_t UpdateRendererStream(AudioStreamChangeInfo &streamChangeInfo);
96     int32_t UpdateCapturerStream(AudioStreamChangeInfo &streamChangeInfo);
97     int32_t UpdateRendererDeviceInfo(DeviceInfo &outputDeviceInfo);
98     int32_t UpdateCapturerDeviceInfo(DeviceInfo &inputDeviceInfo);
99     int32_t UpdateRendererStreamInternal(AudioStreamChangeInfo &streamChangeInfo);
100     AudioStreamType GetVolumeTypeFromContentUsage(ContentType contentType, StreamUsage streamUsage);
101     AudioStreamType GetStreamTypeFromSourceType(SourceType sourceType);
102     void WriterStreamChangeSysEvent(AudioMode &mode, AudioStreamChangeInfo &streamChangeInfo);
103     void WriterRenderStreamChangeSysEvent(AudioStreamChangeInfo &streamChangeInfo);
104     void WriterCaptureStreamChangeSysEvent(AudioStreamChangeInfo &streamChangeInfo);
105     void WriteRenderStreamReleaseSysEvent(const std::unique_ptr<AudioRendererChangeInfo> &audioRendererChangeInfo);
106     void WriteCaptureStreamReleaseSysEvent(const std::unique_ptr<AudioCapturerChangeInfo> &audioCapturerChangeInfo);
107     void SetRendererStreamParam(AudioStreamChangeInfo &streamChangeInfo,
108         std::unique_ptr<AudioRendererChangeInfo> &rendererChangeInfo);
109     void SetCapturerStreamParam(AudioStreamChangeInfo &streamChangeInfo,
110         std::unique_ptr<AudioCapturerChangeInfo> &capturerChangeInfo);
111     void RegisteredRendererTrackerClientDied(const int32_t uid);
112     void RegisteredCapturerTrackerClientDied(const int32_t uid);
113     bool CheckRendererStateInfoChanged(AudioStreamChangeInfo &streamChangeInfo);
114     bool CheckRendererInfoChanged(AudioStreamChangeInfo &streamChangeInfo);
115     AudioSystemManager *audioSystemMgr_;
116     std::shared_ptr<AudioPolicyServerHandler> audioPolicyServerHandler_;
117     std::shared_ptr<AudioConcurrencyService> audioConcurrencyService_;
118 };
119 } // namespace AudioStandard
120 } // namespace OHOS
121 #endif
122