1 /* 2 * Copyright (c) 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 OH_AUDIO_SESSION_MANAGER_H 17 #define OH_AUDIO_SESSION_MANAGER_H 18 19 #include "audio_manager_log.h" 20 #include "native_audio_session_manager.h" 21 #include "audio_session_manager.h" 22 #include "OHAudioDeviceDescriptor.h" 23 24 namespace OHOS { 25 namespace AudioStandard { 26 27 class OHAudioSessionCallback : public AudioSessionCallback { 28 public: OHAudioSessionCallback(OH_AudioSession_DeactivatedCallback callback)29 explicit OHAudioSessionCallback(OH_AudioSession_DeactivatedCallback callback) 30 : callback_(callback) 31 { 32 } 33 34 void OnAudioSessionDeactive(const AudioSessionDeactiveEvent &deactiveEvent) override; 35 GetCallback()36 OH_AudioSession_DeactivatedCallback GetCallback() 37 { 38 return callback_; 39 } 40 ~OHAudioSessionCallback()41 ~OHAudioSessionCallback() 42 { 43 AUDIO_INFO_LOG("~OHAudioSessionCallback called."); 44 callback_ = nullptr; 45 } 46 private: 47 OH_AudioSession_DeactivatedCallback callback_; 48 }; 49 50 class OHAudioSessionStateCallback : public AudioSessionStateChangedCallback { 51 public: OHAudioSessionStateCallback(OH_AudioSession_StateChangedCallback callback)52 explicit OHAudioSessionStateCallback(OH_AudioSession_StateChangedCallback callback) 53 : callback_(callback) 54 { 55 } 56 57 void OnAudioSessionStateChanged(const AudioSessionStateChangedEvent &stateChangedEvent) override; 58 GetCallback()59 OH_AudioSession_StateChangedCallback GetCallback() 60 { 61 return callback_; 62 } 63 ~OHAudioSessionStateCallback()64 ~OHAudioSessionStateCallback() 65 { 66 AUDIO_INFO_LOG("~OHAudioSessionStateCallback called."); 67 callback_ = nullptr; 68 } 69 70 private: 71 OH_AudioSession_StateChangedCallback callback_; 72 }; 73 74 class OHAudioSessionDeviceCallback : public AudioSessionCurrentDeviceChangedCallback { 75 public: OHAudioSessionDeviceCallback(OH_AudioSession_CurrentOutputDeviceChangedCallback callback)76 explicit OHAudioSessionDeviceCallback(OH_AudioSession_CurrentOutputDeviceChangedCallback callback) 77 : callback_(callback) 78 { 79 } 80 81 void OnAudioSessionCurrentDeviceChanged(const CurrentOutputDeviceChangedEvent &deviceChangedEvent) override; 82 GetCallback()83 OH_AudioSession_CurrentOutputDeviceChangedCallback GetCallback() 84 { 85 return callback_; 86 } 87 ~OHAudioSessionDeviceCallback()88 ~OHAudioSessionDeviceCallback() 89 { 90 AUDIO_INFO_LOG("~OHAudioSessionDeviceCallback called."); 91 callback_ = nullptr; 92 } 93 94 private: 95 OH_AudioSession_CurrentOutputDeviceChangedCallback callback_; 96 }; 97 98 class OHAudioSessionManager { 99 public: 100 ~OHAudioSessionManager(); 101 GetInstance()102 static OHAudioSessionManager* GetInstance() 103 { 104 if (!ohAudioSessionManager_) { 105 ohAudioSessionManager_ = new OHAudioSessionManager(); 106 } 107 return ohAudioSessionManager_; 108 } 109 110 OH_AudioCommon_Result ActivateAudioSession(const AudioSessionStrategy &strategy); 111 112 OH_AudioCommon_Result DeactivateAudioSession(); 113 114 bool IsAudioSessionActivated(); 115 116 OH_AudioCommon_Result SetAudioSessionCallback(OH_AudioSession_DeactivatedCallback callback); 117 118 OH_AudioCommon_Result UnsetAudioSessionCallback(OH_AudioSession_DeactivatedCallback callback); 119 120 OH_AudioCommon_Result SetAudioSessionScene(AudioSessionScene sene); 121 OH_AudioCommon_Result SetAudioSessionStateChangeCallback(OH_AudioSession_StateChangedCallback callback); 122 OH_AudioCommon_Result UnsetAudioSessionStateChangeCallback(OH_AudioSession_StateChangedCallback callback); 123 OH_AudioCommon_Result SetDefaultOutputDevice(DeviceType deviceType); 124 OH_AudioCommon_Result GetDefaultOutputDevice(DeviceType &deviceType); 125 OH_AudioCommon_Result SetAudioSessionCurrentDeviceChangeCallback( 126 OH_AudioSession_CurrentOutputDeviceChangedCallback callback); 127 OH_AudioCommon_Result UnsetAudioSessionCurrentDeviceChangeCallback( 128 OH_AudioSession_CurrentOutputDeviceChangedCallback callback); 129 130 private: 131 OHAudioSessionManager(); 132 133 static OHAudioSessionManager *ohAudioSessionManager_; 134 135 AudioSessionManager *audioSessionManager_ = AudioSessionManager::GetInstance(); 136 137 std::map<OH_AudioSession_StateChangedCallback, 138 std::shared_ptr<OHAudioSessionStateCallback>> sessionStateCallbacks_; 139 std::map<OH_AudioSession_CurrentOutputDeviceChangedCallback, 140 std::shared_ptr<OHAudioSessionDeviceCallback>> sessionDeviceCallbacks_; 141 142 std::mutex sessionStateCbMutex_; 143 std::mutex sessionDeviceCbMutex_; 144 }; 145 146 OHAudioSessionManager* OHAudioSessionManager::ohAudioSessionManager_ = nullptr; 147 148 } // namespace AudioStandard 149 } // namespace OHOS 150 #endif // OH_AUDIO_SESSION_MANAGER_H