1 /* 2 * Copyright (c) 2022 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 AV_SESSION_AUDIO_ADAPTER_H 17 #define AV_SESSION_AUDIO_ADAPTER_H 18 19 #include <functional> 20 #include <memory> 21 #include <mutex> 22 #include "audio_stream_manager.h" 23 #include "audio_info.h" 24 25 namespace OHOS::AVSession { 26 using AudioRendererChangeInfos = std::vector<std::unique_ptr<AudioStandard::AudioRendererChangeInfo>>; 27 using DeviceChangeAction = AudioStandard::DeviceChangeAction; 28 class AudioAdapter : public AudioStandard::AudioRendererStateChangeCallback, 29 public AudioStandard::AudioManagerDeviceChangeCallback, 30 public std::enable_shared_from_this<AudioAdapter> { 31 public: 32 using StateListener = std::function<void(const AudioRendererChangeInfos& infos)>; 33 using DeviceChangeListener = std::function<void(const DeviceChangeAction& deviceChangeAction)>; 34 static AudioAdapter& GetInstance(); 35 36 AudioAdapter(); 37 ~AudioAdapter() override; 38 39 void Init(); 40 41 void AddStreamRendererStateListener(const StateListener& listener); 42 43 void AddDeviceChangeListener(const DeviceChangeListener& listener); 44 45 int32_t PauseAudioStream(int32_t uid); 46 47 int32_t PauseAudioStream(int32_t uid, AudioStandard::StreamUsage usage); 48 49 void OnRendererStateChange(const AudioRendererChangeInfos& infos) override; 50 51 void OnDeviceChange(const DeviceChangeAction& deviceChangeAction) override; 52 53 bool GetRendererRunning(int32_t uid); 54 55 private: 56 static std::shared_ptr<AudioAdapter> instance_; 57 static std::once_flag onceFlag_; 58 std::vector<StateListener> listeners_; 59 std::vector<DeviceChangeListener> deviceChangeListeners_; 60 }; 61 } 62 #endif // AV_SESSION_AUDIO_ADAPTER_H 63