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