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 } 31 32 void OnReadData(size_t length) override; 33 private: 34 OH_AudioCapturer_Callbacks callbacks_; 35 OH_AudioCapturer* ohAudioCapturer_; 36 void* userData_; 37 }; 38 39 class OHAudioCapturerCallback : public AudioCapturerCallback { 40 public: OHAudioCapturerCallback(OH_AudioCapturer_Callbacks callbacks,OH_AudioCapturer * audioCapturer,void * userData)41 OHAudioCapturerCallback(OH_AudioCapturer_Callbacks callbacks, OH_AudioCapturer* audioCapturer, void* userData) 42 : callbacks_(callbacks), ohAudioCapturer_(audioCapturer), userData_(userData) 43 { 44 } 45 46 void OnInterrupt(const InterruptEvent &interruptEvent) override; 47 OnStateChange(const CapturerState state)48 void OnStateChange(const CapturerState state) override 49 { 50 AUDIO_DEBUG_LOG("OHAudioCapturerCallback:: OnStateChange"); 51 } 52 53 private: 54 OH_AudioCapturer_Callbacks callbacks_; 55 OH_AudioCapturer* ohAudioCapturer_; 56 void* userData_; 57 }; 58 59 class OHAudioCapturer { 60 public: 61 OHAudioCapturer(); 62 ~OHAudioCapturer(); 63 64 bool Initialize(const AudioCapturerOptions& capturerOptions); 65 bool Start(); 66 bool Pause(); 67 bool Stop(); 68 bool Flush(); 69 bool Release(); 70 CapturerState GetCurrentState(); 71 void GetStreamId(uint32_t& streamId); 72 AudioChannel GetChannelCount(); 73 int32_t GetSamplingRate(); 74 AudioEncodingType GetEncodingType(); 75 AudioSampleFormat GetSampleFormat(); 76 void GetCapturerInfo(AudioCapturerInfo& capturerInfo); 77 int64_t GetFramesRead(); 78 bool GetAudioTime(Timestamp ×tamp, Timestamp::Timestampbase base); 79 int32_t GetFrameSizeInCallback(); 80 int32_t GetBufferDesc(BufferDesc &bufDesc) const; 81 int32_t Enqueue(const BufferDesc &bufDesc) const; 82 uint32_t GetOverflowCount() const; 83 84 void SetCapturerCallback(OH_AudioCapturer_Callbacks callbacks, void* userData); 85 86 private: 87 std::unique_ptr<AudioCapturer> audioCapturer_; 88 std::shared_ptr<AudioCapturerCallback> audioCapturerCallback_; 89 }; 90 } // namespace AudioStandard 91 } // namespace OHOS 92 93 #endif // OH_AUDIO_CAPTURER_H 94