1 /* 2 * Copyright (c) 2023 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_CAPTURER_H 17 #define OH_AUDIO_CAPTURER_H 18 19 #include "native_audiocapturer.h" 20 #include "audio_capturer.h" 21 #include "audio_common_log.h" 22 23 namespace OHOS { 24 namespace AudioStandard { 25 class OHAudioCapturerModeCallback : public AudioCapturerReadCallback { 26 public: OHAudioCapturerModeCallback(OH_AudioCapturer_Callbacks callbacks,OH_AudioCapturer * audioCapturer,void * userData)27 OHAudioCapturerModeCallback(OH_AudioCapturer_Callbacks callbacks, OH_AudioCapturer* audioCapturer, void* userData) 28 : callbacks_(callbacks), ohAudioCapturer_(audioCapturer), userData_(userData) 29 { 30 } OHAudioCapturerModeCallback(OH_AudioCapturer_OnReadDataCallback onReadDataCallback,OH_AudioCapturer * audioCapturer,void * userData)31 OHAudioCapturerModeCallback(OH_AudioCapturer_OnReadDataCallback onReadDataCallback, 32 OH_AudioCapturer* audioCapturer, void* userData) 33 : onReadDataCallback_(onReadDataCallback), ohAudioCapturer_(audioCapturer), userData_(userData) 34 { 35 } 36 37 void OnReadData(size_t length) override; 38 private: 39 OH_AudioCapturer_Callbacks callbacks_ = {}; 40 OH_AudioCapturer_OnReadDataCallback onReadDataCallback_ = nullptr; 41 OH_AudioCapturer* ohAudioCapturer_ = nullptr; 42 void* userData_ = nullptr; 43 }; 44 45 class OHAudioCapturerCallback : public AudioCapturerCallback { 46 public: OHAudioCapturerCallback(OH_AudioCapturer_Callbacks callbacks,OH_AudioCapturer * audioCapturer,void * userData)47 OHAudioCapturerCallback(OH_AudioCapturer_Callbacks callbacks, OH_AudioCapturer* audioCapturer, void* userData) 48 : callbacks_(callbacks), ohAudioCapturer_(audioCapturer), userData_(userData) 49 { 50 } 51 OHAudioCapturerCallback(OH_AudioCapturer_OnInterruptCallback OnInterruptEventCallback,OH_AudioCapturer * audioCapturer,void * userData)52 OHAudioCapturerCallback(OH_AudioCapturer_OnInterruptCallback OnInterruptEventCallback, 53 OH_AudioCapturer *audioCapturer, void *userData) : onInterruptEventCallback_(OnInterruptEventCallback), 54 ohAudioCapturer_(audioCapturer), userData_(userData) 55 { 56 } 57 58 void OnInterrupt(const InterruptEvent &interruptEvent) override; 59 OnStateChange(const CapturerState state)60 void OnStateChange(const CapturerState state) override 61 { 62 AUDIO_DEBUG_LOG("OHAudioCapturerCallback:: OnStateChange"); 63 } 64 65 private: 66 OH_AudioCapturer_Callbacks callbacks_ = {}; 67 OH_AudioCapturer_OnInterruptCallback onInterruptEventCallback_ = nullptr; 68 OH_AudioCapturer* ohAudioCapturer_ = nullptr; 69 void* userData_ = nullptr; 70 }; 71 72 class OHCapturerServiceDiedCallback : public AudioCapturerPolicyServiceDiedCallback { 73 public: OHCapturerServiceDiedCallback(OH_AudioCapturer_OnErrorCallback errorCallback,OH_AudioCapturer * audioCapturer,void * userData)74 OHCapturerServiceDiedCallback(OH_AudioCapturer_OnErrorCallback errorCallback, OH_AudioCapturer *audioCapturer, 75 void *userData) : errorCallback_(errorCallback), ohAudioCapturer_(audioCapturer), userData_(userData) 76 { 77 } 78 79 void OnAudioPolicyServiceDied() override; 80 81 private: 82 OH_AudioCapturer_OnErrorCallback errorCallback_ = nullptr; 83 OH_AudioCapturer* ohAudioCapturer_; 84 void *userData_; 85 }; 86 87 class OHAudioCapturerErrorCallback : public AudioCapturerErrorCallback { 88 public: OHAudioCapturerErrorCallback(OH_AudioCapturer_Callbacks callbacks,OH_AudioCapturer * audioCapturer,void * userData)89 OHAudioCapturerErrorCallback(OH_AudioCapturer_Callbacks callbacks, OH_AudioCapturer *audioCapturer, 90 void *userData) : callbacks_(callbacks), ohAudioCapturer_(audioCapturer), userData_(userData) 91 { 92 } OHAudioCapturerErrorCallback(OH_AudioCapturer_OnErrorCallback errorCallback,OH_AudioCapturer * audioCapturer,void * userData)93 OHAudioCapturerErrorCallback(OH_AudioCapturer_OnErrorCallback errorCallback, OH_AudioCapturer *audioCapturer, 94 void *userData) : errorCallback_(errorCallback), ohAudioCapturer_(audioCapturer), userData_(userData) 95 { 96 } 97 98 void OnError(AudioErrors errorCode) override; 99 100 OH_AudioStream_Result GetErrorResult(AudioErrors errorCode) const; 101 102 private: 103 OH_AudioCapturer_Callbacks callbacks_ = {}; 104 OH_AudioCapturer_OnErrorCallback errorCallback_ = nullptr; 105 OH_AudioCapturer *ohAudioCapturer_; 106 void *userData_; 107 }; 108 109 class OHAudioCapturerDeviceChangeCallback : public AudioCapturerDeviceChangeCallback { 110 public: OHAudioCapturerDeviceChangeCallback(OH_AudioCapturer_Callbacks callbacks,OH_AudioCapturer * audioCapturer,void * userData)111 OHAudioCapturerDeviceChangeCallback(OH_AudioCapturer_Callbacks callbacks, OH_AudioCapturer* audioCapturer, 112 void* userData) : callbacks_(callbacks), ohAudioCapturer_(audioCapturer), userData_(userData) 113 { 114 } OHAudioCapturerDeviceChangeCallback(OH_AudioCapturer_OnDeviceChangeCallback onDeviceChangeCallback,OH_AudioCapturer * audioCapturer,void * userData)115 OHAudioCapturerDeviceChangeCallback(OH_AudioCapturer_OnDeviceChangeCallback onDeviceChangeCallback, 116 OH_AudioCapturer* audioCapturer, void* userData) 117 : onDeviceChangeCallback_(onDeviceChangeCallback), ohAudioCapturer_(audioCapturer), userData_(userData) 118 { 119 } 120 121 void OnStateChange(const AudioDeviceDescriptor &deviceInfo) override; 122 123 private: 124 OH_AudioCapturer_Callbacks callbacks_ = {}; 125 OH_AudioCapturer_OnDeviceChangeCallback onDeviceChangeCallback_ = nullptr; 126 OH_AudioCapturer* ohAudioCapturer_ = nullptr; 127 void* userData_ = nullptr; 128 }; 129 130 class OHAudioCapturerFastStatusChangeCallback : public AudioCapturerFastStatusChangeCallback { 131 public: OHAudioCapturerFastStatusChangeCallback(OH_AudioCapturer_OnFastStatusChange callback,OH_AudioCapturer * audioCapturer,void * userData)132 OHAudioCapturerFastStatusChangeCallback(OH_AudioCapturer_OnFastStatusChange callback, 133 OH_AudioCapturer *audioCapturer, void *userData) 134 : callback_(callback), ohAudioCapturer_(audioCapturer), userData_(userData) 135 { 136 } 137 138 void OnFastStatusChange(FastStatus status) override; 139 private: 140 OH_AudioCapturer_OnFastStatusChange callback_; 141 OH_AudioCapturer *ohAudioCapturer_; 142 void *userData_; 143 }; 144 145 struct CapturerCallback { 146 OH_AudioCapturer_Callbacks callbacks = {}; 147 148 OH_AudioCapturer_OnReadDataCallback onReadDataCallback = {}; 149 150 OH_AudioCapturer_OnDeviceChangeCallback onDeviceChangeCallback = {}; 151 152 OH_AudioCapturer_OnInterruptCallback onInterruptEventCallback = {}; 153 154 OH_AudioCapturer_OnErrorCallback onErrorCallback = {}; 155 }; 156 157 class OHAudioCapturer { 158 public: 159 OHAudioCapturer(); 160 ~OHAudioCapturer(); 161 162 bool Initialize(const AudioCapturerOptions& capturerOptions); 163 bool Start(); 164 bool Pause(); 165 bool Stop(); 166 bool Flush(); 167 bool Release(); 168 CapturerState GetCurrentState(); 169 void GetStreamId(uint32_t& streamId); 170 AudioChannel GetChannelCount(); 171 int32_t GetSamplingRate(); 172 AudioEncodingType GetEncodingType(); 173 AudioSampleFormat GetSampleFormat(); 174 void GetCapturerInfo(AudioCapturerInfo& capturerInfo); 175 int64_t GetFramesRead(); 176 bool GetAudioTime(Timestamp ×tamp, Timestamp::Timestampbase base); 177 int32_t GetFrameSizeInCallback(); 178 int32_t GetBufferDesc(BufferDesc &bufDesc) const; 179 int32_t Enqueue(const BufferDesc &bufDesc) const; 180 int32_t SetInputDevice(DeviceType deviceType); 181 FastStatus GetFastStatus(); 182 uint32_t GetOverflowCount() const; 183 184 void SetInterruptCallback(CapturerCallback capturerCallbacks, void *userData); 185 void SetErrorCallback(CapturerCallback capturerCallbacks, void *userData); 186 void RegisterErrorCallback(CapturerCallback capturerCallbacks, void *userData, void *metadataUserData, 187 AudioEncodingType encodingType); 188 void SetCapturerInterruptEventCallbackType(InterruptEventCallbackType callbackType); 189 void SetCapturerErrorCallbackType(ErrorCallbackType errorCallbackType); 190 InterruptEventCallbackType GetCapturerInterruptEventCallbackType(); 191 ErrorCallbackType GetCapturerErrorCallbackType(); 192 void SetCapturerFastStatusChangeCallback(OH_AudioCapturer_OnFastStatusChange callback, void *userData); 193 194 void SetCapturerCallback(CapturerCallback capturerCallbacks, void* userData); 195 void SetReadDataCallback(CapturerCallback capturerCallbacks, void* userData); 196 void SetStreamEventCallback(CapturerCallback capturerCallbacks, void* userData); 197 void SetCapturerReadDataCallbackType(ReadDataCallbackType readDataCallbackType); 198 void SetCapturerStreamEventCallbackType(StreamEventCallbackType streamEventCallbackType); 199 void SetCapturerWillMuteWhenInterrupted(InterruptStrategy strategy); 200 ReadDataCallbackType GetCapturerReadDataCallbackType(); 201 StreamEventCallbackType GetCapturerStreamEventCallbackType(); 202 203 private: 204 std::shared_ptr<AudioCapturer> audioCapturer_; 205 std::shared_ptr<AudioCapturerCallback> audioCapturerCallback_; 206 ReadDataCallbackType readDataCallbackType_ = READ_DATA_CALLBACK_WITHOUT_RESULT; 207 StreamEventCallbackType streamEventCallbackType_ = STREAM_EVENT_CALLBACK_COMBINED; 208 ErrorCallbackType errorCallbackType_ = ERROR_CALLBACK_COMBINED; 209 InterruptEventCallbackType interruptCallbackType_ = INTERRUPT_EVENT_CALLBACK_COMBINED; 210 std::shared_ptr<OHAudioCapturerFastStatusChangeCallback> audioCapturerFastStatusChangeCallback_; 211 }; 212 } // namespace AudioStandard 213 } // namespace OHOS 214 215 #endif // OH_AUDIO_CAPTURER_H 216