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