• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 &timestamp, 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