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 &timestamp, 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