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