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