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 ¬ifyMute, 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