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_; 42 void* userData_; 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_; 69 void* userData_; 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_; 127 void* userData_; 128 }; 129 130 struct CapturerCallback { 131 OH_AudioCapturer_Callbacks callbacks; 132 133 OH_AudioCapturer_OnReadDataCallback onReadDataCallback; 134 135 OH_AudioCapturer_OnDeviceChangeCallback onDeviceChangeCallback; 136 137 OH_AudioCapturer_OnInterruptCallback onInterruptEventCallback; 138 139 OH_AudioCapturer_OnErrorCallback onErrorCallback; 140 }; 141 142 class OHAudioCapturer { 143 public: 144 OHAudioCapturer(); 145 ~OHAudioCapturer(); 146 147 bool Initialize(const AudioCapturerOptions& capturerOptions); 148 bool Start(); 149 bool Pause(); 150 bool Stop(); 151 bool Flush(); 152 bool Release(); 153 CapturerState GetCurrentState(); 154 void GetStreamId(uint32_t& streamId); 155 AudioChannel GetChannelCount(); 156 int32_t GetSamplingRate(); 157 AudioEncodingType GetEncodingType(); 158 AudioSampleFormat GetSampleFormat(); 159 void GetCapturerInfo(AudioCapturerInfo& capturerInfo); 160 int64_t GetFramesRead(); 161 bool GetAudioTime(Timestamp ×tamp, Timestamp::Timestampbase base); 162 int32_t GetFrameSizeInCallback(); 163 int32_t GetBufferDesc(BufferDesc &bufDesc) const; 164 int32_t Enqueue(const BufferDesc &bufDesc) const; 165 uint32_t GetOverflowCount() const; 166 167 void SetInterruptCallback(CapturerCallback capturerCallbacks, void *userData); 168 void SetErrorCallback(CapturerCallback capturerCallbacks, void *userData); 169 void RegisterErrorCallback(CapturerCallback capturerCallbacks, void *userData, void *metadataUserData, 170 AudioEncodingType encodingType); 171 void SetCapturerInterruptEventCallbackType(InterruptEventCallbackType interruptCallbackType); 172 void SetCapturerErrorCallbackType(ErrorCallbackType errorCallbackType); 173 InterruptEventCallbackType GetCapturerInterruptEventCallbackType(); 174 ErrorCallbackType GetCapturerErrorCallbackType(); 175 176 void SetCapturerCallback(CapturerCallback capturerCallbacks, void* userData); 177 void SetReadDataCallback(CapturerCallback capturerCallbacks, void* userData); 178 void SetStreamEventCallback(CapturerCallback capturerCallbacks, void* userData); 179 void SetCapturerReadDataCallbackType(ReadDataCallbackType readDataCallbackType); 180 void SetCapturerStreamEventCallbackType(StreamEventCallbackType streamEventCallbackType); 181 ReadDataCallbackType GetCapturerReadDataCallbackType(); 182 StreamEventCallbackType GetCapturerStreamEventCallbackType(); 183 184 private: 185 std::shared_ptr<AudioCapturer> audioCapturer_; 186 std::shared_ptr<AudioCapturerCallback> audioCapturerCallback_; 187 ReadDataCallbackType readDataCallbackType_ = READ_DATA_CALLBACK_WITHOUT_RESULT; 188 StreamEventCallbackType streamEventCallbackType_ = STREAM_EVENT_CALLBACK_WITHOUT_RESULT; 189 ErrorCallbackType errorCallbackType_ = ERROR_CALLBACK_WITHOUT_RESULT; 190 InterruptEventCallbackType interruptCallbackType_ = INTERRUPT_EVENT_CALLBACK_WITHOUT_RESULT; 191 }; 192 } // namespace AudioStandard 193 } // namespace OHOS 194 195 #endif // OH_AUDIO_CAPTURER_H 196