• 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_;
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 &timestamp, 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