blob: 259661e7d3511f64d1b3716d647756c96e42a329 [file] [log] [blame]
b.liu4e243dc2023-11-27 11:20:00 +08001#include "lynq-qser-audio.h"
liubin281ac462023-07-19 14:22:54 +08002#include "mbtk_type.h"
b.liu4e243dc2023-11-27 11:20:00 +08003#include "mbtk_log.h"
b.liub21bd8d2023-12-28 19:07:21 +08004#include "mbtk_audio2.h"
5
6#define AUDIO_DEV_PLAY "device1"
7#define AUDIO_DEV_RECORDER "device2"
8#define AUDIO_HDL_DEFAULT 0
9
10static _cb_onPlayer play_cb = NULL;
11static int play_hdl = -1;
12
13static _cb_onPlayer recv_cb = NULL;
14static int recv_hdl = -1;
b.liu5fa9e772023-11-23 18:00:55 +080015
b.liu4e243dc2023-11-27 11:20:00 +080016int qser_AudPlayer_Open(char* device, _cb_onPlayer cb_fun)
liubin281ac462023-07-19 14:22:54 +080017{
b.liu4e243dc2023-11-27 11:20:00 +080018 UNUSED(device);
19 UNUSED(cb_fun);
b.liub21bd8d2023-12-28 19:07:21 +080020 if(device == NULL || strcmp(device, AUDIO_DEV_PLAY)) {
21 LOGE("device must be %s for play.", AUDIO_DEV_PLAY);
22 return -1;
23 }
24
25 if(mbtk_audio_wav_init()) {
26 LOGE("mbtk_audio_wav_init() fail.");
27 return -1;
28 }
29
30 play_cb = cb_fun;
liubin281ac462023-07-19 14:22:54 +080031
32 return 0;
liubin281ac462023-07-19 14:22:54 +080033}
34
b.liu4e243dc2023-11-27 11:20:00 +080035int qser_AudPlayer_PlayFrmFile(int hdl, const char *fd, int offset)
liubin281ac462023-07-19 14:22:54 +080036{
b.liu4e243dc2023-11-27 11:20:00 +080037 UNUSED(hdl);
38 UNUSED(fd);
39 UNUSED(offset);
b.liub21bd8d2023-12-28 19:07:21 +080040 if(play_hdl >= 0) {
41 LOGE("Play busy.");
42 if(play_cb) {
43 play_cb(-1);
44 }
45 return -1;
46 }
b.liu5fa9e772023-11-23 18:00:55 +080047
b.liub21bd8d2023-12-28 19:07:21 +080048 if(mbtk_audio_wav_play_start(fd)) {
49 LOGE("mbtk_audio_wav_play_start() fail.");
50 if(play_cb) {
51 play_cb(-2);
52 }
53 return -1;
54 }
55
56 play_hdl = hdl;
57
58 if(play_cb) {
59 play_cb(0);
60 }
61
62 return 0;
63}
64
65int qser_AudPlayer_PlayPcmBuf(const unsigned char *pcm_data, int data_size, int period_size,
66 int period_count, int num_channels, int sample_rate, int ownerid)
67{
68
69 if(play_hdl >= 0) {
70 LOGE("Play busy.");
71 if(play_cb) {
72 play_cb(-1);
73 }
74 return -1;
75 }
76
77 if(mbtk_audio_wav_stream_play_start(pcm_data, data_size, sample_rate, num_channels)) {
78 LOGE("mbtk_audio_wav_stream_play_start() fail.");
79 if(play_cb) {
80 play_cb(-2);
81 }
82 return -1;
83 }
84
85 play_hdl = AUDIO_HDL_DEFAULT;
86 if(play_cb) {
87 play_cb(0);
88 }
b.liu5fa9e772023-11-23 18:00:55 +080089 return 0;
liubin281ac462023-07-19 14:22:54 +080090}
91
b.liu4e243dc2023-11-27 11:20:00 +080092int qser_AudPlayer_Pause(int hdl)
liubin281ac462023-07-19 14:22:54 +080093{
b.liu4e243dc2023-11-27 11:20:00 +080094 UNUSED(hdl);
b.liub21bd8d2023-12-28 19:07:21 +080095 if((play_hdl != AUDIO_HDL_DEFAULT && hdl != play_hdl) || play_hdl < 0) {
96 LOGE("Play busy or hdl error.");
97 return -1;
98 }
99
100 if(mbtk_audio_wav_play_pause()) {
101 LOGE("mbtk_audio_wav_play_pause() fail.");
102 return -1;
103 }
b.liu5fa9e772023-11-23 18:00:55 +0800104
b.liu5fa9e772023-11-23 18:00:55 +0800105 return 0;
b.liu4e243dc2023-11-27 11:20:00 +0800106}
107
108int qser_AudPlayer_Resume(int hdl)
109{
110 UNUSED(hdl);
b.liub21bd8d2023-12-28 19:07:21 +0800111 if((play_hdl != AUDIO_HDL_DEFAULT && hdl != play_hdl) || play_hdl < 0) {
112 LOGE("Play busy or hdl error.");
113 return -1;
114 }
115
116 if(mbtk_audio_wav_play_resume()) {
117 LOGE("mbtk_audio_wav_play_resume() fail.");
118 return -1;
119 }
b.liu4e243dc2023-11-27 11:20:00 +0800120
121 return 0;
122}
123
124void qser_AudPlayer_Stop(int hdl)
125{
126 UNUSED(hdl);
b.liub21bd8d2023-12-28 19:07:21 +0800127 if((play_hdl != AUDIO_HDL_DEFAULT && hdl != play_hdl) || play_hdl < 0) {
128 LOGE("Play busy or hdl error.");
129 return;
130 }
b.liu4e243dc2023-11-27 11:20:00 +0800131
b.liub21bd8d2023-12-28 19:07:21 +0800132 if(mbtk_audio_wav_play_stop()) {
133 LOGE("mbtk_audio_wav_play_stop() fail.");
134 return;
135 }
136
137 play_hdl = -1;
liubin281ac462023-07-19 14:22:54 +0800138}
139
140
b.liu4e243dc2023-11-27 11:20:00 +0800141void qser_AudPlayer_Close(int hdl)
liubin281ac462023-07-19 14:22:54 +0800142{
b.liu4e243dc2023-11-27 11:20:00 +0800143 UNUSED(hdl);
144
b.liub21bd8d2023-12-28 19:07:21 +0800145 if(play_hdl >= 0) {
146 qser_AudPlayer_Stop(hdl);
147 }
b.liu4e243dc2023-11-27 11:20:00 +0800148
b.liub21bd8d2023-12-28 19:07:21 +0800149 if(mbtk_audio_wav_deinit()) {
150 LOGE("mbtk_audio_wav_deinit() fail.");
151 return;
152 }
153
154 play_cb = NULL;
155}
b.liu4e243dc2023-11-27 11:20:00 +0800156
157int qser_AudRecorder_Open(char* device, _cb_onPlayer cb_fun)
158{
159 UNUSED(device);
160 UNUSED(cb_fun);
b.liub21bd8d2023-12-28 19:07:21 +0800161 if(device == NULL || strcmp(device, AUDIO_DEV_RECORDER)) {
162 LOGE("device must be %s for recv.", AUDIO_DEV_RECORDER);
163 return -1;
164 }
b.liu4e243dc2023-11-27 11:20:00 +0800165
b.liub21bd8d2023-12-28 19:07:21 +0800166 if(mbtk_audio_wav_init()) {
167 LOGE("mbtk_audio_wav_init() fail.");
168 return -1;
169 }
170
171 recv_cb = cb_fun;
b.liu4e243dc2023-11-27 11:20:00 +0800172
b.liu5fa9e772023-11-23 18:00:55 +0800173 return 0;
b.liu4e243dc2023-11-27 11:20:00 +0800174}
175
176int qser_AudRecorder_StartRecord(int hdl, const char *fd, int offset)
177{
178 UNUSED(hdl);
179 UNUSED(fd);
180 UNUSED(offset);
b.liub21bd8d2023-12-28 19:07:21 +0800181 if(recv_hdl >= 0) {
182 LOGE("Recv busy.");
183 if(recv_cb) {
184 recv_cb(-1);
185 }
186 return -1;
187 }
b.liu4e243dc2023-11-27 11:20:00 +0800188
b.liub21bd8d2023-12-28 19:07:21 +0800189 if(mbtk_audio_wav_recorder_start(fd, MBTK_AUDIO_SAMPLE_RATE_8000)) {
190 LOGE("mbtk_audio_wav_recorder_start() fail.");
191 if(recv_cb) {
192 recv_cb(-2);
193 }
194 return -1;
195 }
b.liu4e243dc2023-11-27 11:20:00 +0800196
b.liub21bd8d2023-12-28 19:07:21 +0800197 recv_hdl = hdl;
198 if(recv_cb) {
199 recv_cb(0);
200 }
b.liu4e243dc2023-11-27 11:20:00 +0800201 return 0;
202}
203
b.liub21bd8d2023-12-28 19:07:21 +0800204int qser_AudRecorder_StartRecord_Custom(char *file, int period_size, int period_count,
205 int num_channels, int sample_rate)
206{
207 return qser_AudRecorder_StartRecord(0, file, 0);
208}
209
b.liu4e243dc2023-11-27 11:20:00 +0800210int qser_AudRecorder_Pause(void)
211{
b.liub21bd8d2023-12-28 19:07:21 +0800212 if(recv_hdl < 0) {
213 LOGE("Recv busy or hdl error.");
214 return -1;
215 }
b.liu4e243dc2023-11-27 11:20:00 +0800216
b.liub21bd8d2023-12-28 19:07:21 +0800217 if(mbtk_audio_wav_recorder_pause()) {
218 LOGE("mbtk_audio_wav_recorder_pause() fail.");
219 return -1;
220 }
b.liu4e243dc2023-11-27 11:20:00 +0800221 return 0;
222}
223
224int qser_AudRecorder_Resume(void)
225{
b.liub21bd8d2023-12-28 19:07:21 +0800226 if(recv_hdl < 0) {
227 LOGE("Recv busy or hdl error.");
228 return -1;
229 }
b.liu4e243dc2023-11-27 11:20:00 +0800230
b.liub21bd8d2023-12-28 19:07:21 +0800231 if(mbtk_audio_wav_recorder_resume()) {
232 LOGE("mbtk_audio_wav_recorder_resume() fail.");
233 return -1;
234 }
b.liu4e243dc2023-11-27 11:20:00 +0800235 return 0;
236}
237
238void qser_AudRecorder_Stop(void)
239{
b.liub21bd8d2023-12-28 19:07:21 +0800240 if(recv_hdl < 0) {
241 LOGE("Recv busy or hdl error.");
242 return;
243 }
b.liu4e243dc2023-11-27 11:20:00 +0800244
b.liub21bd8d2023-12-28 19:07:21 +0800245 if(mbtk_audio_wav_recorder_stop()) {
246 LOGE("mbtk_audio_wav_recorder_stop() fail.");
247 return;
248 }
249
250 recv_hdl = -1;
b.liu4e243dc2023-11-27 11:20:00 +0800251}
252
253void qser_AudRecorder_Close(void)
254{
b.liub21bd8d2023-12-28 19:07:21 +0800255 if(recv_hdl >= 0) {
256 qser_AudRecorder_Stop();
257 }
b.liu4e243dc2023-11-27 11:20:00 +0800258
b.liub21bd8d2023-12-28 19:07:21 +0800259 if(mbtk_audio_wav_deinit()) {
260 LOGE("mbtk_audio_wav_deinit() fail.");
261 return;
262 }
263
264 recv_cb = NULL;
b.liu4e243dc2023-11-27 11:20:00 +0800265}
266
267void qser_Audio_Deinit(void)
268{
b.liub21bd8d2023-12-28 19:07:21 +0800269 // Do nothing...
liubin281ac462023-07-19 14:22:54 +0800270}
271