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_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_routing_manager_callback.h"
23 #include "multimedia_audio_routing_manager_impl.h"
24 #include "multimedia_audio_stream_manager_callback.h"
25 #include "multimedia_audio_stream_manager_impl.h"
26 #include "multimedia_audio_volume_group_manager_impl.h"
27 #include "multimedia_audio_volume_manager_impl.h"
28 
29 using namespace OHOS::FFI;
30 
31 namespace OHOS {
32 namespace AudioStandard {
33 extern "C" {
34 // Audio Capturer
FfiMMACreateAudioCapturer(CAudioCapturerOptions options, int32_t *errorCode)35 int64_t FfiMMACreateAudioCapturer(CAudioCapturerOptions options, int32_t *errorCode)
36 {
37     auto capturer = FFIData::Create<MMAAudioCapturerImpl>();
38     if (!capturer) {
39         *errorCode = CJ_ERR_SYSTEM;
40         AUDIO_ERR_LOG("Create MMAAudioCapturerImpl error");
41         return CJ_ERR_INVALID_RETURN_VALUE;
42     }
43     auto ret = capturer->CreateAudioCapturer(options);
44     if (ret != SUCCESS_CODE) {
45         *errorCode = CJ_ERR_SYSTEM;
46         AUDIO_ERR_LOG("CreateAudioCapturer error");
47         return CJ_ERR_INVALID_RETURN_VALUE;
48     }
49     *errorCode = SUCCESS_CODE;
50     return capturer->GetID();
51 }
52 
FfiMMAAudioCapturerGetState(int64_t id, int32_t *errorCode)53 int32_t FfiMMAAudioCapturerGetState(int64_t id, int32_t *errorCode)
54 {
55     auto capturer = FFIData::GetData<MMAAudioCapturerImpl>(id);
56     if (!capturer) {
57         *errorCode = CJ_ERR_SYSTEM;
58         AUDIO_ERR_LOG("get state failed, invalid id of AudioCapturer");
59         return CJ_ERR_INVALID_RETURN_VALUE;
60     }
61     return capturer->GetState();
62 }
63 
FfiMMAAudioCapturerGetStreamId(int64_t id, int32_t *errorCode)64 uint32_t FfiMMAAudioCapturerGetStreamId(int64_t id, int32_t *errorCode)
65 {
66     auto capturer = FFIData::GetData<MMAAudioCapturerImpl>(id);
67     if (!capturer) {
68         *errorCode = CJ_ERR_SYSTEM;
69         AUDIO_ERR_LOG("get stream id failed, invalid id of AudioCapturer");
70         return CJ_ERR_INVALID_RETURN_VALUE;
71     }
72     return capturer->GetStreamId(errorCode);
73 }
74 
FfiMMAAudioCapturerGetAudioTime(int64_t id, int32_t *errorCode)75 int64_t FfiMMAAudioCapturerGetAudioTime(int64_t id, int32_t *errorCode)
76 {
77     auto capturer = FFIData::GetData<MMAAudioCapturerImpl>(id);
78     if (!capturer) {
79         *errorCode = CJ_ERR_SYSTEM;
80         AUDIO_ERR_LOG("get audio time failed, invalid id of AudioCapturer");
81         return CJ_ERR_INVALID_RETURN_VALUE;
82     }
83     return capturer->GetAudioTime(errorCode);
84 }
85 
FfiMMAAudioCapturerGetBufferSize(int64_t id, int32_t *errorCode)86 uint32_t FfiMMAAudioCapturerGetBufferSize(int64_t id, int32_t *errorCode)
87 {
88     auto capturer = FFIData::GetData<MMAAudioCapturerImpl>(id);
89     if (!capturer) {
90         *errorCode = CJ_ERR_SYSTEM;
91         AUDIO_ERR_LOG("get buffer size failed, invalid id of AudioCapturer");
92         return CJ_ERR_INVALID_RETURN_VALUE;
93     }
94     return capturer->GetBufferSize(errorCode);
95 }
96 
FfiMMAAudioCapturerGetOverflowCount(int64_t id, int32_t *errorCode)97 uint32_t FfiMMAAudioCapturerGetOverflowCount(int64_t id, int32_t *errorCode)
98 {
99     auto capturer = FFIData::GetData<MMAAudioCapturerImpl>(id);
100     if (!capturer) {
101         *errorCode = CJ_ERR_SYSTEM;
102         AUDIO_ERR_LOG("get OverflowCount failed, invalid id of AudioCapturer");
103         return CJ_ERR_INVALID_RETURN_VALUE;
104     }
105     return capturer->GetOverflowCount();
106 }
107 
FfiMMAAudioCapturerStart(int64_t id, int32_t *errorCode)108 void FfiMMAAudioCapturerStart(int64_t id, int32_t *errorCode)
109 {
110     auto capturer = FFIData::GetData<MMAAudioCapturerImpl>(id);
111     if (!capturer) {
112         AUDIO_ERR_LOG("AudioCapturer start failed, invalid id of AudioCapturer");
113         *errorCode = CJ_ERR_SYSTEM;
114     }
115     auto isSuccess = capturer->Start();
116     if (isSuccess != SUCCESS_CODE) {
117         *errorCode = isSuccess;
118     }
119 }
120 
FfiMMAAudioCapturerStop(int64_t id, int32_t *errorCode)121 void FfiMMAAudioCapturerStop(int64_t id, int32_t *errorCode)
122 {
123     auto capturer = FFIData::GetData<MMAAudioCapturerImpl>(id);
124     if (!capturer) {
125         AUDIO_ERR_LOG("AudioCapturer stop failed, invalid id of AudioCapturer");
126         *errorCode = CJ_ERR_SYSTEM;
127     }
128     auto isSuccess = capturer->Stop();
129     if (isSuccess != SUCCESS_CODE) {
130         *errorCode = isSuccess;
131     }
132 }
133 
FfiMMAAudioCapturerRelease(int64_t id, int32_t *errorCode)134 void FfiMMAAudioCapturerRelease(int64_t id, int32_t *errorCode)
135 {
136     auto capturer = FFIData::GetData<MMAAudioCapturerImpl>(id);
137     if (!capturer) {
138         AUDIO_ERR_LOG("AudioCapturer release failed, invalid id of AudioCapturer");
139         *errorCode = CJ_ERR_SYSTEM;
140     }
141     auto isSuccess = capturer->Release();
142     if (isSuccess != SUCCESS_CODE) {
143         *errorCode = isSuccess;
144     }
145 }
146 
FfiMMAAudioCapturerGetAudioCapturerChangeInfo(int64_t id, int32_t *errorCode)147 CAudioCapturerChangeInfo FfiMMAAudioCapturerGetAudioCapturerChangeInfo(int64_t id, int32_t *errorCode)
148 {
149     auto capturer = FFIData::GetData<MMAAudioCapturerImpl>(id);
150     if (!capturer) {
151         AUDIO_ERR_LOG("Get AudioCapturerChangeInfo failed, invalid id of AudioCapturer");
152         *errorCode = CJ_ERR_SYSTEM;
153         return CAudioCapturerChangeInfo();
154     }
155     auto info = capturer->GetAudioCapturerChangeInfo(errorCode);
156     return info;
157 }
158 
FfiMMAAudioCapturerGetInputDevices(int64_t id, int32_t *errorCode)159 CArrDeviceDescriptor FfiMMAAudioCapturerGetInputDevices(int64_t id, int32_t *errorCode)
160 {
161     auto capturer = FFIData::GetData<MMAAudioCapturerImpl>(id);
162     if (!capturer) {
163         AUDIO_ERR_LOG("Get InputDevices failed, invalid id of AudioCapturer");
164         *errorCode = CJ_ERR_SYSTEM;
165         return CArrDeviceDescriptor();
166     }
167     auto devices = capturer->GetInputDevices(errorCode);
168     return devices;
169 }
170 
FfiMMAAudioCapturerGetCapturerInfo(int64_t id, int32_t *errorCode)171 CAudioCapturerInfo FfiMMAAudioCapturerGetCapturerInfo(int64_t id, int32_t *errorCode)
172 {
173     auto capturer = FFIData::GetData<MMAAudioCapturerImpl>(id);
174     if (!capturer) {
175         AUDIO_ERR_LOG("Get AudioCapturerInfo failed, invalid id of AudioCapturer");
176         *errorCode = CJ_ERR_SYSTEM;
177         return CAudioCapturerInfo();
178     }
179     auto info = capturer->GetCurrentCapturerInfo(errorCode);
180     return info;
181 }
182 
FfiMMAAudioCapturerGetStreamInfo(int64_t id, int32_t *errorCode)183 CAudioStreamInfo FfiMMAAudioCapturerGetStreamInfo(int64_t id, int32_t *errorCode)
184 {
185     auto capturer = FFIData::GetData<MMAAudioCapturerImpl>(id);
186     if (!capturer) {
187         AUDIO_ERR_LOG("Get StreamInfo failed, invalid id of AudioCapturer");
188         *errorCode = CJ_ERR_SYSTEM;
189         return CAudioStreamInfo();
190     }
191     auto info = capturer->GetStreamInfo(errorCode);
192     return info;
193 }
194 
FfiMMAAudioCapturerOn(int64_t id, int32_t callbackType, void (*callback)(), int32_t *errorCode)195 void FfiMMAAudioCapturerOn(int64_t id, int32_t callbackType, void (*callback)(), int32_t *errorCode)
196 {
197     auto capturer = FFIData::GetData<MMAAudioCapturerImpl>(id);
198     if (!capturer) {
199         AUDIO_ERR_LOG("register failed, invalid id of AudioCapturer");
200         *errorCode = CJ_ERR_SYSTEM;
201     }
202     capturer->RegisterCallback(callbackType, callback, errorCode);
203 }
204 
FfiMMAAudioCapturerOnWithFrame(int64_t id, int32_t callbackType, void (*callback)(), int64_t frame, int32_t *errorCode)205 void FfiMMAAudioCapturerOnWithFrame(int64_t id, int32_t callbackType, void (*callback)(), int64_t frame,
206     int32_t *errorCode)
207 {
208     auto capturer = FFIData::GetData<MMAAudioCapturerImpl>(id);
209     if (!capturer) {
210         AUDIO_ERR_LOG("register failed, invalid id of AudioCapturer");
211         *errorCode = CJ_ERR_SYSTEM;
212     }
213     capturer->RegisterCallbackWithFrame(callbackType, callback, frame, errorCode);
214 }
215 
216 // Audio Manager
FfiMMACreateAudioManager(int32_t *errorCode)217 int64_t FfiMMACreateAudioManager(int32_t *errorCode)
218 {
219     auto mgr = FFIData::Create<MMAAudioManagerImpl>();
220     if (!mgr) {
221         *errorCode = CJ_ERR_SYSTEM;
222         AUDIO_ERR_LOG("Create AudioManager error");
223         return CJ_ERR_INVALID_RETURN_VALUE;
224     }
225     *errorCode = SUCCESS_CODE;
226     return mgr->GetID();
227 }
228 
FfiMMAAudioManagerGetRoutingManager(int64_t id, int32_t *errorCode)229 int64_t FfiMMAAudioManagerGetRoutingManager(int64_t id, int32_t *errorCode)
230 {
231     auto mgr = FFIData::GetData<MMAAudioManagerImpl>(id);
232     if (!mgr) {
233         AUDIO_ERR_LOG("Get RoutingManager failed, invalid id of AudioManager");
234         *errorCode = CJ_ERR_SYSTEM;
235         return CJ_ERR_INVALID_RETURN_VALUE;
236     }
237     return mgr->GetRoutingManager(errorCode);
238 }
239 
FfiMMAAudioManagerGetStreamManager(int64_t id, int32_t *errorCode)240 int64_t FfiMMAAudioManagerGetStreamManager(int64_t id, int32_t *errorCode)
241 {
242     auto mgr = FFIData::GetData<MMAAudioManagerImpl>(id);
243     if (!mgr) {
244         AUDIO_ERR_LOG("Get StreamManager failed, invalid id of AudioManager");
245         *errorCode = CJ_ERR_SYSTEM;
246         return CJ_ERR_INVALID_RETURN_VALUE;
247     }
248     return mgr->GetStreamManger(errorCode);
249 }
250 
FfiMMAAudioManagerGetAudioScene(int64_t id, int32_t *errorCode)251 int32_t FfiMMAAudioManagerGetAudioScene(int64_t id, int32_t *errorCode)
252 {
253     auto mgr = FFIData::GetData<MMAAudioManagerImpl>(id);
254     if (!mgr) {
255         AUDIO_ERR_LOG("Get AudioScene failed, invalid id of AudioManager");
256         *errorCode = CJ_ERR_SYSTEM;
257         return CJ_ERR_INVALID_RETURN_VALUE;
258     }
259     return mgr->GetAudioScene();
260 }
261 
FfiMMAAudioManagerGetVolumeManager(int64_t id, int32_t *errorCode)262 int64_t FfiMMAAudioManagerGetVolumeManager(int64_t id, int32_t *errorCode)
263 {
264     auto mgr = FFIData::GetData<MMAAudioManagerImpl>(id);
265     if (mgr == nullptr) {
266         *errorCode = CJ_ERR_SYSTEM;
267         AUDIO_ERR_LOG("FfiMMAAudioManagerGetVolumeManager failed.");
268         return CJ_ERR_INVALID_RETURN_VALUE;
269     }
270     *errorCode = SUCCESS_CODE;
271     return mgr->GetVolumeManager(errorCode);
272 }
273 
274 // Audio Stream Manager
FfiMMAASMIsActive(int64_t id, int32_t volumeType, int32_t *errorCode)275 bool FfiMMAASMIsActive(int64_t id, int32_t volumeType, int32_t *errorCode)
276 {
277     auto mgr = FFIData::GetData<MMAAudioStreamManagerImpl>(id);
278     if (!mgr) {
279         AUDIO_ERR_LOG("IsActive failed, invalid id of AudioStreamManager");
280         *errorCode = CJ_ERR_SYSTEM;
281         return false;
282     }
283     return mgr->IsActive(volumeType);
284 }
285 
FfiMMAASMGetCurrentAudioCapturerInfoArray(int64_t id, int32_t *errorCode)286 CArrAudioCapturerChangeInfo FfiMMAASMGetCurrentAudioCapturerInfoArray(int64_t id, int32_t *errorCode)
287 {
288     auto mgr = FFIData::GetData<MMAAudioStreamManagerImpl>(id);
289     if (!mgr) {
290         AUDIO_ERR_LOG("Get CurrentAudioCapturerInfoArray failed, invalid id of AudioStreamManager");
291         *errorCode = CJ_ERR_SYSTEM;
292         return CArrAudioCapturerChangeInfo();
293     }
294     return mgr->GetAudioCapturerInfoArray(errorCode);
295 }
296 
FfiMMAASMGetAudioEffectInfoArray(int64_t id, int32_t usage, int32_t *errorCode)297 CArrI32 FfiMMAASMGetAudioEffectInfoArray(int64_t id, int32_t usage, int32_t *errorCode)
298 {
299     auto mgr = FFIData::GetData<MMAAudioStreamManagerImpl>(id);
300     if (!mgr) {
301         AUDIO_ERR_LOG("Get AudioEffectInfoArray failed, invalid id of AudioStreamManager");
302         *errorCode = CJ_ERR_SYSTEM;
303         return CArrI32();
304     }
305     return mgr->GetAudioEffectInfoArray(usage, errorCode);
306 }
307 
FfiMMAASMOn(int64_t id, int32_t callbackType, void (*callback)(), int32_t *errorCode)308 void FfiMMAASMOn(int64_t id, int32_t callbackType, void (*callback)(), int32_t *errorCode)
309 {
310     auto mgr = FFIData::GetData<MMAAudioStreamManagerImpl>(id);
311     if (!mgr) {
312         AUDIO_ERR_LOG("register failed, invalid id of AudioStreamManager");
313         *errorCode = CJ_ERR_SYSTEM;
314     }
315     mgr->RegisterCallback(callbackType, callback, errorCode);
316 }
317 
318 // Audio Routing Manager
FfiMMAARMSetCommunicationDevice(int64_t id, int32_t deviceType, bool active, int32_t *errorCode)319 void FfiMMAARMSetCommunicationDevice(int64_t id, int32_t deviceType, bool active, int32_t *errorCode)
320 {
321     auto mgr = FFIData::GetData<MMAAudioRoutingManagerImpl>(id);
322     if (!mgr) {
323         AUDIO_ERR_LOG("SetCommunicationDevice failed, invalid id of AudioRoutingManager");
324         *errorCode = CJ_ERR_SYSTEM;
325     }
326     *errorCode = mgr->SetCommunicationDevice(deviceType, active);
327 }
328 
FfiMMAARMIsCommunicationDeviceActive(int64_t id, int32_t deviceType, int32_t *errorCode)329 bool FfiMMAARMIsCommunicationDeviceActive(int64_t id, int32_t deviceType, int32_t *errorCode)
330 {
331     auto mgr = FFIData::GetData<MMAAudioRoutingManagerImpl>(id);
332     if (!mgr) {
333         AUDIO_ERR_LOG("IsCommunicationDeviceActive failed, invalid id of AudioRoutingManager");
334         *errorCode = CJ_ERR_SYSTEM;
335         return false;
336     }
337     return mgr->IsCommunicationDeviceActive(deviceType);
338 }
339 
FfiMMAARMGetDevices(int64_t id, int32_t deviceFlag, int32_t *errorCode)340 CArrDeviceDescriptor FfiMMAARMGetDevices(int64_t id, int32_t deviceFlag, int32_t *errorCode)
341 {
342     auto mgr = FFIData::GetData<MMAAudioRoutingManagerImpl>(id);
343     if (!mgr) {
344         AUDIO_ERR_LOG("GetDevices failed, invalid id of AudioRoutingManager");
345         *errorCode = CJ_ERR_SYSTEM;
346         return CArrDeviceDescriptor();
347     }
348     return mgr->GetDevices(deviceFlag, errorCode);
349 }
350 
FfiMMAARMGetPreferredInputDeviceForCapturerInfo(int64_t id, CAudioCapturerInfo capturerInfo, int32_t *errorCode)351 CArrDeviceDescriptor FfiMMAARMGetPreferredInputDeviceForCapturerInfo(int64_t id, CAudioCapturerInfo capturerInfo,
352     int32_t *errorCode)
353 {
354     auto mgr = FFIData::GetData<MMAAudioRoutingManagerImpl>(id);
355     if (!mgr) {
356         AUDIO_ERR_LOG("GetPreferredInputDeviceForCapturerInfo failed, invalid id of AudioRoutingManager");
357         *errorCode = CJ_ERR_SYSTEM;
358         return CArrDeviceDescriptor();
359     }
360     return mgr->GetPreferredInputDeviceForCapturerInfo(capturerInfo, errorCode);
361 }
362 
FfiMMAARMOn(int64_t id, int32_t callbackType, void (*callback)(), int32_t *errorCode)363 void FfiMMAARMOn(int64_t id, int32_t callbackType, void (*callback)(), int32_t *errorCode)
364 {
365     auto mgr = FFIData::GetData<MMAAudioRoutingManagerImpl>(id);
366     if (!mgr) {
367         AUDIO_ERR_LOG("register failed, invalid id of AudioRoutingManager");
368         *errorCode = CJ_ERR_SYSTEM;
369     }
370     mgr->RegisterCallback(callbackType, callback, errorCode);
371 }
372 
FfiMMAARMOnWithFlags(int64_t id, int32_t callbackType, void (*callback)(), int32_t flags, int32_t *errorCode)373 void FfiMMAARMOnWithFlags(int64_t id, int32_t callbackType, void (*callback)(), int32_t flags, int32_t *errorCode)
374 {
375     auto mgr = FFIData::GetData<MMAAudioRoutingManagerImpl>(id);
376     if (!mgr) {
377         AUDIO_ERR_LOG("register failed, invalid id of AudioRoutingManager");
378         *errorCode = CJ_ERR_SYSTEM;
379     }
380     mgr->RegisterDeviceChangeCallback(callbackType, callback, flags, errorCode);
381 }
382 
FfiMMAARMWOnithCapturerInfo(int64_t id, int32_t callbackType, void (*callback)(), CAudioCapturerInfo capturerInfo, int32_t *errorCode)383 void FfiMMAARMWOnithCapturerInfo(int64_t id, int32_t callbackType, void (*callback)(), CAudioCapturerInfo capturerInfo,
384     int32_t *errorCode)
385 {
386     auto mgr = FFIData::GetData<MMAAudioRoutingManagerImpl>(id);
387     if (!mgr) {
388         AUDIO_ERR_LOG("register failed, invalid id of AudioRoutingManager");
389         *errorCode = CJ_ERR_SYSTEM;
390     }
391     mgr->RegisterPreferredInputDeviceChangeCallback(callbackType, callback, capturerInfo, errorCode);
392 }
393 
394 /* Audio Volume Manager */
FfiMMAAVMGetVolumeGroupManager(int64_t id, int32_t groupId, int32_t *errorCode)395 int64_t FfiMMAAVMGetVolumeGroupManager(int64_t id, int32_t groupId, int32_t *errorCode)
396 {
397     auto mgr = FFIData::GetData<MMAAudioVolumeManagerImpl>(id);
398     if (mgr == nullptr) {
399         *errorCode = CJ_ERR_SYSTEM;
400         AUDIO_ERR_LOG("FfiMMAAVMGetVolumeGroupManager failed.");
401         return CJ_ERR_INVALID_RETURN_VALUE;
402     }
403     *errorCode = SUCCESS_CODE;
404     return mgr->GetVolumeGroupManager(groupId, errorCode);
405 }
406 
407 /* Audio Volumne Group Manager */
FfiMMAAVGMGetMaxVolume(int64_t id, int32_t volumeType, int32_t *errorCode)408 int32_t FfiMMAAVGMGetMaxVolume(int64_t id, int32_t volumeType, int32_t *errorCode)
409 {
410     auto inst = FFIData::GetData<MMAAudioVolumeGroupManagerImpl>(id);
411     if (inst == nullptr) {
412         *errorCode = CJ_ERR_SYSTEM;
413         AUDIO_ERR_LOG("FfiMMAAVGMGetMaxVolume error");
414         return CJ_ERR_INVALID_RETURN_VALUE;
415     }
416     *errorCode = SUCCESS_CODE;
417     return inst->GetMaxVolume(volumeType);
418 }
419 
FfiMMAAVGMGetMinVolume(int64_t id, int32_t volumeType, int32_t *errorCode)420 int32_t FfiMMAAVGMGetMinVolume(int64_t id, int32_t volumeType, int32_t *errorCode)
421 {
422     auto inst = FFIData::GetData<MMAAudioVolumeGroupManagerImpl>(id);
423     if (inst == nullptr) {
424         *errorCode = CJ_ERR_SYSTEM;
425         AUDIO_ERR_LOG("FfiMMAAVGMGetMinVolume error");
426         return CJ_ERR_INVALID_RETURN_VALUE;
427     }
428     *errorCode = SUCCESS_CODE;
429     return inst->GetMinVolume(volumeType);
430 }
431 
FfiMMAAVGMGetRingerMode(int64_t id, int32_t *errorCode)432 int32_t FfiMMAAVGMGetRingerMode(int64_t id, int32_t *errorCode)
433 {
434     auto inst = FFIData::GetData<MMAAudioVolumeGroupManagerImpl>(id);
435     if (inst == nullptr) {
436         *errorCode = CJ_ERR_SYSTEM;
437         AUDIO_ERR_LOG("FfiMMAAVGMGetRingerMode error");
438         return CJ_ERR_INVALID_RETURN_VALUE;
439     }
440     *errorCode = SUCCESS_CODE;
441     return inst->GetRingerMode();
442 }
443 
FfiMMAAVGMGetSystemVolumeInDb(int64_t id, int32_t volumeType, int32_t volumeLevel, int32_t device, int32_t *errorCode)444 float FfiMMAAVGMGetSystemVolumeInDb(int64_t id, int32_t volumeType, int32_t volumeLevel, int32_t device,
445     int32_t *errorCode)
446 {
447     auto inst = FFIData::GetData<MMAAudioVolumeGroupManagerImpl>(id);
448     if (inst == nullptr) {
449         *errorCode = CJ_ERR_SYSTEM;
450         AUDIO_ERR_LOG("FfiMMAAVGMGetSystemVolumeInDb error");
451         return CJ_ERR_INVALID_RETURN_VALUE;
452     }
453     *errorCode = SUCCESS_CODE;
454     return inst->GetSystemVolumeInDb(volumeType, volumeLevel, device);
455 }
456 
FfiMMAAVGMGetVolume(int64_t id, int32_t volumeType, int32_t *errorCode)457 int32_t FfiMMAAVGMGetVolume(int64_t id, int32_t volumeType, int32_t *errorCode)
458 {
459     auto inst = FFIData::GetData<MMAAudioVolumeGroupManagerImpl>(id);
460     if (inst == nullptr) {
461         *errorCode = CJ_ERR_SYSTEM;
462         AUDIO_ERR_LOG("FfiMMAAVGMGetVolume error");
463         return CJ_ERR_INVALID_RETURN_VALUE;
464     }
465     *errorCode = SUCCESS_CODE;
466     return inst->GetVolume(volumeType);
467 }
468 
FfiMMAAVGMIsMicrophoneMute(int64_t id, int32_t *errorCode)469 bool FfiMMAAVGMIsMicrophoneMute(int64_t id, int32_t *errorCode)
470 {
471     auto inst = FFIData::GetData<MMAAudioVolumeGroupManagerImpl>(id);
472     if (inst == nullptr) {
473         *errorCode = CJ_ERR_SYSTEM;
474         AUDIO_ERR_LOG("Get FfiMMAAVGMIsMicrophoneMute error");
475         return CJ_ERR_INVALID_RETURN_VALUE;
476     }
477     *errorCode = SUCCESS_CODE;
478     return inst->IsMicrophoneMute();
479 }
480 
FfiMMAAVGMIsMute(int64_t id, int32_t volumeType, int32_t *errorCode)481 bool FfiMMAAVGMIsMute(int64_t id, int32_t volumeType, int32_t *errorCode)
482 {
483     auto inst = FFIData::GetData<MMAAudioVolumeGroupManagerImpl>(id);
484     if (inst == nullptr) {
485         *errorCode = CJ_ERR_SYSTEM;
486         AUDIO_ERR_LOG("Get FfiMMAAVGMIsMute error");
487         return CJ_ERR_INVALID_RETURN_VALUE;
488     }
489     *errorCode = SUCCESS_CODE;
490     return inst->IsMute(volumeType);
491 }
492 
FfiMMAAVGMIsVolumeUnadjustable(int64_t id, int32_t *errorCode)493 bool FfiMMAAVGMIsVolumeUnadjustable(int64_t id, int32_t *errorCode)
494 {
495     auto inst = FFIData::GetData<MMAAudioVolumeGroupManagerImpl>(id);
496     if (inst == nullptr) {
497         *errorCode = CJ_ERR_SYSTEM;
498         AUDIO_ERR_LOG("Get FfiMMAAVGMIsVolumeUnadjustable error");
499         return CJ_ERR_INVALID_RETURN_VALUE;
500     }
501     *errorCode = SUCCESS_CODE;
502     return inst->IsVolumeUnadjustable();
503 }
504 }
505 } // namespace AudioStandard
506 } // namespace OHOS
507