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 GetRunningStreamUsageNoUltrasonic(); 79 SourceType GetRunningSourceTypeNoUltrasonic(); 80 StreamUsage GetLastestRunningCallStreamUsage(); 81 std::vector<uint32_t> GetAllRendererSessionIDForUID(int32_t uid); 82 bool HasVoipRendererStream(); 83 bool ChangeVoipCapturerStreamToNormal(); 84 bool IsCallStreamUsage(StreamUsage usage); 85 std::set<int32_t> GetSessionIdsOnRemoteDeviceByStreamUsage(StreamUsage streamUsage); 86 std::set<int32_t> GetSessionIdsOnRemoteDeviceBySourceType(SourceType sourceType); 87 std::set<int32_t> GetSessionIdsOnRemoteDeviceByDeviceType(DeviceType deviceType); 88 int32_t GetSessionIdsPauseOnRemoteDeviceByRemote(InterruptHint hintType); 89 bool HasRunningRendererStream(); 90 bool HasRunningRecognitionCapturerStream(); 91 92 private: 93 std::mutex streamsInfoMutex_; 94 std::map<std::pair<int32_t, int32_t>, int32_t> rendererStatequeue_; 95 std::map<std::pair<int32_t, int32_t>, int32_t> capturerStatequeue_; 96 std::vector<std::unique_ptr<AudioRendererChangeInfo>> audioRendererChangeInfos_; 97 std::vector<std::unique_ptr<AudioCapturerChangeInfo>> audioCapturerChangeInfos_; 98 std::unordered_map<int32_t, std::shared_ptr<AudioClientTracker>> clientTracker_; 99 static const std::map<std::pair<ContentType, StreamUsage>, AudioStreamType> streamTypeMap_; 100 static std::map<std::pair<ContentType, StreamUsage>, AudioStreamType> CreateStreamMap(); 101 int32_t AddRendererStream(AudioStreamChangeInfo &streamChangeInfo); 102 int32_t AddCapturerStream(AudioStreamChangeInfo &streamChangeInfo); 103 int32_t CheckRendererUpdataState(AudioStreamChangeInfo &streamChangeInfo); 104 int32_t UpdateRendererStream(AudioStreamChangeInfo &streamChangeInfo); 105 int32_t UpdateCapturerStream(AudioStreamChangeInfo &streamChangeInfo); 106 int32_t UpdateRendererDeviceInfo(DeviceInfo &outputDeviceInfo); 107 int32_t UpdateCapturerDeviceInfo(DeviceInfo &inputDeviceInfo); 108 int32_t UpdateRendererStreamInternal(AudioStreamChangeInfo &streamChangeInfo); 109 AudioStreamType GetVolumeTypeFromContentUsage(ContentType contentType, StreamUsage streamUsage); 110 AudioStreamType GetStreamTypeFromSourceType(SourceType sourceType); 111 void WriterStreamChangeSysEvent(AudioMode &mode, AudioStreamChangeInfo &streamChangeInfo); 112 void WriterRenderStreamChangeSysEvent(AudioStreamChangeInfo &streamChangeInfo); 113 void WriterCaptureStreamChangeSysEvent(AudioStreamChangeInfo &streamChangeInfo); 114 void WriteRenderStreamReleaseSysEvent(const std::unique_ptr<AudioRendererChangeInfo> &audioRendererChangeInfo); 115 void WriteCaptureStreamReleaseSysEvent(const std::unique_ptr<AudioCapturerChangeInfo> &audioCapturerChangeInfo); 116 void SetRendererStreamParam(AudioStreamChangeInfo &streamChangeInfo, 117 std::unique_ptr<AudioRendererChangeInfo> &rendererChangeInfo); 118 void SetCapturerStreamParam(AudioStreamChangeInfo &streamChangeInfo, 119 std::unique_ptr<AudioCapturerChangeInfo> &capturerChangeInfo); 120 void RegisteredRendererTrackerClientDied(const int32_t uid); 121 void RegisteredCapturerTrackerClientDied(const int32_t uid); 122 bool CheckRendererStateInfoChanged(AudioStreamChangeInfo &streamChangeInfo); 123 bool CheckRendererInfoChanged(AudioStreamChangeInfo &streamChangeInfo); 124 AudioSystemManager *audioSystemMgr_; 125 std::shared_ptr<AudioPolicyServerHandler> audioPolicyServerHandler_; 126 std::shared_ptr<AudioConcurrencyService> audioConcurrencyService_; 127 }; 128 } // namespace AudioStandard 129 } // namespace OHOS 130 #endif 131