1 /*
2 * Copyright (c) 2024 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 #include "multimedia_audio_ffi.h"
17 #include "audio_capturer_log.h"
18 #include "multimedia_audio_capturer_callback.h"
19 #include "multimedia_audio_capturer_impl.h"
20 #include "multimedia_audio_error.h"
21 #include "multimedia_audio_manager_impl.h"
22 #include "multimedia_audio_renderer_callback.h"
23 #include "multimedia_audio_renderer_impl.h"
24 #include "multimedia_audio_routing_manager_callback.h"
25 #include "multimedia_audio_routing_manager_impl.h"
26 #include "multimedia_audio_stream_manager_callback.h"
27 #include "multimedia_audio_stream_manager_impl.h"
28 #include "multimedia_audio_volume_group_manager_impl.h"
29 #include "multimedia_audio_volume_manager_impl.h"
30
31 using namespace OHOS::FFI;
32
33 namespace OHOS {
34 namespace AudioStandard {
35 extern "C" {
36 // Audio Capturer
FfiMMACreateAudioCapturer(CAudioCapturerOptions options,int32_t * errorCode)37 int64_t FfiMMACreateAudioCapturer(CAudioCapturerOptions options, int32_t *errorCode)
38 {
39 auto capturer = FFIData::Create<MMAAudioCapturerImpl>();
40 if (!capturer) {
41 *errorCode = CJ_ERR_SYSTEM;
42 AUDIO_ERR_LOG("Create MMAAudioCapturerImpl error");
43 return CJ_ERR_INVALID_RETURN_VALUE;
44 }
45 auto ret = capturer->CreateAudioCapturer(options);
46 if (ret != SUCCESS_CODE) {
47 *errorCode = CJ_ERR_SYSTEM;
48 AUDIO_ERR_LOG("CreateAudioCapturer error");
49 return CJ_ERR_INVALID_RETURN_VALUE;
50 }
51 *errorCode = SUCCESS_CODE;
52 return capturer->GetID();
53 }
54
FfiMMAAudioCapturerGetState(int64_t id,int32_t * errorCode)55 int32_t FfiMMAAudioCapturerGetState(int64_t id, int32_t *errorCode)
56 {
57 auto capturer = FFIData::GetData<MMAAudioCapturerImpl>(id);
58 if (!capturer) {
59 *errorCode = CJ_ERR_SYSTEM;
60 AUDIO_ERR_LOG("get state failed, invalid id of AudioCapturer");
61 return CJ_ERR_INVALID_RETURN_VALUE;
62 }
63 return capturer->GetState();
64 }
65
FfiMMAAudioCapturerGetStreamId(int64_t id,int32_t * errorCode)66 uint32_t FfiMMAAudioCapturerGetStreamId(int64_t id, int32_t *errorCode)
67 {
68 auto capturer = FFIData::GetData<MMAAudioCapturerImpl>(id);
69 if (!capturer) {
70 *errorCode = CJ_ERR_SYSTEM;
71 AUDIO_ERR_LOG("get stream id failed, invalid id of AudioCapturer");
72 return CJ_ERR_INVALID_RETURN_VALUE;
73 }
74 return capturer->GetStreamId(errorCode);
75 }
76
FfiMMAAudioCapturerGetAudioTime(int64_t id,int32_t * errorCode)77 int64_t FfiMMAAudioCapturerGetAudioTime(int64_t id, int32_t *errorCode)
78 {
79 auto capturer = FFIData::GetData<MMAAudioCapturerImpl>(id);
80 if (!capturer) {
81 *errorCode = CJ_ERR_SYSTEM;
82 AUDIO_ERR_LOG("get audio time failed, invalid id of AudioCapturer");
83 return CJ_ERR_INVALID_RETURN_VALUE;
84 }
85 return capturer->GetAudioTime(errorCode);
86 }
87
FfiMMAAudioCapturerGetBufferSize(int64_t id,int32_t * errorCode)88 uint32_t FfiMMAAudioCapturerGetBufferSize(int64_t id, int32_t *errorCode)
89 {
90 auto capturer = FFIData::GetData<MMAAudioCapturerImpl>(id);
91 if (!capturer) {
92 *errorCode = CJ_ERR_SYSTEM;
93 AUDIO_ERR_LOG("get buffer size failed, invalid id of AudioCapturer");
94 return CJ_ERR_INVALID_RETURN_VALUE;
95 }
96 return capturer->GetBufferSize(errorCode);
97 }
98
FfiMMAAudioCapturerGetOverflowCount(int64_t id,int32_t * errorCode)99 uint32_t FfiMMAAudioCapturerGetOverflowCount(int64_t id, int32_t *errorCode)
100 {
101 auto capturer = FFIData::GetData<MMAAudioCapturerImpl>(id);
102 if (!capturer) {
103 *errorCode = CJ_ERR_SYSTEM;
104 AUDIO_ERR_LOG("get OverflowCount failed, invalid id of AudioCapturer");
105 return CJ_ERR_INVALID_RETURN_VALUE;
106 }
107 return capturer->GetOverflowCount();
108 }
109
FfiMMAAudioCapturerStart(int64_t id,int32_t * errorCode)110 void FfiMMAAudioCapturerStart(int64_t id, int32_t *errorCode)
111 {
112 auto capturer = FFIData::GetData<MMAAudioCapturerImpl>(id);
113 if (!capturer) {
114 AUDIO_ERR_LOG("AudioCapturer start failed, invalid id of AudioCapturer");
115 *errorCode = CJ_ERR_SYSTEM;
116 return;
117 }
118 auto isSuccess = capturer->Start();
119 if (isSuccess != SUCCESS_CODE) {
120 *errorCode = isSuccess;
121 }
122 }
123
FfiMMAAudioCapturerStop(int64_t id,int32_t * errorCode)124 void FfiMMAAudioCapturerStop(int64_t id, int32_t *errorCode)
125 {
126 auto capturer = FFIData::GetData<MMAAudioCapturerImpl>(id);
127 if (!capturer) {
128 AUDIO_ERR_LOG("AudioCapturer stop failed, invalid id of AudioCapturer");
129 *errorCode = CJ_ERR_SYSTEM;
130 return;
131 }
132 auto isSuccess = capturer->Stop();
133 if (isSuccess != SUCCESS_CODE) {
134 *errorCode = isSuccess;
135 }
136 }
137
FfiMMAAudioCapturerRelease(int64_t id,int32_t * errorCode)138 void FfiMMAAudioCapturerRelease(int64_t id, int32_t *errorCode)
139 {
140 auto capturer = FFIData::GetData<MMAAudioCapturerImpl>(id);
141 if (!capturer) {
142 AUDIO_ERR_LOG("AudioCapturer release failed, invalid id of AudioCapturer");
143 *errorCode = CJ_ERR_SYSTEM;
144 return;
145 }
146 auto isSuccess = capturer->Release();
147 if (isSuccess != SUCCESS_CODE) {
148 *errorCode = isSuccess;
149 }
150 }
151
FfiMMAAudioCapturerGetAudioCapturerChangeInfo(int64_t id,int32_t * errorCode)152 CAudioCapturerChangeInfo FfiMMAAudioCapturerGetAudioCapturerChangeInfo(int64_t id, int32_t *errorCode)
153 {
154 auto capturer = FFIData::GetData<MMAAudioCapturerImpl>(id);
155 if (!capturer) {
156 AUDIO_ERR_LOG("Get AudioCapturerChangeInfo failed, invalid id of AudioCapturer");
157 *errorCode = CJ_ERR_SYSTEM;
158 return CAudioCapturerChangeInfo();
159 }
160 auto info = capturer->GetAudioCapturerChangeInfo(errorCode);
161 return info;
162 }
163
FfiMMAAudioCapturerGetInputDevices(int64_t id,int32_t * errorCode)164 CArrDeviceDescriptor FfiMMAAudioCapturerGetInputDevices(int64_t id, int32_t *errorCode)
165 {
166 auto capturer = FFIData::GetData<MMAAudioCapturerImpl>(id);
167 if (!capturer) {
168 AUDIO_ERR_LOG("Get InputDevices failed, invalid id of AudioCapturer");
169 *errorCode = CJ_ERR_SYSTEM;
170 return CArrDeviceDescriptor();
171 }
172 auto devices = capturer->GetInputDevices(errorCode);
173 return devices;
174 }
175
FfiMMAAudioCapturerGetCapturerInfo(int64_t id,int32_t * errorCode)176 CAudioCapturerInfo FfiMMAAudioCapturerGetCapturerInfo(int64_t id, int32_t *errorCode)
177 {
178 auto capturer = FFIData::GetData<MMAAudioCapturerImpl>(id);
179 if (!capturer) {
180 AUDIO_ERR_LOG("Get AudioCapturerInfo failed, invalid id of AudioCapturer");
181 *errorCode = CJ_ERR_SYSTEM;
182 return CAudioCapturerInfo();
183 }
184 auto info = capturer->GetCurrentCapturerInfo(errorCode);
185 return info;
186 }
187
FfiMMAAudioCapturerGetStreamInfo(int64_t id,int32_t * errorCode)188 CAudioStreamInfo FfiMMAAudioCapturerGetStreamInfo(int64_t id, int32_t *errorCode)
189 {
190 auto capturer = FFIData::GetData<MMAAudioCapturerImpl>(id);
191 if (!capturer) {
192 AUDIO_ERR_LOG("Get StreamInfo failed, invalid id of AudioCapturer");
193 *errorCode = CJ_ERR_SYSTEM;
194 return CAudioStreamInfo();
195 }
196 auto info = capturer->GetStreamInfo(errorCode);
197 return info;
198 }
199
FfiMMAAudioCapturerOn(int64_t id,int32_t callbackType,void (* callback)(),int32_t * errorCode)200 void FfiMMAAudioCapturerOn(int64_t id, int32_t callbackType, void (*callback)(), int32_t *errorCode)
201 {
202 auto capturer = FFIData::GetData<MMAAudioCapturerImpl>(id);
203 if (!capturer) {
204 AUDIO_ERR_LOG("register failed, invalid id of AudioCapturer");
205 *errorCode = CJ_ERR_SYSTEM;
206 return;
207 }
208 capturer->RegisterCallback(callbackType, callback, errorCode);
209 }
210
FfiMMAAudioCapturerOnWithFrame(int64_t id,int32_t callbackType,void (* callback)(),int64_t frame,int32_t * errorCode)211 void FfiMMAAudioCapturerOnWithFrame(int64_t id, int32_t callbackType, void (*callback)(), int64_t frame,
212 int32_t *errorCode)
213 {
214 auto capturer = FFIData::GetData<MMAAudioCapturerImpl>(id);
215 if (!capturer) {
216 AUDIO_ERR_LOG("register failed, invalid id of AudioCapturer");
217 *errorCode = CJ_ERR_SYSTEM;
218 return;
219 }
220 capturer->RegisterCallbackWithFrame(callbackType, callback, frame, errorCode);
221 }
222
223 // Audio Manager
FfiMMACreateAudioManager(int32_t * errorCode)224 int64_t FfiMMACreateAudioManager(int32_t *errorCode)
225 {
226 auto mgr = FFIData::Create<MMAAudioManagerImpl>();
227 if (!mgr) {
228 *errorCode = CJ_ERR_SYSTEM;
229 AUDIO_ERR_LOG("Create AudioManager error");
230 return CJ_ERR_INVALID_RETURN_VALUE;
231 }
232 *errorCode = SUCCESS_CODE;
233 return mgr->GetID();
234 }
235
FfiMMAAudioManagerGetRoutingManager(int64_t id,int32_t * errorCode)236 int64_t FfiMMAAudioManagerGetRoutingManager(int64_t id, int32_t *errorCode)
237 {
238 auto mgr = FFIData::GetData<MMAAudioManagerImpl>(id);
239 if (!mgr) {
240 AUDIO_ERR_LOG("Get RoutingManager failed, invalid id of AudioManager");
241 *errorCode = CJ_ERR_SYSTEM;
242 return CJ_ERR_INVALID_RETURN_VALUE;
243 }
244 return mgr->GetRoutingManager(errorCode);
245 }
246
FfiMMAAudioManagerGetStreamManager(int64_t id,int32_t * errorCode)247 int64_t FfiMMAAudioManagerGetStreamManager(int64_t id, int32_t *errorCode)
248 {
249 auto mgr = FFIData::GetData<MMAAudioManagerImpl>(id);
250 if (!mgr) {
251 AUDIO_ERR_LOG("Get StreamManager failed, invalid id of AudioManager");
252 *errorCode = CJ_ERR_SYSTEM;
253 return CJ_ERR_INVALID_RETURN_VALUE;
254 }
255 return mgr->GetStreamManger(errorCode);
256 }
257
FfiMMAAudioManagerGetAudioScene(int64_t id,int32_t * errorCode)258 int32_t FfiMMAAudioManagerGetAudioScene(int64_t id, int32_t *errorCode)
259 {
260 auto mgr = FFIData::GetData<MMAAudioManagerImpl>(id);
261 if (!mgr) {
262 AUDIO_ERR_LOG("Get AudioScene failed, invalid id of AudioManager");
263 *errorCode = CJ_ERR_SYSTEM;
264 return CJ_ERR_INVALID_RETURN_VALUE;
265 }
266 return mgr->GetAudioScene();
267 }
268
FfiMMAAudioManagerGetVolumeManager(int64_t id,int32_t * errorCode)269 int64_t FfiMMAAudioManagerGetVolumeManager(int64_t id, int32_t *errorCode)
270 {
271 auto mgr = FFIData::GetData<MMAAudioManagerImpl>(id);
272 if (mgr == nullptr) {
273 *errorCode = CJ_ERR_SYSTEM;
274 AUDIO_ERR_LOG("FfiMMAAudioManagerGetVolumeManager failed.");
275 return CJ_ERR_INVALID_RETURN_VALUE;
276 }
277 *errorCode = SUCCESS_CODE;
278 return mgr->GetVolumeManager(errorCode);
279 }
280
281 // Audio Stream Manager
FfiMMAASMIsActive(int64_t id,int32_t volumeType,int32_t * errorCode)282 bool FfiMMAASMIsActive(int64_t id, int32_t volumeType, int32_t *errorCode)
283 {
284 auto mgr = FFIData::GetData<MMAAudioStreamManagerImpl>(id);
285 if (!mgr) {
286 AUDIO_ERR_LOG("IsActive failed, invalid id of AudioStreamManager");
287 *errorCode = CJ_ERR_SYSTEM;
288 return false;
289 }
290 return mgr->IsActive(volumeType);
291 }
292
FfiMMAASMGetCurrentAudioRendererInfoArray(int64_t id,int32_t * errorCode)293 CArrAudioRendererChangeInfo FfiMMAASMGetCurrentAudioRendererInfoArray(int64_t id, int32_t *errorCode)
294 {
295 auto mgr = FFIData::GetData<MMAAudioStreamManagerImpl>(id);
296 if (!mgr) {
297 AUDIO_ERR_LOG("Get CurrentAudioRendererInfoArray failed, invalid id of AudioStreamManager");
298 *errorCode = CJ_ERR_SYSTEM;
299 return CArrAudioRendererChangeInfo();
300 }
301 return mgr->GetCurrentRendererChangeInfos(errorCode);
302 }
303
FfiMMAASMGetCurrentAudioCapturerInfoArray(int64_t id,int32_t * errorCode)304 CArrAudioCapturerChangeInfo FfiMMAASMGetCurrentAudioCapturerInfoArray(int64_t id, int32_t *errorCode)
305 {
306 auto mgr = FFIData::GetData<MMAAudioStreamManagerImpl>(id);
307 if (!mgr) {
308 AUDIO_ERR_LOG("Get CurrentAudioCapturerInfoArray failed, invalid id of AudioStreamManager");
309 *errorCode = CJ_ERR_SYSTEM;
310 return CArrAudioCapturerChangeInfo();
311 }
312 return mgr->GetAudioCapturerInfoArray(errorCode);
313 }
314
FfiMMAASMGetAudioEffectInfoArray(int64_t id,int32_t usage,int32_t * errorCode)315 CArrI32 FfiMMAASMGetAudioEffectInfoArray(int64_t id, int32_t usage, int32_t *errorCode)
316 {
317 auto mgr = FFIData::GetData<MMAAudioStreamManagerImpl>(id);
318 if (!mgr) {
319 AUDIO_ERR_LOG("Get AudioEffectInfoArray failed, invalid id of AudioStreamManager");
320 *errorCode = CJ_ERR_SYSTEM;
321 return CArrI32();
322 }
323 return mgr->GetAudioEffectInfoArray(usage, errorCode);
324 }
325
FfiMMAASMOn(int64_t id,int32_t callbackType,void (* callback)(),int32_t * errorCode)326 void FfiMMAASMOn(int64_t id, int32_t callbackType, void (*callback)(), int32_t *errorCode)
327 {
328 auto mgr = FFIData::GetData<MMAAudioStreamManagerImpl>(id);
329 if (!mgr) {
330 AUDIO_ERR_LOG("register failed, invalid id of AudioStreamManager");
331 *errorCode = CJ_ERR_SYSTEM;
332 return;
333 }
334 mgr->RegisterCallback(callbackType, callback, errorCode);
335 }
336
337 // Audio Routing Manager
FfiMMAARMSetCommunicationDevice(int64_t id,int32_t deviceType,bool active,int32_t * errorCode)338 void FfiMMAARMSetCommunicationDevice(int64_t id, int32_t deviceType, bool active, int32_t *errorCode)
339 {
340 auto mgr = FFIData::GetData<MMAAudioRoutingManagerImpl>(id);
341 if (!mgr) {
342 AUDIO_ERR_LOG("SetCommunicationDevice failed, invalid id of AudioRoutingManager");
343 *errorCode = CJ_ERR_SYSTEM;
344 return;
345 }
346 *errorCode = mgr->SetCommunicationDevice(deviceType, active);
347 }
348
FfiMMAARMIsCommunicationDeviceActive(int64_t id,int32_t deviceType,int32_t * errorCode)349 bool FfiMMAARMIsCommunicationDeviceActive(int64_t id, int32_t deviceType, int32_t *errorCode)
350 {
351 auto mgr = FFIData::GetData<MMAAudioRoutingManagerImpl>(id);
352 if (!mgr) {
353 AUDIO_ERR_LOG("IsCommunicationDeviceActive failed, invalid id of AudioRoutingManager");
354 *errorCode = CJ_ERR_SYSTEM;
355 return false;
356 }
357 return mgr->IsCommunicationDeviceActive(deviceType);
358 }
359
FfiMMAARMGetDevices(int64_t id,int32_t deviceFlag,int32_t * errorCode)360 CArrDeviceDescriptor FfiMMAARMGetDevices(int64_t id, int32_t deviceFlag, int32_t *errorCode)
361 {
362 auto mgr = FFIData::GetData<MMAAudioRoutingManagerImpl>(id);
363 if (!mgr) {
364 AUDIO_ERR_LOG("GetDevices failed, invalid id of AudioRoutingManager");
365 *errorCode = CJ_ERR_SYSTEM;
366 return CArrDeviceDescriptor();
367 }
368 return mgr->GetDevices(deviceFlag, errorCode);
369 }
370
FfiMMAARMGetPreferredInputDeviceForCapturerInfo(int64_t id,CAudioCapturerInfo capturerInfo,int32_t * errorCode)371 CArrDeviceDescriptor FfiMMAARMGetPreferredInputDeviceForCapturerInfo(int64_t id, CAudioCapturerInfo capturerInfo,
372 int32_t *errorCode)
373 {
374 auto mgr = FFIData::GetData<MMAAudioRoutingManagerImpl>(id);
375 if (!mgr) {
376 AUDIO_ERR_LOG("GetPreferredInputDeviceForCapturerInfo failed, invalid id of AudioRoutingManager");
377 *errorCode = CJ_ERR_SYSTEM;
378 return CArrDeviceDescriptor();
379 }
380 return mgr->GetPreferredInputDeviceForCapturerInfo(capturerInfo, errorCode);
381 }
382
FfiMMAARMGetPreferredOutputDeviceForRendererInfo(int64_t id,CAudioRendererInfo rendererInfo,int32_t * errorCode)383 CArrDeviceDescriptor FfiMMAARMGetPreferredOutputDeviceForRendererInfo(int64_t id,
384 CAudioRendererInfo rendererInfo, int32_t *errorCode)
385 {
386 auto mgr = FFIData::GetData<MMAAudioRoutingManagerImpl>(id);
387 if (!mgr) {
388 AUDIO_ERR_LOG("GetPreferredOutputDeviceForRendererInfo failed, invalid id of AudioRoutingManager");
389 *errorCode = CJ_ERR_SYSTEM;
390 return CArrDeviceDescriptor();
391 }
392 return mgr->GetPreferredOutputDeviceForRendererInfo(rendererInfo, errorCode);
393 }
394
FfiMMAARMOn(int64_t id,int32_t callbackType,uint32_t deviceUsage,void (* callback)(),int32_t * errorCode)395 void FfiMMAARMOn(int64_t id, int32_t callbackType, uint32_t deviceUsage, void (*callback)(), int32_t *errorCode)
396 {
397 auto mgr = FFIData::GetData<MMAAudioRoutingManagerImpl>(id);
398 if (!mgr) {
399 AUDIO_ERR_LOG("register failed, invalid id of AudioRoutingManager");
400 *errorCode = CJ_ERR_SYSTEM;
401 return;
402 }
403 mgr->RegisterCallback(callbackType, deviceUsage, callback, errorCode);
404 }
405
FfiMMAARMOnWithFlags(int64_t id,int32_t callbackType,void (* callback)(),int32_t flags,int32_t * errorCode)406 void FfiMMAARMOnWithFlags(int64_t id, int32_t callbackType, void (*callback)(), int32_t flags, int32_t *errorCode)
407 {
408 auto mgr = FFIData::GetData<MMAAudioRoutingManagerImpl>(id);
409 if (!mgr) {
410 AUDIO_ERR_LOG("register failed, invalid id of AudioRoutingManager");
411 *errorCode = CJ_ERR_SYSTEM;
412 return;
413 }
414 mgr->RegisterDeviceChangeCallback(callbackType, callback, flags, errorCode);
415 }
416
FfiMMAARMOnWithCapturerInfo(int64_t id,int32_t callbackType,void (* callback)(),CAudioCapturerInfo capturerInfo,int32_t * errorCode)417 void FfiMMAARMOnWithCapturerInfo(int64_t id, int32_t callbackType, void (*callback)(), CAudioCapturerInfo capturerInfo,
418 int32_t *errorCode)
419 {
420 auto mgr = FFIData::GetData<MMAAudioRoutingManagerImpl>(id);
421 if (!mgr) {
422 AUDIO_ERR_LOG("register failed, invalid id of AudioRoutingManager");
423 *errorCode = CJ_ERR_SYSTEM;
424 return;
425 }
426 mgr->RegisterPreferredInputDeviceChangeCallback(callbackType, callback, capturerInfo, errorCode);
427 }
428
FfiMMAARMOnWithRendererInfo(int64_t id,int32_t callbackType,void (* callback)(),CAudioRendererInfo rendererInfo,int32_t * errorCode)429 void FfiMMAARMOnWithRendererInfo(int64_t id, int32_t callbackType, void (*callback)(), CAudioRendererInfo rendererInfo,
430 int32_t *errorCode)
431 {
432 auto mgr = FFIData::GetData<MMAAudioRoutingManagerImpl>(id);
433 if (!mgr) {
434 AUDIO_ERR_LOG("register failed, invalid id of AudioRoutingManager");
435 *errorCode = CJ_ERR_SYSTEM;
436 return;
437 }
438 mgr->RegisterPreferredOutputDeviceChangeCallback(callbackType, callback, rendererInfo, errorCode);
439 }
440
441 /* Audio Volume Manager */
FfiMMAAVMGetVolumeGroupManager(int64_t id,int32_t groupId,int32_t * errorCode)442 int64_t FfiMMAAVMGetVolumeGroupManager(int64_t id, int32_t groupId, int32_t *errorCode)
443 {
444 auto mgr = FFIData::GetData<MMAAudioVolumeManagerImpl>(id);
445 if (mgr == nullptr) {
446 *errorCode = CJ_ERR_SYSTEM;
447 AUDIO_ERR_LOG("FfiMMAAVMGetVolumeGroupManager failed.");
448 return CJ_ERR_INVALID_RETURN_VALUE;
449 }
450 *errorCode = SUCCESS_CODE;
451 return mgr->GetVolumeGroupManager(groupId, errorCode);
452 }
453
FfiMMAAVMOn(int64_t id,int32_t callbackType,void (* callback)(),int32_t * errorCode)454 void FfiMMAAVMOn(int64_t id, int32_t callbackType, void (*callback)(), int32_t *errorCode)
455 {
456 auto mgr = FFIData::GetData<MMAAudioVolumeManagerImpl>(id);
457 if (mgr == nullptr) {
458 *errorCode = CJ_ERR_SYSTEM;
459 AUDIO_ERR_LOG("FfiMMAAVMOn failed.");
460 return;
461 }
462 return mgr->RegisterCallback(callbackType, callback, errorCode);
463 }
464
465 /* Audio Volumne Group Manager */
FfiMMAAVGMGetMaxVolume(int64_t id,int32_t volumeType,int32_t * errorCode)466 int32_t FfiMMAAVGMGetMaxVolume(int64_t id, int32_t volumeType, int32_t *errorCode)
467 {
468 auto inst = FFIData::GetData<MMAAudioVolumeGroupManagerImpl>(id);
469 if (inst == nullptr) {
470 *errorCode = CJ_ERR_SYSTEM;
471 AUDIO_ERR_LOG("FfiMMAAVGMGetMaxVolume error");
472 return CJ_ERR_INVALID_RETURN_VALUE;
473 }
474 *errorCode = SUCCESS_CODE;
475 return inst->GetMaxVolume(volumeType);
476 }
477
FfiMMAAVGMGetMinVolume(int64_t id,int32_t volumeType,int32_t * errorCode)478 int32_t FfiMMAAVGMGetMinVolume(int64_t id, int32_t volumeType, int32_t *errorCode)
479 {
480 auto inst = FFIData::GetData<MMAAudioVolumeGroupManagerImpl>(id);
481 if (inst == nullptr) {
482 *errorCode = CJ_ERR_SYSTEM;
483 AUDIO_ERR_LOG("FfiMMAAVGMGetMinVolume error");
484 return CJ_ERR_INVALID_RETURN_VALUE;
485 }
486 *errorCode = SUCCESS_CODE;
487 return inst->GetMinVolume(volumeType);
488 }
489
FfiMMAAVGMGetRingerMode(int64_t id,int32_t * errorCode)490 int32_t FfiMMAAVGMGetRingerMode(int64_t id, int32_t *errorCode)
491 {
492 auto inst = FFIData::GetData<MMAAudioVolumeGroupManagerImpl>(id);
493 if (inst == nullptr) {
494 *errorCode = CJ_ERR_SYSTEM;
495 AUDIO_ERR_LOG("FfiMMAAVGMGetRingerMode error");
496 return CJ_ERR_INVALID_RETURN_VALUE;
497 }
498 *errorCode = SUCCESS_CODE;
499 return inst->GetRingerMode();
500 }
501
FfiMMAAVGMGetSystemVolumeInDb(int64_t id,int32_t volumeType,int32_t volumeLevel,int32_t device,int32_t * errorCode)502 float FfiMMAAVGMGetSystemVolumeInDb(int64_t id, int32_t volumeType, int32_t volumeLevel, int32_t device,
503 int32_t *errorCode)
504 {
505 auto inst = FFIData::GetData<MMAAudioVolumeGroupManagerImpl>(id);
506 if (inst == nullptr) {
507 *errorCode = CJ_ERR_SYSTEM;
508 AUDIO_ERR_LOG("FfiMMAAVGMGetSystemVolumeInDb error");
509 return CJ_ERR_INVALID_RETURN_VALUE;
510 }
511 *errorCode = SUCCESS_CODE;
512 return inst->GetSystemVolumeInDb(volumeType, volumeLevel, device);
513 }
514
FfiMMAAVGMGetVolume(int64_t id,int32_t volumeType,int32_t * errorCode)515 int32_t FfiMMAAVGMGetVolume(int64_t id, int32_t volumeType, int32_t *errorCode)
516 {
517 auto inst = FFIData::GetData<MMAAudioVolumeGroupManagerImpl>(id);
518 if (inst == nullptr) {
519 *errorCode = CJ_ERR_SYSTEM;
520 AUDIO_ERR_LOG("FfiMMAAVGMGetVolume error");
521 return CJ_ERR_INVALID_RETURN_VALUE;
522 }
523 *errorCode = SUCCESS_CODE;
524 return inst->GetVolume(volumeType);
525 }
526
FfiMMAAVGMIsMicrophoneMute(int64_t id,int32_t * errorCode)527 bool FfiMMAAVGMIsMicrophoneMute(int64_t id, int32_t *errorCode)
528 {
529 auto inst = FFIData::GetData<MMAAudioVolumeGroupManagerImpl>(id);
530 if (inst == nullptr) {
531 *errorCode = CJ_ERR_SYSTEM;
532 AUDIO_ERR_LOG("Get FfiMMAAVGMIsMicrophoneMute error");
533 return CJ_ERR_INVALID_RETURN_VALUE;
534 }
535 *errorCode = SUCCESS_CODE;
536 return inst->IsMicrophoneMute();
537 }
538
FfiMMAAVGMIsMute(int64_t id,int32_t volumeType,int32_t * errorCode)539 bool FfiMMAAVGMIsMute(int64_t id, int32_t volumeType, int32_t *errorCode)
540 {
541 auto inst = FFIData::GetData<MMAAudioVolumeGroupManagerImpl>(id);
542 if (inst == nullptr) {
543 *errorCode = CJ_ERR_SYSTEM;
544 AUDIO_ERR_LOG("Get FfiMMAAVGMIsMute error");
545 return CJ_ERR_INVALID_RETURN_VALUE;
546 }
547 *errorCode = SUCCESS_CODE;
548 return inst->IsMute(volumeType);
549 }
550
FfiMMAAVGMIsVolumeUnadjustable(int64_t id,int32_t * errorCode)551 bool FfiMMAAVGMIsVolumeUnadjustable(int64_t id, int32_t *errorCode)
552 {
553 auto inst = FFIData::GetData<MMAAudioVolumeGroupManagerImpl>(id);
554 if (inst == nullptr) {
555 *errorCode = CJ_ERR_SYSTEM;
556 AUDIO_ERR_LOG("Get FfiMMAAVGMIsVolumeUnadjustable error");
557 return CJ_ERR_INVALID_RETURN_VALUE;
558 }
559 *errorCode = SUCCESS_CODE;
560 return inst->IsVolumeUnadjustable();
561 }
562
563 /* CAPABILITY FOR LAST CANGJIE VERSION AND WILL BE REMOVED */
564 /* Audio Manager */
FfiMMAGetVolumeManager(int64_t id,int32_t * errorCode)565 int64_t FfiMMAGetVolumeManager(int64_t id, int32_t *errorCode)
566 {
567 auto mgr = FFIData::Create<MMAAudioVolumeManagerImpl>();
568 if (mgr == nullptr) {
569 *errorCode = CJ_ERR_SYSTEM;
570 AUDIO_ERR_LOG("FfiMMACreateAudioManager failed.");
571 return CJ_ERR_INVALID_RETURN_VALUE;
572 }
573 *errorCode = SUCCESS_CODE;
574 return mgr->GetID();
575 }
576
577 /* Audio Volume Manager */
FfiMMAGetVolumeGroupManager(int64_t id,int32_t * errorCode)578 int64_t FfiMMAGetVolumeGroupManager(int64_t id, int32_t *errorCode)
579 {
580 auto mgr = FFIData::Create<MMAAudioVolumeManagerImpl>();
581 if (mgr == nullptr) {
582 *errorCode = CJ_ERR_SYSTEM;
583 AUDIO_ERR_LOG("FfiMMACreateAudioManager failed.");
584 return CJ_ERR_INVALID_RETURN_VALUE;
585 }
586 *errorCode = SUCCESS_CODE;
587 return mgr->GetID();
588 }
589
590 /* Audio Volumne Group Manager */
FfiMMAGetMaxVolume(int64_t id,int32_t volumeType,int32_t * errorCode)591 int32_t FfiMMAGetMaxVolume(int64_t id, int32_t volumeType, int32_t *errorCode)
592 {
593 auto inst = FFIData::GetData<MMAAudioVolumeGroupManagerImpl>(id);
594 if (inst == nullptr) {
595 *errorCode = CJ_ERR_SYSTEM;
596 AUDIO_ERR_LOG("Get MMAAudioVolumeGroupManagerImpl error");
597 return CJ_ERR_INVALID_RETURN_VALUE;
598 }
599 *errorCode = SUCCESS_CODE;
600 return inst->GetMaxVolume(volumeType);
601 }
602
FfiMMAGetMinVolume(int64_t id,int32_t volumeType,int32_t * errorCode)603 int32_t FfiMMAGetMinVolume(int64_t id, int32_t volumeType, int32_t *errorCode)
604 {
605 auto inst = FFIData::GetData<MMAAudioVolumeGroupManagerImpl>(id);
606 if (inst == nullptr) {
607 *errorCode = CJ_ERR_SYSTEM;
608 AUDIO_ERR_LOG("Get MMAAudioVolumeGroupManagerImpl error");
609 return CJ_ERR_INVALID_RETURN_VALUE;
610 }
611 *errorCode = SUCCESS_CODE;
612 return inst->GetMinVolume(volumeType);
613 }
614
FfiMMAGetRingerMode(int64_t id,int32_t * errorCode)615 int32_t FfiMMAGetRingerMode(int64_t id, int32_t *errorCode)
616 {
617 auto inst = FFIData::GetData<MMAAudioVolumeGroupManagerImpl>(id);
618 if (inst == nullptr) {
619 *errorCode = CJ_ERR_SYSTEM;
620 AUDIO_ERR_LOG("Get MMAAudioVolumeGroupManagerImpl error");
621 return CJ_ERR_INVALID_RETURN_VALUE;
622 }
623 *errorCode = SUCCESS_CODE;
624 return inst->GetRingerMode();
625 }
626
FfiMMAGetSystemVolumeInDb(int64_t id,int32_t volumeType,int32_t volumeLevel,int32_t device,int32_t * errorCode)627 float FfiMMAGetSystemVolumeInDb(int64_t id, int32_t volumeType, int32_t volumeLevel, int32_t device, int32_t *errorCode)
628 {
629 auto inst = FFIData::GetData<MMAAudioVolumeGroupManagerImpl>(id);
630 if (inst == nullptr) {
631 *errorCode = CJ_ERR_SYSTEM;
632 AUDIO_ERR_LOG("Get MMAAudioVolumeGroupManagerImpl error");
633 return CJ_ERR_INVALID_RETURN_VALUE;
634 }
635 *errorCode = SUCCESS_CODE;
636 return inst->GetSystemVolumeInDb(volumeType, volumeLevel, device);
637 }
638
FfiMMAGetVolume(int64_t id,int32_t volumeType,int32_t * errorCode)639 int32_t FfiMMAGetVolume(int64_t id, int32_t volumeType, int32_t *errorCode)
640 {
641 auto inst = FFIData::GetData<MMAAudioVolumeGroupManagerImpl>(id);
642 if (inst == nullptr) {
643 *errorCode = CJ_ERR_SYSTEM;
644 AUDIO_ERR_LOG("Get MMAAudioVolumeGroupManagerImpl error");
645 return CJ_ERR_INVALID_RETURN_VALUE;
646 }
647 *errorCode = SUCCESS_CODE;
648 return inst->GetVolume(volumeType);
649 }
650
FfiMMAIsMicrophoneMute(int64_t id,int32_t * errorCode)651 bool FfiMMAIsMicrophoneMute(int64_t id, int32_t *errorCode)
652 {
653 auto inst = FFIData::GetData<MMAAudioVolumeGroupManagerImpl>(id);
654 if (inst == nullptr) {
655 *errorCode = CJ_ERR_SYSTEM;
656 AUDIO_ERR_LOG("Get MMAAudioVolumeGroupManagerImpl error");
657 return CJ_ERR_INVALID_RETURN_VALUE;
658 }
659 *errorCode = SUCCESS_CODE;
660 return inst->IsMicrophoneMute();
661 }
662
FfiMMAIsMute(int64_t id,int32_t volumeType,int32_t * errorCode)663 bool FfiMMAIsMute(int64_t id, int32_t volumeType, int32_t *errorCode)
664 {
665 auto inst = FFIData::GetData<MMAAudioVolumeGroupManagerImpl>(id);
666 if (inst == nullptr) {
667 *errorCode = CJ_ERR_SYSTEM;
668 AUDIO_ERR_LOG("Get MMAAudioVolumeGroupManagerImpl error");
669 return CJ_ERR_INVALID_RETURN_VALUE;
670 }
671 *errorCode = SUCCESS_CODE;
672 return inst->IsMute(volumeType);
673 }
674
FfiMMAIsVolumeUnadjustable(int64_t id,int32_t * errorCode)675 bool FfiMMAIsVolumeUnadjustable(int64_t id, int32_t *errorCode)
676 {
677 auto inst = FFIData::GetData<MMAAudioVolumeGroupManagerImpl>(id);
678 if (inst == nullptr) {
679 *errorCode = CJ_ERR_SYSTEM;
680 AUDIO_ERR_LOG("Get MMAAudioVolumeGroupManagerImpl error");
681 return CJ_ERR_INVALID_RETURN_VALUE;
682 }
683 *errorCode = SUCCESS_CODE;
684 return inst->IsVolumeUnadjustable();
685 }
686
FfiMMAAVGMGetMaxAmplitudeForOutputDevice(int64_t id,CDeviceDescriptor desc,int32_t * errorCode)687 float FfiMMAAVGMGetMaxAmplitudeForOutputDevice(int64_t id, CDeviceDescriptor desc, int32_t *errorCode)
688 {
689 auto inst = FFIData::GetData<MMAAudioVolumeGroupManagerImpl>(id);
690 if (inst == nullptr) {
691 *errorCode = CJ_ERR_SYSTEM;
692 AUDIO_ERR_LOG("Get MMAAudioVolumeGroupManagerImpl error");
693 return CJ_ERR_INVALID_RETURN_VALUE;
694 }
695 *errorCode = SUCCESS_CODE;
696 return inst->GetMaxAmplitudeForOutputDevice(desc.id);
697 }
698
FfiMMAAVGMGetMaxAmplitudeForInputDevice(int64_t id,CDeviceDescriptor desc,int32_t * errorCode)699 float FfiMMAAVGMGetMaxAmplitudeForInputDevice(int64_t id, CDeviceDescriptor desc, int32_t *errorCode)
700 {
701 auto inst = FFIData::GetData<MMAAudioVolumeGroupManagerImpl>(id);
702 if (inst == nullptr) {
703 *errorCode = CJ_ERR_SYSTEM;
704 AUDIO_ERR_LOG("Get MMAAudioVolumeGroupManagerImpl error");
705 return CJ_ERR_INVALID_RETURN_VALUE;
706 }
707 *errorCode = SUCCESS_CODE;
708 return inst->GetMaxAmplitudeForInputDevice(desc.id);
709 }
710
FfiMMAAVGMOn(int64_t id,int32_t callbackType,void (* callback)(),int32_t * errorCode)711 void FfiMMAAVGMOn(int64_t id, int32_t callbackType, void (*callback)(), int32_t *errorCode)
712 {
713 auto inst = FFIData::GetData<MMAAudioVolumeGroupManagerImpl>(id);
714 if (inst == nullptr) {
715 *errorCode = CJ_ERR_SYSTEM;
716 AUDIO_ERR_LOG("Get MMAAudioVolumeGroupManagerImpl error");
717 return;
718 }
719 *errorCode = SUCCESS_CODE;
720 inst->RegisterCallback(callbackType, callback, errorCode);
721 }
722
723 /* Audio Renderer */
FfiMMACreateAudioRenderer(CAudioRendererOptions options,int32_t * errorCode)724 int64_t FfiMMACreateAudioRenderer(CAudioRendererOptions options, int32_t *errorCode)
725 {
726 auto renderer = FFIData::Create<MMAAudioRendererImpl>();
727 if (renderer == nullptr) {
728 *errorCode = CJ_ERR_SYSTEM;
729 AUDIO_ERR_LOG("Create MMAAudioRendererImpl error");
730 return CJ_ERR_INVALID_RETURN_VALUE;
731 }
732 auto ret = renderer->CreateAudioRenderer(options);
733 if (ret != SUCCESS_CODE) {
734 *errorCode = CJ_ERR_SYSTEM;
735 AUDIO_ERR_LOG("CreateAudioRenderer error");
736 return CJ_ERR_INVALID_RETURN_VALUE;
737 }
738 *errorCode = SUCCESS_CODE;
739 return renderer->GetID();
740 }
741
FfiMMAARGetState(int64_t id,int32_t * errorCode)742 int32_t FfiMMAARGetState(int64_t id, int32_t *errorCode)
743 {
744 auto renderer = FFIData::GetData<MMAAudioRendererImpl>(id);
745 if (renderer == nullptr) {
746 *errorCode = CJ_ERR_SYSTEM;
747 AUDIO_ERR_LOG("GetState failed, invalid id of AudioRenderer");
748 return CJ_ERR_INVALID_RETURN_VALUE;
749 }
750 return renderer->GetState();
751 }
752
FfiMMAARGetAudioTime(int64_t id,int32_t * errorCode)753 int64_t FfiMMAARGetAudioTime(int64_t id, int32_t *errorCode)
754 {
755 auto renderer = FFIData::GetData<MMAAudioRendererImpl>(id);
756 if (renderer == nullptr) {
757 *errorCode = CJ_ERR_SYSTEM;
758 AUDIO_ERR_LOG("GetAudioTime failed, invalid id of AudioRenderer");
759 return CJ_ERR_INVALID_RETURN_VALUE;
760 }
761 return renderer->GetAudioTime(errorCode);
762 }
763
FfiMMAARGetBufferSize(int64_t id,int32_t * errorCode)764 uint32_t FfiMMAARGetBufferSize(int64_t id, int32_t *errorCode)
765 {
766 auto renderer = FFIData::GetData<MMAAudioRendererImpl>(id);
767 if (renderer == nullptr) {
768 *errorCode = CJ_ERR_SYSTEM;
769 AUDIO_ERR_LOG("GetBufferSize failed, invalid id of AudioRenderer");
770 return CJ_ERR_INVALID_RETURN_VALUE;
771 }
772 return renderer->GetBufferSize(errorCode);
773 }
774
FfiMMAARFlush(int64_t id,int32_t * errorCode)775 void FfiMMAARFlush(int64_t id, int32_t *errorCode)
776 {
777 auto renderer = FFIData::GetData<MMAAudioRendererImpl>(id);
778 if (renderer == nullptr) {
779 *errorCode = CJ_ERR_SYSTEM;
780 AUDIO_ERR_LOG("Flush failed, invalid id of AudioRenderer");
781 return;
782 }
783 auto isSuccess = renderer->Flush();
784 if (isSuccess != SUCCESS_CODE) {
785 *errorCode = isSuccess;
786 }
787 }
788
FfiMMAARPause(int64_t id,int32_t * errorCode)789 void FfiMMAARPause(int64_t id, int32_t *errorCode)
790 {
791 auto renderer = FFIData::GetData<MMAAudioRendererImpl>(id);
792 if (renderer == nullptr) {
793 *errorCode = CJ_ERR_SYSTEM;
794 AUDIO_ERR_LOG("Pause failed, invalid id of AudioRenderer");
795 return;
796 }
797 auto isSuccess = renderer->Pause();
798 if (isSuccess != SUCCESS_CODE) {
799 *errorCode = isSuccess;
800 }
801 }
802
FfiMMAARDrain(int64_t id,int32_t * errorCode)803 void FfiMMAARDrain(int64_t id, int32_t *errorCode)
804 {
805 auto renderer = FFIData::GetData<MMAAudioRendererImpl>(id);
806 if (renderer == nullptr) {
807 *errorCode = CJ_ERR_SYSTEM;
808 AUDIO_ERR_LOG("Drain failed, invalid id of AudioRenderer");
809 return;
810 }
811 auto isSuccess = renderer->Drain();
812 if (isSuccess != SUCCESS_CODE) {
813 *errorCode = isSuccess;
814 }
815 }
816
FfiMMAARGetCurrentOutputDevices(int64_t id,int32_t * errorCode)817 CArrDeviceDescriptor FfiMMAARGetCurrentOutputDevices(int64_t id, int32_t *errorCode)
818 {
819 auto renderer = FFIData::GetData<MMAAudioRendererImpl>(id);
820 if (renderer == nullptr) {
821 AUDIO_ERR_LOG("GetCurrentOutputDevices failed, invalid id of AudioRenderer");
822 *errorCode = CJ_ERR_SYSTEM;
823 return CArrDeviceDescriptor();
824 }
825 return renderer->GetCurrentOutputDevices(errorCode);
826 }
827
FfiMMAARGetSpeed(int64_t id,int32_t * errorCode)828 double FfiMMAARGetSpeed(int64_t id, int32_t *errorCode)
829 {
830 auto renderer = FFIData::GetData<MMAAudioRendererImpl>(id);
831 if (renderer == nullptr) {
832 AUDIO_ERR_LOG("GetSpeed failed, invalid id of AudioRenderer");
833 *errorCode = CJ_ERR_SYSTEM;
834 return CJ_ERR_INVALID_RETURN_DOUBLE_VALUE;
835 }
836 return renderer->GetSpeed(errorCode);
837 }
838
FfiMMAARGetSilentModeAndMixWithOthers(int64_t id,int32_t * errorCode)839 bool FfiMMAARGetSilentModeAndMixWithOthers(int64_t id, int32_t *errorCode)
840 {
841 auto renderer = FFIData::GetData<MMAAudioRendererImpl>(id);
842 if (renderer == nullptr) {
843 AUDIO_ERR_LOG("GetSilentModeAndMixWithOthers failed, invalid id of AudioRenderer");
844 *errorCode = CJ_ERR_SYSTEM;
845 return false;
846 }
847 return renderer->GetSilentModeAndMixWithOthers(errorCode);
848 }
849
FfiMMAARGetVolume(int64_t id,int32_t * errorCode)850 double FfiMMAARGetVolume(int64_t id, int32_t *errorCode)
851 {
852 auto renderer = FFIData::GetData<MMAAudioRendererImpl>(id);
853 if (renderer == nullptr) {
854 AUDIO_ERR_LOG("GetVolume failed, invalid id of AudioRenderer");
855 *errorCode = CJ_ERR_SYSTEM;
856 return CJ_ERR_INVALID_RETURN_DOUBLE_VALUE;
857 }
858 return renderer->GetVolume(errorCode);
859 }
860
FfiMMAARGetUnderflowCount(int64_t id,int32_t * errorCode)861 uint32_t FfiMMAARGetUnderflowCount(int64_t id, int32_t *errorCode)
862 {
863 auto renderer = FFIData::GetData<MMAAudioRendererImpl>(id);
864 if (renderer == nullptr) {
865 AUDIO_ERR_LOG("GetUnderflowCount failed, invalid id of AudioRenderer");
866 *errorCode = CJ_ERR_SYSTEM;
867 return CJ_ERR_INVALID_RETURN_VALUE;
868 }
869 return renderer->GetUnderflowCount(errorCode);
870 }
871
FfiMMAARSetVolumeWithRamp(int64_t id,double volume,int32_t duration,int32_t * errorCode)872 void FfiMMAARSetVolumeWithRamp(int64_t id, double volume, int32_t duration, int32_t *errorCode)
873 {
874 auto renderer = FFIData::GetData<MMAAudioRendererImpl>(id);
875 if (renderer == nullptr) {
876 AUDIO_ERR_LOG("SetVolumeWithRamp failed, invalid id of AudioRenderer");
877 *errorCode = CJ_ERR_SYSTEM;
878 return;
879 }
880 renderer->SetVolumeWithRamp(volume, duration, errorCode);
881 }
882
FfiMMAARSetSpeed(int64_t id,double speed,int32_t * errorCode)883 void FfiMMAARSetSpeed(int64_t id, double speed, int32_t *errorCode)
884 {
885 auto renderer = FFIData::GetData<MMAAudioRendererImpl>(id);
886 if (renderer == nullptr) {
887 AUDIO_ERR_LOG("SetSpeed failed, invalid id of AudioRenderer");
888 *errorCode = CJ_ERR_SYSTEM;
889 return;
890 }
891 renderer->SetSpeed(speed, errorCode);
892 }
893
FfiMMAARSetVolume(int64_t id,double volume,int32_t * errorCode)894 void FfiMMAARSetVolume(int64_t id, double volume, int32_t *errorCode)
895 {
896 auto renderer = FFIData::GetData<MMAAudioRendererImpl>(id);
897 if (renderer == nullptr) {
898 AUDIO_ERR_LOG("SetVolume failed, invalid id of AudioRenderer");
899 *errorCode = CJ_ERR_SYSTEM;
900 return;
901 }
902 renderer->SetVolume(volume, errorCode);
903 }
904
FfiMMAARSetSilentModeAndMixWithOthers(int64_t id,bool on,int32_t * errorCode)905 void FfiMMAARSetSilentModeAndMixWithOthers(int64_t id, bool on, int32_t *errorCode)
906 {
907 auto renderer = FFIData::GetData<MMAAudioRendererImpl>(id);
908 if (renderer == nullptr) {
909 AUDIO_ERR_LOG("SetSilentModeAndMixWithOthers failed, invalid id of AudioRenderer");
910 *errorCode = CJ_ERR_SYSTEM;
911 return;
912 }
913 renderer->SetSilentModeAndMixWithOthers(on, errorCode);
914 }
915
FfiMMAARSetInterruptMode(int64_t id,int32_t mode,int32_t * errorCode)916 void FfiMMAARSetInterruptMode(int64_t id, int32_t mode, int32_t *errorCode)
917 {
918 auto renderer = FFIData::GetData<MMAAudioRendererImpl>(id);
919 if (renderer == nullptr) {
920 AUDIO_ERR_LOG("SetInterruptMode failed, invalid id of AudioRenderer");
921 *errorCode = CJ_ERR_SYSTEM;
922 return;
923 }
924 renderer->SetInterruptMode(mode, errorCode);
925 }
926
FfiMMAARSetChannelBlendMode(int64_t id,int32_t mode,int32_t * errorCode)927 void FfiMMAARSetChannelBlendMode(int64_t id, int32_t mode, int32_t *errorCode)
928 {
929 auto renderer = FFIData::GetData<MMAAudioRendererImpl>(id);
930 if (renderer == nullptr) {
931 AUDIO_ERR_LOG("SetInterruptMode failed, invalid id of AudioRenderer");
932 *errorCode = CJ_ERR_SYSTEM;
933 return;
934 }
935 renderer->SetChannelBlendMode(mode, errorCode);
936 }
937
FfiMMAAROnWithFrame(int64_t id,int32_t callbackType,void (* callback)(),int64_t frame,int32_t * errorCode)938 void FfiMMAAROnWithFrame(int64_t id, int32_t callbackType, void (*callback)(), int64_t frame, int32_t *errorCode)
939 {
940 auto renderer = FFIData::GetData<MMAAudioRendererImpl>(id);
941 if (renderer == nullptr) {
942 AUDIO_ERR_LOG("register failed, invalid id of AudioRenderer");
943 *errorCode = CJ_ERR_SYSTEM;
944 return;
945 }
946 renderer->RegisterCallbackWithFrame(callbackType, callback, frame, errorCode);
947 }
948
FfiMMAARGetAudioEffectMode(int64_t id,int32_t * errorCode)949 int32_t FfiMMAARGetAudioEffectMode(int64_t id, int32_t *errorCode)
950 {
951 auto renderer = FFIData::GetData<MMAAudioRendererImpl>(id);
952 if (!renderer) {
953 AUDIO_ERR_LOG("GetAudioEffectMode failed, invalid id of AudioRenderer");
954 *errorCode = CJ_ERR_SYSTEM;
955 return CJ_ERR_INVALID_RETURN_VALUE;
956 }
957 return renderer->GetAudioEffectMode(errorCode);
958 }
959
FfiMMAARSetAudioEffectMode(int64_t id,int32_t mode,int32_t * errorCode)960 void FfiMMAARSetAudioEffectMode(int64_t id, int32_t mode, int32_t *errorCode)
961 {
962 auto renderer = FFIData::GetData<MMAAudioRendererImpl>(id);
963 if (!renderer) {
964 AUDIO_ERR_LOG("SetAudioEffectMode failed, invalid id of AudioRenderer");
965 *errorCode = CJ_ERR_SYSTEM;
966 return;
967 }
968 return renderer->SetAudioEffectMode(mode, errorCode);
969 }
970
FfiMMAARGetMinStreamVolume(int64_t id,int32_t * errorCode)971 double FfiMMAARGetMinStreamVolume(int64_t id, int32_t *errorCode)
972 {
973 auto renderer = FFIData::GetData<MMAAudioRendererImpl>(id);
974 if (!renderer) {
975 AUDIO_ERR_LOG("GetMinStreamVolume failed, invalid id of AudioRenderer");
976 *errorCode = CJ_ERR_SYSTEM;
977 return CJ_ERR_INVALID_RETURN_DOUBLE_VALUE;
978 }
979 return renderer->GetMinStreamVolume(errorCode);
980 }
981
FfiMMAARGetMaxStreamVolume(int64_t id,int32_t * errorCode)982 double FfiMMAARGetMaxStreamVolume(int64_t id, int32_t *errorCode)
983 {
984 auto renderer = FFIData::GetData<MMAAudioRendererImpl>(id);
985 if (!renderer) {
986 AUDIO_ERR_LOG("GetMaxStreamVolume failed, invalid id of AudioRenderer");
987 *errorCode = CJ_ERR_SYSTEM;
988 return CJ_ERR_INVALID_RETURN_DOUBLE_VALUE;
989 }
990 return renderer->GetMaxStreamVolume(errorCode);
991 }
992
FfiMMAARRelease(int64_t id,int32_t * errorCode)993 void FfiMMAARRelease(int64_t id, int32_t *errorCode)
994 {
995 auto renderer = FFIData::GetData<MMAAudioRendererImpl>(id);
996 if (!renderer) {
997 AUDIO_ERR_LOG("Release failed, invalid id of AudioRenderer");
998 *errorCode = CJ_ERR_SYSTEM;
999 return;
1000 }
1001 return renderer->Release(errorCode);
1002 }
1003
FfiMMAARGetStreamId(int64_t id,int32_t * errorCode)1004 uint32_t FfiMMAARGetStreamId(int64_t id, int32_t *errorCode)
1005 {
1006 auto renderer = FFIData::GetData<MMAAudioRendererImpl>(id);
1007 if (!renderer) {
1008 AUDIO_ERR_LOG("GetStreamId failed, invalid id of AudioRenderer");
1009 *errorCode = CJ_ERR_SYSTEM;
1010 return CJ_ERR_INVALID_RETURN_VALUE;
1011 }
1012 return renderer->GetStreamId(errorCode);
1013 }
1014
FfiMMAARStop(int64_t id,int32_t * errorCode)1015 void FfiMMAARStop(int64_t id, int32_t *errorCode)
1016 {
1017 auto renderer = FFIData::GetData<MMAAudioRendererImpl>(id);
1018 if (!renderer) {
1019 AUDIO_ERR_LOG("Stop failed, invalid id of AudioRenderer");
1020 *errorCode = CJ_ERR_SYSTEM;
1021 return;
1022 }
1023 return renderer->Stop(errorCode);
1024 }
1025
FfiMMAARStart(int64_t id,int32_t * errorCode)1026 void FfiMMAARStart(int64_t id, int32_t *errorCode)
1027 {
1028 auto renderer = FFIData::GetData<MMAAudioRendererImpl>(id);
1029 if (!renderer) {
1030 AUDIO_ERR_LOG("Start failed, invalid id of AudioRenderer");
1031 *errorCode = CJ_ERR_SYSTEM;
1032 return;
1033 }
1034 return renderer->Start(errorCode);
1035 }
1036
FfiMMAARGetStreamInfo(int64_t id,int32_t * errorCode)1037 CAudioStreamInfo FfiMMAARGetStreamInfo(int64_t id, int32_t *errorCode)
1038 {
1039 auto renderer = FFIData::GetData<MMAAudioRendererImpl>(id);
1040 if (!renderer) {
1041 AUDIO_ERR_LOG("GetStreamInfo failed, invalid id of AudioRenderer");
1042 *errorCode = CJ_ERR_SYSTEM;
1043 return CAudioStreamInfo();
1044 }
1045 return renderer->GetStreamInfo(errorCode);
1046 }
1047
FfiMMAARGetRendererInfo(int64_t id,int32_t * errorCode)1048 CAudioRendererInfo FfiMMAARGetRendererInfo(int64_t id, int32_t *errorCode)
1049 {
1050 auto renderer = FFIData::GetData<MMAAudioRendererImpl>(id);
1051 if (!renderer) {
1052 AUDIO_ERR_LOG("GetRendererInfo failed, invalid id of AudioRenderer");
1053 *errorCode = CJ_ERR_SYSTEM;
1054 return CAudioRendererInfo();
1055 }
1056 return renderer->GetRendererInfo(errorCode);
1057 }
1058
FfiMMAAROn(int64_t id,int32_t callbackType,void (* callback)(),int32_t * errorCode)1059 void FfiMMAAROn(int64_t id, int32_t callbackType, void (*callback)(), int32_t *errorCode)
1060 {
1061 auto renderer = FFIData::GetData<MMAAudioRendererImpl>(id);
1062 if (renderer == nullptr) {
1063 AUDIO_ERR_LOG("register failed, invalid id of AudioRenderer");
1064 *errorCode = CJ_ERR_SYSTEM;
1065 return;
1066 }
1067 renderer->RegisterCallback(callbackType, callback, errorCode);
1068 }
1069 }
1070 } // namespace AudioStandard
1071 } // namespace OHOS
1072