• 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 "camera_ffi.h"
17 
18 using namespace OHOS::FFI;
19 
20 namespace OHOS {
21 namespace CameraStandard {
22 
23 extern "C" {
FfiCameraManagerConstructor()24 int64_t FfiCameraManagerConstructor()
25 {
26     auto cameraManagerImpl = FFIData::Create<CJCameraManager>();
27     if (cameraManagerImpl == nullptr) {
28         return -1;
29     }
30     return cameraManagerImpl->GetID();
31 }
32 
FfiCameraManagerGetSupportedSceneModes(int64_t id,CJCameraDevice cameraDevice,int32_t * errCode)33 CArrI32 FfiCameraManagerGetSupportedSceneModes(int64_t id, CJCameraDevice cameraDevice, int32_t *errCode)
34 {
35     auto cameraManagerImpl = FFIData::GetData<CJCameraManager>(id);
36     if (cameraManagerImpl == nullptr) {
37         *errCode = CameraError::CAMERA_SERVICE_ERROR;
38         return CArrI32{0};
39     }
40     std::string cameraId = std::string(cameraDevice.cameraId);
41     return cameraManagerImpl->GetSupportedSceneModes(cameraId, errCode);
42 }
43 
FfiCameraManagerGetSupportedCameras(int64_t id,int32_t * errCode)44 CArrCJCameraDevice FfiCameraManagerGetSupportedCameras(int64_t id, int32_t *errCode)
45 {
46     auto cameraManagerImpl = FFIData::GetData<CJCameraManager>(id);
47     if (cameraManagerImpl == nullptr) {
48         *errCode = CameraError::CAMERA_SERVICE_ERROR;
49         return CArrCJCameraDevice{0};
50     }
51     return cameraManagerImpl->GetSupportedCameras(errCode);
52 }
53 
FfiCameraManagerGetSupportedOutputCapability(int64_t id,CJCameraDevice cameraDevice,int32_t modeType,int32_t * errCode)54 CJCameraOutputCapability FfiCameraManagerGetSupportedOutputCapability(int64_t id, CJCameraDevice cameraDevice,
55                                                                       int32_t modeType, int32_t *errCode)
56 {
57     auto cameraManagerImpl = FFIData::GetData<CJCameraManager>(id);
58     if (cameraManagerImpl == nullptr) {
59         *errCode = CameraError::CAMERA_SERVICE_ERROR;
60         return CJCameraOutputCapability{CArrCJProfile{0}, CArrCJProfile{0}, CArrCJVideoProfile{0}, CArrI32{0}};
61     }
62     std::string cameraId = std::string(cameraDevice.cameraId);
63     sptr<CameraDevice> cameraInfo = cameraManagerImpl->GetCameraDeviceById(cameraId);
64     if (cameraInfo == nullptr) {
65         *errCode = CameraError::INVALID_PARAM;
66         return CJCameraOutputCapability{CArrCJProfile{0}, CArrCJProfile{0}, CArrCJVideoProfile{0}, CArrI32{0}};
67     }
68     sptr<CameraOutputCapability> cameraOutputCapability =
69         cameraManagerImpl->GetSupportedOutputCapability(cameraInfo, modeType);
70     return CameraOutputCapabilityToCJCameraOutputCapability(cameraOutputCapability, errCode);
71 }
72 
FfiCameraManagerIsCameraMuted()73 bool FfiCameraManagerIsCameraMuted()
74 {
75     return CJCameraManager::IsCameraMuted();
76 }
77 
FfiCameraManagerCreateCameraInputWithCameraDevice(int64_t id,CJCameraDevice cameraDevice,int32_t * errCode)78 int64_t FfiCameraManagerCreateCameraInputWithCameraDevice(int64_t id, CJCameraDevice cameraDevice, int32_t *errCode)
79 {
80     auto cameraManagerImpl = FFIData::GetData<CJCameraManager>(id);
81     if (cameraManagerImpl == nullptr) {
82         *errCode = CameraError::CAMERA_SERVICE_ERROR;
83         return -1;
84     }
85 
86     std::string cameraId = std::string(cameraDevice.cameraId);
87     sptr<CameraDevice> cameraInfo = cameraManagerImpl->GetCameraDeviceById(cameraId);
88     if (cameraInfo == nullptr) {
89         *errCode = CameraError::INVALID_PARAM;
90         return -1;
91     }
92     sptr<CameraInput> cameraInput = nullptr;
93     *errCode = cameraManagerImpl->CreateCameraInputWithCameraDevice(cameraInfo, &cameraInput);
94     if (*errCode != CameraError::NO_ERROR) {
95         return -1;
96     }
97     auto cameraInputImpl = FFIData::Create<CJCameraInput>(cameraInput);
98     if (cameraInputImpl == nullptr) {
99         *errCode = CameraError::CAMERA_SERVICE_ERROR;
100         return -1;
101     }
102 
103     return cameraInputImpl->GetID();
104 }
105 
FfiCameraManagerCreateCameraInputWithCameraDeviceInfo(int64_t id,int32_t cameraPosition,int32_t cameraType,int32_t * errCode)106 int64_t FfiCameraManagerCreateCameraInputWithCameraDeviceInfo(int64_t id, int32_t cameraPosition, int32_t cameraType,
107                                                               int32_t *errCode)
108 {
109     sptr<CameraInput> cameraInput = nullptr;
110     auto cameraManagerImpl = FFIData::GetData<CJCameraManager>(id);
111     if (cameraManagerImpl == nullptr) {
112         *errCode = CameraError::CAMERA_SERVICE_ERROR;
113         return -1;
114     }
115 
116     *errCode = cameraManagerImpl->CreateCameraInputWithCameraDeviceInfo(
117         static_cast<const CameraPosition>(cameraPosition), static_cast<const CameraType>(cameraType), &cameraInput);
118     if (*errCode != CameraError::NO_ERROR) {
119         return -1;
120     }
121     auto cameraInputImpl = FFIData::Create<CJCameraInput>(cameraInput);
122     if (cameraInputImpl == nullptr) {
123         *errCode = CameraError::CAMERA_SERVICE_ERROR;
124         return -1;
125     }
126 
127     return cameraInputImpl->GetID();
128 }
129 
FfiCameraManagerCreatePreviewOutput(CJProfile profile,const char * surfaceId,int32_t * errCode)130 int64_t FfiCameraManagerCreatePreviewOutput(CJProfile profile, const char *surfaceId, int32_t *errCode)
131 {
132     std::string surfaceId_s = std::string(surfaceId);
133     Size size = {profile.width, profile.height};
134     Profile c_Profile(CameraFormat(profile.format), size);
135 
136     *errCode = CJPreviewOutput::CreatePreviewOutput(c_Profile, surfaceId_s);
137     if (*errCode == CameraError::CAMERA_SERVICE_ERROR) {
138         return -1;
139     }
140 
141     auto previewOutputImpl = FFIData::Create<CJPreviewOutput>();
142     if (previewOutputImpl == nullptr) {
143         *errCode = CameraError::CAMERA_SERVICE_ERROR;
144         return -1;
145     }
146     *errCode = CameraError::NO_ERROR;
147     return previewOutputImpl->GetID();
148 }
149 
FfiCameraManagerCreatePreviewOutputWithoutProfile(const char * surfaceId,int32_t * errCode)150 int64_t FfiCameraManagerCreatePreviewOutputWithoutProfile(const char *surfaceId, int32_t *errCode)
151 {
152     std::string surfaceId_s = std::string(surfaceId);
153     *errCode = CJPreviewOutput::CreatePreviewOutputWithoutProfile(surfaceId_s);
154     if (*errCode != CameraError::NO_ERROR) {
155         return -1;
156     }
157 
158     auto previewOutputImpl = FFIData::Create<CJPreviewOutput>();
159     if (previewOutputImpl == nullptr) {
160         *errCode = CameraError::CAMERA_SERVICE_ERROR;
161         return -1;
162     }
163     return previewOutputImpl->GetID();
164 }
165 
FfiCameraManagerCreatePhotoOutput(int32_t * errCode)166 int64_t FfiCameraManagerCreatePhotoOutput(int32_t *errCode)
167 {
168     *errCode = CJPhotoOutput::CreatePhotoOutput();
169     if (*errCode != CameraError::NO_ERROR) {
170         return -1;
171     }
172 
173     auto photoOutputImpl = FFIData::Create<CJPhotoOutput>();
174     if (photoOutputImpl == nullptr) {
175         *errCode = CameraError::CAMERA_SERVICE_ERROR;
176         return -1;
177     }
178     return photoOutputImpl->GetID();
179 }
180 
FfiCameraManagerCreatePhotoOutputWithProfile(CJProfile profile,int32_t * errCode)181 int64_t FfiCameraManagerCreatePhotoOutputWithProfile(CJProfile profile, int32_t *errCode)
182 {
183     Size size = {profile.width, profile.height};
184     Profile c_Profile(CameraFormat(profile.format), size);
185 
186     *errCode = CJPhotoOutput::CreatePhotoOutputWithProfile(c_Profile);
187     if (*errCode != CameraError::NO_ERROR) {
188         return -1;
189     }
190 
191     auto photoOutputImpl = FFIData::Create<CJPhotoOutput>();
192     if (photoOutputImpl == nullptr) {
193         *errCode = CameraError::CAMERA_SERVICE_ERROR;
194         return -1;
195     }
196     return photoOutputImpl->GetID();
197 }
198 
FfiCameraManagerCreateVideoOutput(CJVideoProfile profile,char * surfaceId,int32_t * errCode)199 int64_t FfiCameraManagerCreateVideoOutput(CJVideoProfile profile, char *surfaceId, int32_t *errCode)
200 {
201     Size size = {profile.width, profile.height};
202     std::vector<int32_t> framerates = {profile.frameRateRange.min, profile.frameRateRange.max};
203     VideoProfile videoProfile = VideoProfile(CameraFormat(profile.format), size, framerates);
204 
205     *errCode = CJVideoOutput::CreateVideoOutput(videoProfile, surfaceId);
206     if (*errCode != CameraError::NO_ERROR) {
207         return -1;
208     }
209 
210     auto videoOutputImpl = FFIData::Create<CJVideoOutput>();
211     if (videoOutputImpl == nullptr) {
212         *errCode = CameraError::CAMERA_SERVICE_ERROR;
213         return -1;
214     }
215     return videoOutputImpl->GetID();
216 }
217 
FfiCameraManagerCreateVideoOutputWithOutProfile(char * surfaceId,int32_t * errCode)218 int64_t FfiCameraManagerCreateVideoOutputWithOutProfile(char *surfaceId, int32_t *errCode)
219 {
220     *errCode = CJVideoOutput::CreateVideoOutputWithOutProfile(surfaceId);
221     if (*errCode != CameraError::NO_ERROR) {
222         return -1;
223     }
224 
225     auto videoOutputImpl = FFIData::Create<CJVideoOutput>();
226     if (videoOutputImpl == nullptr) {
227         *errCode = CameraError::CAMERA_SERVICE_ERROR;
228         return -1;
229     }
230     return videoOutputImpl->GetID();
231 }
232 
FfiCameraManagerCreateMetadataOutput(CArrI32 metadataObjectTypes,int32_t * errCode)233 int64_t FfiCameraManagerCreateMetadataOutput(CArrI32 metadataObjectTypes, int32_t *errCode)
234 {
235     std::vector<MetadataObjectType> vec;
236     for (int32_t i = 0; i < metadataObjectTypes.size; i++) {
237         vec.push_back(static_cast<MetadataObjectType>(metadataObjectTypes.head[i]));
238     }
239     *errCode = CJMetadataOutput::CreateMetadataOutput(vec);
240     if (*errCode != CameraError::NO_ERROR) {
241         return -1;
242     }
243 
244     auto metadataOutputImpl = FFIData::Create<CJMetadataOutput>();
245     if (metadataOutputImpl == nullptr) {
246         *errCode = CameraError::CAMERA_SERVICE_ERROR;
247         return -1;
248     }
249     return metadataOutputImpl->GetID();
250 }
251 
FfiCameraManagerCreateSession(int32_t mode,int32_t * errCode)252 int64_t FfiCameraManagerCreateSession(int32_t mode, int32_t *errCode)
253 {
254     auto cameraSession_ = CJCameraManager::CreateSession(mode);
255     if (cameraSession_ == nullptr) {
256         MEDIA_ERR_LOG("Failed to create Video session instance");
257         *errCode = SERVICE_FATL_ERROR;
258         return -1;
259     }
260     auto session = FFIData::Create<CJSession>(cameraSession_);
261     if (session == nullptr) {
262         *errCode = CameraError::CAMERA_SERVICE_ERROR;
263         return -1;
264     }
265     return session->GetID();
266 }
267 
FfiCameraManagerIsTorchSupported()268 bool FfiCameraManagerIsTorchSupported()
269 {
270     return CJCameraManager::IsTorchSupported();
271 }
272 
FfiCameraManagerIsTorchModeSupported(int32_t modeType)273 bool FfiCameraManagerIsTorchModeSupported(int32_t modeType)
274 {
275     return CJCameraManager::IsTorchModeSupported(modeType);
276 }
277 
FfiCameraManagerGetTorchMode()278 int32_t FfiCameraManagerGetTorchMode()
279 {
280     return CJCameraManager::GetTorchMode();
281 }
282 
FfiCameraManagerSetTorchMode(int32_t modeType)283 int32_t FfiCameraManagerSetTorchMode(int32_t modeType)
284 {
285     return CJCameraManager::SetTorchMode(modeType);
286 }
287 
FfiCameraManagerOnCameraStatusChanged(int64_t id,int64_t callbackId)288 int32_t FfiCameraManagerOnCameraStatusChanged(int64_t id, int64_t callbackId)
289 {
290     auto cameraManagerImpl = FFIData::GetData<CJCameraManager>(id);
291     if (cameraManagerImpl == nullptr) {
292         return CameraError::CAMERA_SERVICE_ERROR;
293     }
294     cameraManagerImpl->OnCameraStatusChanged(callbackId);
295     return CameraError::NO_ERROR;
296 }
297 
FfiCameraManagerOffCameraStatusChanged(int64_t id,int64_t callbackId)298 int32_t FfiCameraManagerOffCameraStatusChanged(int64_t id, int64_t callbackId)
299 {
300     auto cameraManagerImpl = FFIData::GetData<CJCameraManager>(id);
301     if (cameraManagerImpl == nullptr) {
302         return CameraError::CAMERA_SERVICE_ERROR;
303     }
304     cameraManagerImpl->OffCameraStatusChanged(callbackId);
305     return CameraError::NO_ERROR;
306 }
307 
FfiCameraManagerOffAllCameraStatusChanged(int64_t id)308 int32_t FfiCameraManagerOffAllCameraStatusChanged(int64_t id)
309 {
310     auto cameraManagerImpl = FFIData::GetData<CJCameraManager>(id);
311     if (cameraManagerImpl == nullptr) {
312         return CameraError::CAMERA_SERVICE_ERROR;
313     }
314     cameraManagerImpl->OffAllCameraStatusChanged();
315     return CameraError::NO_ERROR;
316 }
317 
FfiCameraManagerOnFoldStatusChanged(int64_t id,int64_t callbackId)318 int32_t FfiCameraManagerOnFoldStatusChanged(int64_t id, int64_t callbackId)
319 {
320     auto cameraManagerImpl = FFIData::GetData<CJCameraManager>(id);
321     if (cameraManagerImpl == nullptr) {
322         return CameraError::CAMERA_SERVICE_ERROR;
323     }
324     cameraManagerImpl->OnFoldStatusChanged(callbackId);
325     return CameraError::NO_ERROR;
326 }
327 
FfiCameraManagerOffFoldStatusChanged(int64_t id,int64_t callbackId)328 int32_t FfiCameraManagerOffFoldStatusChanged(int64_t id, int64_t callbackId)
329 {
330     auto cameraManagerImpl = FFIData::GetData<CJCameraManager>(id);
331     if (cameraManagerImpl == nullptr) {
332         return CameraError::CAMERA_SERVICE_ERROR;
333     }
334     cameraManagerImpl->OffFoldStatusChanged(callbackId);
335     return CameraError::NO_ERROR;
336 }
337 
FfiCameraManagerOffAllFoldStatusChanged(int64_t id)338 int32_t FfiCameraManagerOffAllFoldStatusChanged(int64_t id)
339 {
340     auto cameraManagerImpl = FFIData::GetData<CJCameraManager>(id);
341     if (cameraManagerImpl == nullptr) {
342         return CameraError::CAMERA_SERVICE_ERROR;
343     }
344     cameraManagerImpl->OffAllFoldStatusChanged();
345     return CameraError::NO_ERROR;
346 }
347 
FfiCameraManagerOnTorchStatusChange(int64_t id,int64_t callbackId)348 int32_t FfiCameraManagerOnTorchStatusChange(int64_t id, int64_t callbackId)
349 {
350     auto cameraManagerImpl = FFIData::GetData<CJCameraManager>(id);
351     if (cameraManagerImpl == nullptr) {
352         return CameraError::CAMERA_SERVICE_ERROR;
353     }
354     cameraManagerImpl->OnTorchStatusChange(callbackId);
355     return CameraError::NO_ERROR;
356 }
357 
FfiCameraManagerOffTorchStatusChange(int64_t id,int64_t callbackId)358 int32_t FfiCameraManagerOffTorchStatusChange(int64_t id, int64_t callbackId)
359 {
360     auto cameraManagerImpl = FFIData::GetData<CJCameraManager>(id);
361     if (cameraManagerImpl == nullptr) {
362         return CameraError::CAMERA_SERVICE_ERROR;
363     }
364     cameraManagerImpl->OffTorchStatusChange(callbackId);
365     return CameraError::NO_ERROR;
366 }
367 
FfiCameraManagerOffAllTorchStatusChange(int64_t id)368 int32_t FfiCameraManagerOffAllTorchStatusChange(int64_t id)
369 {
370     auto cameraManagerImpl = FFIData::GetData<CJCameraManager>(id);
371     if (cameraManagerImpl == nullptr) {
372         return CameraError::CAMERA_SERVICE_ERROR;
373     }
374     cameraManagerImpl->OffAllTorchStatusChange();
375     return CameraError::NO_ERROR;
376 }
377 
FfiCameraInputOpen(int64_t id)378 int32_t FfiCameraInputOpen(int64_t id)
379 {
380     auto instance = FFIData::GetData<CJCameraInput>(id);
381     if (instance == nullptr) {
382         return CameraError::CAMERA_SERVICE_ERROR;
383     }
384     return instance->Open();
385 }
386 
FfiCameraInputOpenWithIsEnableSecureCamera(int64_t id,bool isEnableSecureCamera,uint64_t * secureSeqId)387 int32_t FfiCameraInputOpenWithIsEnableSecureCamera(int64_t id, bool isEnableSecureCamera, uint64_t *secureSeqId)
388 {
389     auto instance = FFIData::GetData<CJCameraInput>(id);
390     if (instance == nullptr) {
391         return CameraError::CAMERA_SERVICE_ERROR;
392     }
393     return instance->Open(isEnableSecureCamera, secureSeqId);
394 }
395 
FfiCameraInputClose(int64_t id)396 int32_t FfiCameraInputClose(int64_t id)
397 {
398     auto instance = FFIData::GetData<CJCameraInput>(id);
399     if (instance == nullptr) {
400         return CameraError::CAMERA_SERVICE_ERROR;
401     }
402     return instance->Close();
403 }
404 
FfiCameraInputOnError(int64_t id,int64_t callbackId)405 int32_t FfiCameraInputOnError(int64_t id, int64_t callbackId)
406 {
407     auto instance = FFIData::GetData<CJCameraInput>(id);
408     if (instance == nullptr) {
409         return CameraError::CAMERA_SERVICE_ERROR;
410     }
411     instance->OnError(callbackId);
412     return CameraError::NO_ERROR;
413 }
414 
FfiCameraInputOffError(int64_t id,int64_t callbackId)415 int32_t FfiCameraInputOffError(int64_t id, int64_t callbackId)
416 {
417     auto instance = FFIData::GetData<CJCameraInput>(id);
418     if (instance == nullptr) {
419         return CameraError::CAMERA_SERVICE_ERROR;
420     }
421     instance->OffError(callbackId);
422     return CameraError::NO_ERROR;
423 }
424 
FfiCameraInputOffAllError(int64_t id)425 int32_t FfiCameraInputOffAllError(int64_t id)
426 {
427     auto instance = FFIData::GetData<CJCameraInput>(id);
428     if (instance == nullptr) {
429         return CameraError::CAMERA_SERVICE_ERROR;
430     }
431     instance->OffAllError();
432     return CameraError::NO_ERROR;
433 }
434 
FfiCameraPreviewOutputGetSupportedFrameRates(int64_t id,int32_t * errCode)435 CArrFrameRateRange FfiCameraPreviewOutputGetSupportedFrameRates(int64_t id, int32_t *errCode)
436 {
437     auto instance = FFIData::GetData<CJPreviewOutput>(id);
438     if (instance == nullptr) {
439         *errCode = CameraError::CAMERA_SERVICE_ERROR;
440         return CArrFrameRateRange{0};
441     }
442     return instance->GetSupportedFrameRates(errCode);
443 }
444 
FfiCameraPreviewOutputSetFrameRate(int64_t id,int32_t min,int32_t max)445 int32_t FfiCameraPreviewOutputSetFrameRate(int64_t id, int32_t min, int32_t max)
446 {
447     auto instance = FFIData::GetData<CJPreviewOutput>(id);
448     if (instance == nullptr) {
449         return CameraError::CAMERA_SERVICE_ERROR;
450     }
451     return instance->SetFrameRate(min, max);
452 }
453 
FfiCameraPreviewOutputGetActiveFrameRate(int64_t id,int32_t * errCode)454 FrameRateRange FfiCameraPreviewOutputGetActiveFrameRate(int64_t id, int32_t *errCode)
455 {
456     auto instance = FFIData::GetData<CJPreviewOutput>(id);
457     if (instance == nullptr) {
458         *errCode = CameraError::CAMERA_SERVICE_ERROR;
459         return FrameRateRange{0};
460     }
461     return instance->GetActiveFrameRate(errCode);
462 }
463 
FfiCameraPreviewOutputGetActiveProfile(int64_t id,int32_t * errCode)464 CJProfile FfiCameraPreviewOutputGetActiveProfile(int64_t id, int32_t *errCode)
465 {
466     auto instance = FFIData::GetData<CJPreviewOutput>(id);
467     if (instance == nullptr) {
468         *errCode = CameraError::CAMERA_SERVICE_ERROR;
469         return CJProfile{0};
470     }
471     return instance->GetActiveProfile(errCode);
472 }
473 
FfiCameraPreviewOutputGetPreviewRotation(int64_t id,int32_t value,int32_t * errCode)474 int32_t FfiCameraPreviewOutputGetPreviewRotation(int64_t id, int32_t value, int32_t *errCode)
475 {
476     auto instance = FFIData::GetData<CJPreviewOutput>(id);
477     if (instance == nullptr) {
478         *errCode = CameraError::CAMERA_SERVICE_ERROR;
479         return 0;
480     }
481     return instance->GetPreviewRotation(value, errCode);
482 }
483 
FfiCameraPreviewOutputSetPreviewRotation(int64_t id,int32_t imageRotation,bool isDisplayLocked)484 int32_t FfiCameraPreviewOutputSetPreviewRotation(int64_t id, int32_t imageRotation, bool isDisplayLocked)
485 {
486     auto instance = FFIData::GetData<CJPreviewOutput>(id);
487     if (instance == nullptr) {
488         return CameraError::CAMERA_SERVICE_ERROR;
489     }
490     return instance->SetPreviewRotation(imageRotation, isDisplayLocked);
491 }
492 
FfiCameraPreviewOutputOnFrameStart(int64_t id,int64_t callbackId)493 int32_t FfiCameraPreviewOutputOnFrameStart(int64_t id, int64_t callbackId)
494 {
495     auto instance = FFIData::GetData<CJPreviewOutput>(id);
496     if (instance == nullptr) {
497         return CameraError::CAMERA_SERVICE_ERROR;
498     }
499     instance->OnFrameStart(callbackId);
500     return CameraError::NO_ERROR;
501 }
502 
FfiCameraPreviewOutputOnFrameEnd(int64_t id,int64_t callbackId)503 int32_t FfiCameraPreviewOutputOnFrameEnd(int64_t id, int64_t callbackId)
504 {
505     auto instance = FFIData::GetData<CJPreviewOutput>(id);
506     if (instance == nullptr) {
507         return CameraError::CAMERA_SERVICE_ERROR;
508     }
509     instance->OnFrameEnd(callbackId);
510     return CameraError::NO_ERROR;
511 }
512 
FfiCameraPreviewOutputOnError(int64_t id,int64_t callbackId)513 int32_t FfiCameraPreviewOutputOnError(int64_t id, int64_t callbackId)
514 {
515     auto instance = FFIData::GetData<CJPreviewOutput>(id);
516     if (instance == nullptr) {
517         return CameraError::CAMERA_SERVICE_ERROR;
518     }
519     instance->OnError(callbackId);
520     return CameraError::NO_ERROR;
521 }
522 
FfiCameraPreviewOutputOffFrameStart(int64_t id,int64_t callbackId)523 int32_t FfiCameraPreviewOutputOffFrameStart(int64_t id, int64_t callbackId)
524 {
525     auto instance = FFIData::GetData<CJPreviewOutput>(id);
526     if (instance == nullptr) {
527         return CameraError::CAMERA_SERVICE_ERROR;
528     }
529     instance->OffFrameStart(callbackId);
530     return CameraError::NO_ERROR;
531 }
532 
FfiCameraPreviewOutputOffFrameEnd(int64_t id,int64_t callbackId)533 int32_t FfiCameraPreviewOutputOffFrameEnd(int64_t id, int64_t callbackId)
534 {
535     auto instance = FFIData::GetData<CJPreviewOutput>(id);
536     if (instance == nullptr) {
537         return CameraError::CAMERA_SERVICE_ERROR;
538     }
539     instance->OffFrameEnd(callbackId);
540     return CameraError::NO_ERROR;
541 }
542 
FfiCameraPreviewOutputOffError(int64_t id,int64_t callbackId)543 int32_t FfiCameraPreviewOutputOffError(int64_t id, int64_t callbackId)
544 {
545     auto instance = FFIData::GetData<CJPreviewOutput>(id);
546     if (instance == nullptr) {
547         return CameraError::CAMERA_SERVICE_ERROR;
548     }
549     instance->OffError(callbackId);
550     return CameraError::NO_ERROR;
551 }
552 
FfiCameraPreviewOutputOffAllFrameStart(int64_t id)553 int32_t FfiCameraPreviewOutputOffAllFrameStart(int64_t id)
554 {
555     auto instance = FFIData::GetData<CJPreviewOutput>(id);
556     if (instance == nullptr) {
557         return CameraError::CAMERA_SERVICE_ERROR;
558     }
559     instance->OffAllFrameStart();
560     return CameraError::NO_ERROR;
561 }
562 
FfiCameraPreviewOutputOffAllFrameEnd(int64_t id)563 int32_t FfiCameraPreviewOutputOffAllFrameEnd(int64_t id)
564 {
565     auto instance = FFIData::GetData<CJPreviewOutput>(id);
566     if (instance == nullptr) {
567         return CameraError::CAMERA_SERVICE_ERROR;
568     }
569     instance->OffAllFrameEnd();
570     return CameraError::NO_ERROR;
571 }
572 
FfiCameraPreviewOutputOffAllError(int64_t id)573 int32_t FfiCameraPreviewOutputOffAllError(int64_t id)
574 {
575     auto instance = FFIData::GetData<CJPreviewOutput>(id);
576     if (instance == nullptr) {
577         return CameraError::CAMERA_SERVICE_ERROR;
578     }
579     instance->OffAllError();
580     return CameraError::NO_ERROR;
581 }
582 
FfiCameraPreviewOutputRelease(int64_t id)583 int32_t FfiCameraPreviewOutputRelease(int64_t id)
584 {
585     auto instance = FFIData::GetData<CJPreviewOutput>(id);
586     if (instance == nullptr) {
587         return CameraError::CAMERA_SERVICE_ERROR;
588     }
589     return instance->Release();
590 }
591 
FfiCameraPhotoOutputCapture(int64_t id)592 int32_t FfiCameraPhotoOutputCapture(int64_t id)
593 {
594     auto photoOutput = FFIData::GetData<CJPhotoOutput>(id);
595     if (photoOutput == nullptr) {
596         return CameraError::CAMERA_SERVICE_ERROR;
597     }
598     return photoOutput->Capture();
599 }
600 
FfiCameraPhotoOutputCaptureWithSetting(int64_t id,CJPhotoCaptureSetting setting)601 int32_t FfiCameraPhotoOutputCaptureWithSetting(int64_t id, CJPhotoCaptureSetting setting)
602 {
603     auto photoOutput = FFIData::GetData<CJPhotoOutput>(id);
604     if (photoOutput == nullptr) {
605         return CameraError::CAMERA_SERVICE_ERROR;
606     }
607     return photoOutput->Capture(setting, false);
608 }
609 
FfiCameraPhotoOutputCaptureWithSettingV2(int64_t id,CJPhotoCaptureSetting * setting,bool isLocationNone)610 FFI_EXPORT int32_t FfiCameraPhotoOutputCaptureWithSettingV2(int64_t id, CJPhotoCaptureSetting *setting,
611     bool isLocationNone)
612 {
613     auto photoOutput = FFIData::GetData<CJPhotoOutput>(id);
614     if (photoOutput == nullptr) {
615         return CameraError::CAMERA_SERVICE_ERROR;
616     }
617     return photoOutput->Capture(*setting, isLocationNone);
618 }
619 
FfiCameraPhotoOutputOnCaptureStartWithInfo(int64_t id,int64_t callbackId)620 int32_t FfiCameraPhotoOutputOnCaptureStartWithInfo(int64_t id, int64_t callbackId)
621 {
622     auto photoOutput = FFIData::GetData<CJPhotoOutput>(id);
623     if (photoOutput == nullptr) {
624         return CameraError::CAMERA_SERVICE_ERROR;
625     }
626     photoOutput->OnCaptureStartWithInfo(callbackId);
627     return CameraError::NO_ERROR;
628 }
629 
FfiCameraPhotoOutputOffCaptureStartWithInfo(int64_t id,int64_t callbackId)630 int32_t FfiCameraPhotoOutputOffCaptureStartWithInfo(int64_t id, int64_t callbackId)
631 {
632     auto photoOutput = FFIData::GetData<CJPhotoOutput>(id);
633     if (photoOutput == nullptr) {
634         return CameraError::CAMERA_SERVICE_ERROR;
635     }
636     photoOutput->OffCaptureStartWithInfo(callbackId);
637     return CameraError::NO_ERROR;
638 }
639 
FfiCameraPhotoOutputOffAllCaptureStartWithInfo(int64_t id)640 int32_t FfiCameraPhotoOutputOffAllCaptureStartWithInfo(int64_t id)
641 {
642     auto photoOutput = FFIData::GetData<CJPhotoOutput>(id);
643     if (photoOutput == nullptr) {
644         return CameraError::CAMERA_SERVICE_ERROR;
645     }
646     photoOutput->OffAllCaptureStartWithInfo();
647     return CameraError::NO_ERROR;
648 }
649 
FfiCameraPhotoOutputOnFrameShutter(int64_t id,int64_t callbackId)650 int32_t FfiCameraPhotoOutputOnFrameShutter(int64_t id, int64_t callbackId)
651 {
652     auto photoOutput = FFIData::GetData<CJPhotoOutput>(id);
653     if (photoOutput == nullptr) {
654         return CameraError::CAMERA_SERVICE_ERROR;
655     }
656     photoOutput->OnFrameShutter(callbackId);
657     return CameraError::NO_ERROR;
658 }
659 
FfiCameraPhotoOutputOffFrameShutter(int64_t id,int64_t callbackId)660 int32_t FfiCameraPhotoOutputOffFrameShutter(int64_t id, int64_t callbackId)
661 {
662     auto photoOutput = FFIData::GetData<CJPhotoOutput>(id);
663     if (photoOutput == nullptr) {
664         return CameraError::CAMERA_SERVICE_ERROR;
665     }
666     photoOutput->OffFrameShutter(callbackId);
667     return CameraError::NO_ERROR;
668 }
669 
FfiCameraPhotoOutputOffAllFrameShutter(int64_t id)670 int32_t FfiCameraPhotoOutputOffAllFrameShutter(int64_t id)
671 {
672     auto photoOutput = FFIData::GetData<CJPhotoOutput>(id);
673     if (photoOutput == nullptr) {
674         return CameraError::CAMERA_SERVICE_ERROR;
675     }
676     photoOutput->OffAllFrameShutter();
677     return CameraError::NO_ERROR;
678 }
679 
FfiCameraPhotoOutputOnCaptureEnd(int64_t id,int64_t callbackId)680 int32_t FfiCameraPhotoOutputOnCaptureEnd(int64_t id, int64_t callbackId)
681 {
682     auto photoOutput = FFIData::GetData<CJPhotoOutput>(id);
683     if (photoOutput == nullptr) {
684         return CameraError::CAMERA_SERVICE_ERROR;
685     }
686     photoOutput->OnCaptureEnd(callbackId);
687     return CameraError::NO_ERROR;
688 }
689 
FfiCameraPhotoOutputOffCaptureEnd(int64_t id,int64_t callbackId)690 int32_t FfiCameraPhotoOutputOffCaptureEnd(int64_t id, int64_t callbackId)
691 {
692     auto photoOutput = FFIData::GetData<CJPhotoOutput>(id);
693     if (photoOutput == nullptr) {
694         return CameraError::CAMERA_SERVICE_ERROR;
695     }
696     photoOutput->OffCaptureEnd(callbackId);
697     return CameraError::NO_ERROR;
698 }
699 
FfiCameraPhotoOutputOffAllCaptureEnd(int64_t id)700 int32_t FfiCameraPhotoOutputOffAllCaptureEnd(int64_t id)
701 {
702     auto photoOutput = FFIData::GetData<CJPhotoOutput>(id);
703     if (photoOutput == nullptr) {
704         return CameraError::CAMERA_SERVICE_ERROR;
705     }
706     photoOutput->OffAllCaptureEnd();
707     return CameraError::NO_ERROR;
708 }
709 
FfiCameraPhotoOutputOnFrameShutterEnd(int64_t id,int64_t callbackId)710 int32_t FfiCameraPhotoOutputOnFrameShutterEnd(int64_t id, int64_t callbackId)
711 {
712     auto photoOutput = FFIData::GetData<CJPhotoOutput>(id);
713     if (photoOutput == nullptr) {
714         return CameraError::CAMERA_SERVICE_ERROR;
715     }
716     photoOutput->OnFrameShutterEnd(callbackId);
717     return CameraError::NO_ERROR;
718 }
719 
FfiCameraPhotoOutputOffFrameShutterEnd(int64_t id,int64_t callbackId)720 int32_t FfiCameraPhotoOutputOffFrameShutterEnd(int64_t id, int64_t callbackId)
721 {
722     auto photoOutput = FFIData::GetData<CJPhotoOutput>(id);
723     if (photoOutput == nullptr) {
724         return CameraError::CAMERA_SERVICE_ERROR;
725     }
726     photoOutput->OffFrameShutterEnd(callbackId);
727     return CameraError::NO_ERROR;
728 }
729 
FfiCameraPhotoOutputOffAllFrameShutterEnd(int64_t id)730 int32_t FfiCameraPhotoOutputOffAllFrameShutterEnd(int64_t id)
731 {
732     auto photoOutput = FFIData::GetData<CJPhotoOutput>(id);
733     if (photoOutput == nullptr) {
734         return CameraError::CAMERA_SERVICE_ERROR;
735     }
736     photoOutput->OffAllFrameShutterEnd();
737     return CameraError::NO_ERROR;
738 }
739 
FfiCameraPhotoOutputOnCaptureReady(int64_t id,int64_t callbackId)740 int32_t FfiCameraPhotoOutputOnCaptureReady(int64_t id, int64_t callbackId)
741 {
742     auto photoOutput = FFIData::GetData<CJPhotoOutput>(id);
743     if (photoOutput == nullptr) {
744         return CameraError::CAMERA_SERVICE_ERROR;
745     }
746     photoOutput->OnCaptureReady(callbackId);
747     return CameraError::NO_ERROR;
748 }
749 
FfiCameraPhotoOutputOffCaptureReady(int64_t id,int64_t callbackId)750 int32_t FfiCameraPhotoOutputOffCaptureReady(int64_t id, int64_t callbackId)
751 {
752     auto photoOutput = FFIData::GetData<CJPhotoOutput>(id);
753     if (photoOutput == nullptr) {
754         return CameraError::CAMERA_SERVICE_ERROR;
755     }
756     photoOutput->OffCaptureReady(callbackId);
757     return CameraError::NO_ERROR;
758 }
759 
FfiCameraPhotoOutputOffAllCaptureReady(int64_t id)760 int32_t FfiCameraPhotoOutputOffAllCaptureReady(int64_t id)
761 {
762     auto photoOutput = FFIData::GetData<CJPhotoOutput>(id);
763     if (photoOutput == nullptr) {
764         return CameraError::CAMERA_SERVICE_ERROR;
765     }
766     photoOutput->OffAllCaptureReady();
767     return CameraError::NO_ERROR;
768 }
769 
FfiCameraPhotoOutputOnEstimatedCaptureDuration(int64_t id,int64_t callbackId)770 int32_t FfiCameraPhotoOutputOnEstimatedCaptureDuration(int64_t id, int64_t callbackId)
771 {
772     auto photoOutput = FFIData::GetData<CJPhotoOutput>(id);
773     if (photoOutput == nullptr) {
774         return CameraError::CAMERA_SERVICE_ERROR;
775     }
776     photoOutput->OnEstimatedCaptureDuration(callbackId);
777     return CameraError::NO_ERROR;
778 }
779 
FfiCameraPhotoOutputOffEstimatedCaptureDuration(int64_t id,int64_t callbackId)780 int32_t FfiCameraPhotoOutputOffEstimatedCaptureDuration(int64_t id, int64_t callbackId)
781 {
782     auto photoOutput = FFIData::GetData<CJPhotoOutput>(id);
783     if (photoOutput == nullptr) {
784         return CameraError::CAMERA_SERVICE_ERROR;
785     }
786     photoOutput->OffEstimatedCaptureDuration(callbackId);
787     return CameraError::NO_ERROR;
788 }
789 
FfiCameraPhotoOutputOffAllEstimatedCaptureDuration(int64_t id)790 int32_t FfiCameraPhotoOutputOffAllEstimatedCaptureDuration(int64_t id)
791 {
792     auto photoOutput = FFIData::GetData<CJPhotoOutput>(id);
793     if (photoOutput == nullptr) {
794         return CameraError::CAMERA_SERVICE_ERROR;
795     }
796     photoOutput->OffAllEstimatedCaptureDuration();
797     return CameraError::NO_ERROR;
798 }
799 
FfiCameraPhotoOutputOnError(int64_t id,int64_t callbackId)800 int32_t FfiCameraPhotoOutputOnError(int64_t id, int64_t callbackId)
801 {
802     auto photoOutput = FFIData::GetData<CJPhotoOutput>(id);
803     if (photoOutput == nullptr) {
804         return CameraError::CAMERA_SERVICE_ERROR;
805     }
806     photoOutput->OnError(callbackId);
807     return CameraError::NO_ERROR;
808 }
809 
FfiCameraPhotoOutputOffError(int64_t id,int64_t callbackId)810 int32_t FfiCameraPhotoOutputOffError(int64_t id, int64_t callbackId)
811 {
812     auto photoOutput = FFIData::GetData<CJPhotoOutput>(id);
813     if (photoOutput == nullptr) {
814         return CameraError::CAMERA_SERVICE_ERROR;
815     }
816     photoOutput->OffError(callbackId);
817     return CameraError::NO_ERROR;
818 }
819 
FfiCameraPhotoOutputOffAllError(int64_t id)820 int32_t FfiCameraPhotoOutputOffAllError(int64_t id)
821 {
822     auto photoOutput = FFIData::GetData<CJPhotoOutput>(id);
823     if (photoOutput == nullptr) {
824         return CameraError::CAMERA_SERVICE_ERROR;
825     }
826     photoOutput->OffAllError();
827     return CameraError::NO_ERROR;
828 }
829 
FfiCameraPhotoOutputIsMovingPhotoSupported(int64_t id,int32_t * errCode)830 bool FfiCameraPhotoOutputIsMovingPhotoSupported(int64_t id, int32_t *errCode)
831 {
832     auto photoOutput = FFIData::GetData<CJPhotoOutput>(id);
833     if (photoOutput == nullptr) {
834         *errCode = CameraError::CAMERA_SERVICE_ERROR;
835         return false;
836     }
837     return photoOutput->IsMovingPhotoSupported(errCode);
838 }
839 
FfiCameraPhotoOutputEnableMovingPhoto(int64_t id,bool enabled)840 int32_t FfiCameraPhotoOutputEnableMovingPhoto(int64_t id, bool enabled)
841 {
842     auto photoOutput = FFIData::GetData<CJPhotoOutput>(id);
843     if (photoOutput == nullptr) {
844         return CameraError::CAMERA_SERVICE_ERROR;
845     }
846     return photoOutput->EnableMovingPhoto(enabled);
847 }
848 
FfiCameraPhotoOutputIsMirrorSupported(int64_t id,int32_t * errCode)849 bool FfiCameraPhotoOutputIsMirrorSupported(int64_t id, int32_t *errCode)
850 {
851     auto photoOutput = FFIData::GetData<CJPhotoOutput>(id);
852     if (photoOutput == nullptr) {
853         *errCode = CameraError::CAMERA_SERVICE_ERROR;
854         return false;
855     }
856     return photoOutput->IsMirrorSupported(errCode);
857 }
858 
FfiCameraPhotoOutputEnableMirror(int64_t id,bool isMirror)859 int32_t FfiCameraPhotoOutputEnableMirror(int64_t id, bool isMirror)
860 {
861     auto photoOutput = FFIData::GetData<CJPhotoOutput>(id);
862     if (photoOutput == nullptr) {
863         return CameraError::CAMERA_SERVICE_ERROR;
864     }
865     return photoOutput->EnableMirror(isMirror);
866 }
867 
FfiCameraPhotoOutputSetMovingPhotoVideoCodecType(int64_t id,int32_t codecType)868 int32_t FfiCameraPhotoOutputSetMovingPhotoVideoCodecType(int64_t id, int32_t codecType)
869 {
870     auto photoOutput = FFIData::GetData<CJPhotoOutput>(id);
871     if (photoOutput == nullptr) {
872         return CameraError::CAMERA_SERVICE_ERROR;
873     }
874     return photoOutput->SetMovingPhotoVideoCodecType(codecType);
875 }
876 
FfiCameraPhotoOutputGetActiveProfile(int64_t id,int32_t * errCode)877 CJProfile FfiCameraPhotoOutputGetActiveProfile(int64_t id, int32_t *errCode)
878 {
879     auto photoOutput = FFIData::GetData<CJPhotoOutput>(id);
880     if (photoOutput == nullptr) {
881         *errCode = CameraError::CAMERA_SERVICE_ERROR;
882         return CJProfile{0};
883     }
884     return photoOutput->GetActiveProfile(errCode);
885 }
886 
FfiCameraPhotoOutputGetPhotoRotation(int64_t id,int32_t deviceDegree,int32_t * errCode)887 int32_t FfiCameraPhotoOutputGetPhotoRotation(int64_t id, int32_t deviceDegree, int32_t *errCode)
888 {
889     auto photoOutput = FFIData::GetData<CJPhotoOutput>(id);
890     if (photoOutput == nullptr) {
891         *errCode = CameraError::CAMERA_SERVICE_ERROR;
892         return -1;
893     }
894     return photoOutput->GetPhotoRotation(deviceDegree, errCode);
895 }
896 
FfiCameraPhotoOutputRelease(int64_t id)897 int32_t FfiCameraPhotoOutputRelease(int64_t id)
898 {
899     auto photoOutput = FFIData::GetData<CJPhotoOutput>(id);
900     if (photoOutput == nullptr) {
901         return CameraError::CAMERA_SERVICE_ERROR;
902     }
903     return photoOutput->Release();
904 }
905 
FfiCameraVideoOutputStart(int64_t id)906 int32_t FfiCameraVideoOutputStart(int64_t id)
907 {
908     auto videoOutput = FFIData::GetData<CJVideoOutput>(id);
909     if (videoOutput == nullptr) {
910         return CameraError::CAMERA_SERVICE_ERROR;
911     }
912     return videoOutput->Start();
913 }
914 
FfiCameraVideoOutputStop(int64_t id)915 int32_t FfiCameraVideoOutputStop(int64_t id)
916 {
917     auto videoOutput = FFIData::GetData<CJVideoOutput>(id);
918     if (videoOutput == nullptr) {
919         return CameraError::CAMERA_SERVICE_ERROR;
920     }
921     return videoOutput->Stop();
922 }
923 
FfiCameraVideoOutputGetSupportedFrameRates(int64_t id,int32_t * errCode)924 CArrFrameRateRange FfiCameraVideoOutputGetSupportedFrameRates(int64_t id, int32_t *errCode)
925 {
926     auto videoOutput = FFIData::GetData<CJVideoOutput>(id);
927     if (videoOutput == nullptr) {
928         *errCode = CameraError::CAMERA_SERVICE_ERROR;
929         return CArrFrameRateRange{0};
930     }
931     return videoOutput->GetSupportedFrameRates(errCode);
932 }
933 
FfiCameraVideoOutputSetFrameRate(int64_t id,int32_t minFps,int32_t maxFps)934 int32_t FfiCameraVideoOutputSetFrameRate(int64_t id, int32_t minFps, int32_t maxFps)
935 {
936     auto videoOutput = FFIData::GetData<CJVideoOutput>(id);
937     if (videoOutput == nullptr) {
938         return CameraError::CAMERA_SERVICE_ERROR;
939     }
940     return videoOutput->SetFrameRate(minFps, maxFps);
941 }
942 
FfiCameraVideoOutputGetActiveFrameRate(int64_t id,int32_t * errCode)943 FrameRateRange FfiCameraVideoOutputGetActiveFrameRate(int64_t id, int32_t *errCode)
944 {
945     auto videoOutput = FFIData::GetData<CJVideoOutput>(id);
946     if (videoOutput == nullptr) {
947         *errCode = CameraError::CAMERA_SERVICE_ERROR;
948         return FrameRateRange{0};
949     }
950     return videoOutput->GetActiveFrameRate(errCode);
951 }
952 
FfiCameraVideoOutputGetActiveProfile(int64_t id,int32_t * errCode)953 CJVideoProfile FfiCameraVideoOutputGetActiveProfile(int64_t id, int32_t *errCode)
954 {
955     auto videoOutput = FFIData::GetData<CJVideoOutput>(id);
956     if (videoOutput == nullptr) {
957         *errCode = CameraError::CAMERA_SERVICE_ERROR;
958         return CJVideoProfile{0};
959     }
960     return videoOutput->GetActiveProfile(errCode);
961 }
962 
FfiCameraVideoOutputGetVideoRotation(int64_t id,int32_t imageRotation,int32_t * errCode)963 int32_t FfiCameraVideoOutputGetVideoRotation(int64_t id, int32_t imageRotation, int32_t *errCode)
964 {
965     auto videoOutput = FFIData::GetData<CJVideoOutput>(id);
966     if (videoOutput == nullptr) {
967         *errCode = CameraError::CAMERA_SERVICE_ERROR;
968         return -1;
969     }
970     return videoOutput->GetVideoRotation(imageRotation, errCode);
971 }
972 
FfiCameraVideoOutputOnFrameStart(int64_t id,int64_t callbackId)973 int32_t FfiCameraVideoOutputOnFrameStart(int64_t id, int64_t callbackId)
974 {
975     auto videoOutput = FFIData::GetData<CJVideoOutput>(id);
976     if (videoOutput == nullptr) {
977         return CameraError::CAMERA_SERVICE_ERROR;
978     }
979     videoOutput->OnFrameStart(callbackId);
980     return CameraError::NO_ERROR;
981 }
982 
FfiCameraVideoOutputOffFrameStart(int64_t id,int64_t callbackId)983 int32_t FfiCameraVideoOutputOffFrameStart(int64_t id, int64_t callbackId)
984 {
985     auto videoOutput = FFIData::GetData<CJVideoOutput>(id);
986     if (videoOutput == nullptr) {
987         return CameraError::CAMERA_SERVICE_ERROR;
988     }
989     videoOutput->OffFrameStart(callbackId);
990     return CameraError::NO_ERROR;
991 }
992 
FfiCameraVideoOutputOffAllFrameStart(int64_t id)993 int32_t FfiCameraVideoOutputOffAllFrameStart(int64_t id)
994 {
995     auto videoOutput = FFIData::GetData<CJVideoOutput>(id);
996     if (videoOutput == nullptr) {
997         return CameraError::CAMERA_SERVICE_ERROR;
998     }
999     videoOutput->OffAllFrameStart();
1000     return CameraError::NO_ERROR;
1001 }
1002 
FfiCameraVideoOutputOnFrameEnd(int64_t id,int64_t callbackId)1003 int32_t FfiCameraVideoOutputOnFrameEnd(int64_t id, int64_t callbackId)
1004 {
1005     auto videoOutput = FFIData::GetData<CJVideoOutput>(id);
1006     if (videoOutput == nullptr) {
1007         return CameraError::CAMERA_SERVICE_ERROR;
1008     }
1009     videoOutput->OnFrameEnd(callbackId);
1010     return CameraError::NO_ERROR;
1011 }
1012 
FfiCameraVideoOutputOffFrameEnd(int64_t id,int64_t callbackId)1013 int32_t FfiCameraVideoOutputOffFrameEnd(int64_t id, int64_t callbackId)
1014 {
1015     auto videoOutput = FFIData::GetData<CJVideoOutput>(id);
1016     if (videoOutput == nullptr) {
1017         return CameraError::CAMERA_SERVICE_ERROR;
1018     }
1019     videoOutput->OffFrameEnd(callbackId);
1020     return CameraError::NO_ERROR;
1021 }
1022 
FfiCameraVideoOutputOffAllFrameEnd(int64_t id)1023 int32_t FfiCameraVideoOutputOffAllFrameEnd(int64_t id)
1024 {
1025     auto videoOutput = FFIData::GetData<CJVideoOutput>(id);
1026     if (videoOutput == nullptr) {
1027         return CameraError::CAMERA_SERVICE_ERROR;
1028     }
1029     videoOutput->OffAllFrameEnd();
1030     return CameraError::NO_ERROR;
1031 }
1032 
FfiCameraVideoOutputOnError(int64_t id,int64_t callbackId)1033 int32_t FfiCameraVideoOutputOnError(int64_t id, int64_t callbackId)
1034 {
1035     auto videoOutput = FFIData::GetData<CJVideoOutput>(id);
1036     if (videoOutput == nullptr) {
1037         return CameraError::CAMERA_SERVICE_ERROR;
1038     }
1039     videoOutput->OnError(callbackId);
1040     return CameraError::NO_ERROR;
1041 }
1042 
FfiCameraVideoOutputOffError(int64_t id,int64_t callbackId)1043 int32_t FfiCameraVideoOutputOffError(int64_t id, int64_t callbackId)
1044 {
1045     auto videoOutput = FFIData::GetData<CJVideoOutput>(id);
1046     if (videoOutput == nullptr) {
1047         return CameraError::CAMERA_SERVICE_ERROR;
1048     }
1049     videoOutput->OffError(callbackId);
1050     return CameraError::NO_ERROR;
1051 }
1052 
FfiCameraVideoOutputOffAllError(int64_t id)1053 int32_t FfiCameraVideoOutputOffAllError(int64_t id)
1054 {
1055     auto videoOutput = FFIData::GetData<CJVideoOutput>(id);
1056     if (videoOutput == nullptr) {
1057         return CameraError::CAMERA_SERVICE_ERROR;
1058     }
1059     videoOutput->OffAllError();
1060     return CameraError::NO_ERROR;
1061 }
1062 
FfiCameraVideoOutputRelease(int64_t id)1063 int32_t FfiCameraVideoOutputRelease(int64_t id)
1064 {
1065     auto videoOutput = FFIData::GetData<CJVideoOutput>(id);
1066     if (videoOutput == nullptr) {
1067         return CameraError::CAMERA_SERVICE_ERROR;
1068     }
1069     return videoOutput->Release();
1070 }
1071 
FfiCameraMetadataOutputStart(int64_t id)1072 int32_t FfiCameraMetadataOutputStart(int64_t id)
1073 {
1074     auto metadataOutput = FFIData::GetData<CJMetadataOutput>(id);
1075     if (metadataOutput == nullptr) {
1076         MEDIA_ERR_LOG("Start Failed!");
1077         return CameraError::CAMERA_SERVICE_ERROR;
1078     }
1079     return metadataOutput->Start();
1080 }
1081 
FfiCameraMetadataOutputStop(int64_t id)1082 int32_t FfiCameraMetadataOutputStop(int64_t id)
1083 {
1084     auto metadataOutput = FFIData::GetData<CJMetadataOutput>(id);
1085     if (metadataOutput == nullptr) {
1086         MEDIA_ERR_LOG("Stop Failed!");
1087         return CameraError::CAMERA_SERVICE_ERROR;
1088     }
1089     return metadataOutput->Stop();
1090 }
1091 
FfiCameraMetadataOutputOnMetadataObjectsAvailable(int64_t id,int64_t callbackId)1092 int32_t FfiCameraMetadataOutputOnMetadataObjectsAvailable(int64_t id, int64_t callbackId)
1093 {
1094     auto metadataOutput = FFIData::GetData<CJMetadataOutput>(id);
1095     if (metadataOutput == nullptr) {
1096         return CameraError::CAMERA_SERVICE_ERROR;
1097     }
1098     metadataOutput->OnMetadataObjectsAvailable(callbackId);
1099     return CameraError::NO_ERROR;
1100 }
1101 
FfiCameraMetadataOutputOffMetadataObjectsAvailable(int64_t id,int64_t callbackId)1102 int32_t FfiCameraMetadataOutputOffMetadataObjectsAvailable(int64_t id, int64_t callbackId)
1103 {
1104     auto metadataOutput = FFIData::GetData<CJMetadataOutput>(id);
1105     if (metadataOutput == nullptr) {
1106         return CameraError::CAMERA_SERVICE_ERROR;
1107     }
1108     metadataOutput->OffMetadataObjectsAvailable(callbackId);
1109     return CameraError::NO_ERROR;
1110 }
1111 
FfiCameraMetadataOutputOffAllMetadataObjectsAvailable(int64_t id)1112 int32_t FfiCameraMetadataOutputOffAllMetadataObjectsAvailable(int64_t id)
1113 {
1114     auto metadataOutput = FFIData::GetData<CJMetadataOutput>(id);
1115     if (metadataOutput == nullptr) {
1116         return CameraError::CAMERA_SERVICE_ERROR;
1117     }
1118     metadataOutput->OffAllMetadataObjectsAvailable();
1119     return CameraError::NO_ERROR;
1120 }
1121 
FfiCameraMetadataOutputOnError(int64_t id,int64_t callbackId)1122 int32_t FfiCameraMetadataOutputOnError(int64_t id, int64_t callbackId)
1123 {
1124     auto metadataOutput = FFIData::GetData<CJMetadataOutput>(id);
1125     if (metadataOutput == nullptr) {
1126         return CameraError::CAMERA_SERVICE_ERROR;
1127     }
1128     metadataOutput->OnError(callbackId);
1129     return CameraError::NO_ERROR;
1130 }
1131 
FfiCameraMetadataOutputOffError(int64_t id,int64_t callbackId)1132 int32_t FfiCameraMetadataOutputOffError(int64_t id, int64_t callbackId)
1133 {
1134     auto metadataOutput = FFIData::GetData<CJMetadataOutput>(id);
1135     if (metadataOutput == nullptr) {
1136         return CameraError::CAMERA_SERVICE_ERROR;
1137     }
1138     metadataOutput->OffError(callbackId);
1139     return CameraError::NO_ERROR;
1140 }
1141 
FfiCameraMetadataOutputOffAllError(int64_t id)1142 int32_t FfiCameraMetadataOutputOffAllError(int64_t id)
1143 {
1144     auto metadataOutput = FFIData::GetData<CJMetadataOutput>(id);
1145     if (metadataOutput == nullptr) {
1146         return CameraError::CAMERA_SERVICE_ERROR;
1147     }
1148     metadataOutput->OffAllError();
1149     return CameraError::NO_ERROR;
1150 }
1151 
FfiCameraMetadataOutputRelease(int64_t id)1152 int32_t FfiCameraMetadataOutputRelease(int64_t id)
1153 {
1154     auto metadataOutput = FFIData::GetData<CJMetadataOutput>(id);
1155     if (metadataOutput == nullptr) {
1156         return CameraError::CAMERA_SERVICE_ERROR;
1157     }
1158     return metadataOutput->Release();
1159 }
1160 
FfiCameraSessionBeginConfig(int64_t id)1161 int32_t FfiCameraSessionBeginConfig(int64_t id)
1162 {
1163     auto instance = FFIData::GetData<CJSession>(id);
1164     if (instance == nullptr) {
1165         return CameraError::CAMERA_SERVICE_ERROR;
1166     }
1167     return instance->BeginConfig();
1168 }
1169 
FfiCameraSessionCommitConfig(int64_t id)1170 int32_t FfiCameraSessionCommitConfig(int64_t id)
1171 {
1172     auto instance = FFIData::GetData<CJSession>(id);
1173     if (instance == nullptr) {
1174         return CameraError::CAMERA_SERVICE_ERROR;
1175     }
1176     return instance->CommitConfig();
1177 }
1178 
FfiCameraSessionCanAddInput(int64_t id,int64_t cameraInputId,int32_t * errCode)1179 bool FfiCameraSessionCanAddInput(int64_t id, int64_t cameraInputId, int32_t *errCode)
1180 {
1181     auto instance = FFIData::GetData<CJSession>(id);
1182     auto cameraInput = FFIData::GetData<CJCameraInput>(cameraInputId);
1183     if (instance == nullptr || cameraInput == nullptr) {
1184         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1185         return false;
1186     }
1187     return instance->CanAddInput(cameraInput);
1188 }
1189 
FfiCameraSessionAddInput(int64_t id,int64_t cameraInputId)1190 int32_t FfiCameraSessionAddInput(int64_t id, int64_t cameraInputId)
1191 {
1192     auto instance = FFIData::GetData<CJSession>(id);
1193     auto cameraInput = FFIData::GetData<CJCameraInput>(cameraInputId);
1194     if (instance == nullptr || cameraInput == nullptr) {
1195         return CameraError::CAMERA_SERVICE_ERROR;
1196     }
1197     return instance->AddInput(cameraInput);
1198 }
1199 
FfiCameraSessionRemoveInput(int64_t id,int64_t cameraInputId)1200 int32_t FfiCameraSessionRemoveInput(int64_t id, int64_t cameraInputId)
1201 {
1202     auto instance = FFIData::GetData<CJSession>(id);
1203     auto cameraInput = FFIData::GetData<CJCameraInput>(cameraInputId);
1204     if (instance == nullptr || cameraInput == nullptr) {
1205         return CameraError::CAMERA_SERVICE_ERROR;
1206     }
1207     return instance->RemoveInput(cameraInput);
1208 }
1209 
GetCameraOutput(int64_t cameraOutputId,int32_t outputType)1210 static sptr<CameraOutput> GetCameraOutput(int64_t cameraOutputId, int32_t outputType)
1211 {
1212     if (outputType == METADATA_OUTPUT) {
1213         return FFIData::GetData<CJMetadataOutput>(cameraOutputId);
1214     }
1215     if (outputType == PHOTO_OUTPUT) {
1216         return FFIData::GetData<CJPhotoOutput>(cameraOutputId);
1217     }
1218     if (outputType == PREVIEW_OUTPUT) {
1219         return FFIData::GetData<CJPreviewOutput>(cameraOutputId);
1220     }
1221     return FFIData::GetData<CJVideoOutput>(cameraOutputId);
1222 }
1223 
FfiCameraSessionCanAddOutput(int64_t id,int64_t cameraOutputId,int32_t outputType,int32_t * errCode)1224 bool FfiCameraSessionCanAddOutput(int64_t id, int64_t cameraOutputId, int32_t outputType, int32_t *errCode)
1225 {
1226     auto instance = FFIData::GetData<CJSession>(id);
1227     auto cameraOutput = GetCameraOutput(cameraOutputId, outputType);
1228     if (instance == nullptr || cameraOutput == nullptr) {
1229         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1230         return false;
1231     }
1232     return instance->CanAddOutput(cameraOutput);
1233 }
1234 
FfiCameraSessionAddOutput(int64_t id,int64_t cameraOutputId,int32_t outputType)1235 int32_t FfiCameraSessionAddOutput(int64_t id, int64_t cameraOutputId, int32_t outputType)
1236 {
1237     auto instance = FFIData::GetData<CJSession>(id);
1238     auto cameraOutput = GetCameraOutput(cameraOutputId, outputType);
1239     if (instance == nullptr || cameraOutput == nullptr) {
1240         return CameraError::CAMERA_SERVICE_ERROR;
1241     }
1242     return instance->AddOutput(cameraOutput);
1243 }
1244 
FfiCameraSessionRemoveOutput(int64_t id,int64_t cameraOutputId,int32_t outputType)1245 int32_t FfiCameraSessionRemoveOutput(int64_t id, int64_t cameraOutputId, int32_t outputType)
1246 {
1247     auto instance = FFIData::GetData<CJSession>(id);
1248     auto cameraOutput = GetCameraOutput(cameraOutputId, outputType);
1249     if (instance == nullptr || cameraOutput == nullptr) {
1250         return CameraError::CAMERA_SERVICE_ERROR;
1251     }
1252     return instance->RemoveOutput(cameraOutput);
1253 }
1254 
FfiCameraSessionStart(int64_t id)1255 int32_t FfiCameraSessionStart(int64_t id)
1256 {
1257     auto instance = FFIData::GetData<CJSession>(id);
1258     if (instance == nullptr) {
1259         return CameraError::CAMERA_SERVICE_ERROR;
1260     }
1261     return instance->Start();
1262 }
1263 
FfiCameraSessionStop(int64_t id)1264 int32_t FfiCameraSessionStop(int64_t id)
1265 {
1266     auto instance = FFIData::GetData<CJSession>(id);
1267     if (instance == nullptr) {
1268         return CameraError::CAMERA_SERVICE_ERROR;
1269     }
1270     return instance->Stop();
1271 }
1272 
FfiCameraSessionRelease(int64_t id)1273 int32_t FfiCameraSessionRelease(int64_t id)
1274 {
1275     auto instance = FFIData::GetData<CJSession>(id);
1276     if (instance == nullptr) {
1277         return CameraError::CAMERA_SERVICE_ERROR;
1278     }
1279     return instance->Release();
1280 }
1281 
FfiCameraSessionCanPreconfig(int64_t id,int32_t preconfigType,int32_t preconfigRatio,int32_t * errCode)1282 FFI_EXPORT bool FfiCameraSessionCanPreconfig(int64_t id, int32_t preconfigType, int32_t preconfigRatio,
1283                                              int32_t *errCode)
1284 {
1285     auto instance = FFIData::GetData<CJSession>(id);
1286     if (instance == nullptr) {
1287         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1288         return false;
1289     }
1290 
1291     bool isSupported = false;
1292     *errCode = instance->CanPreconfig(static_cast<PreconfigType>(preconfigType),
1293                                       static_cast<ProfileSizeRatio>(preconfigRatio), isSupported);
1294     return isSupported;
1295 }
1296 
FfiCameraSessionPreconfig(int64_t id,int32_t preconfigType,int32_t preconfigRatio,int32_t * errCode)1297 FFI_EXPORT void FfiCameraSessionPreconfig(int64_t id, int32_t preconfigType, int32_t preconfigRatio, int32_t *errCode)
1298 {
1299     auto instance = FFIData::GetData<CJSession>(id);
1300     if (instance == nullptr) {
1301         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1302         return;
1303     }
1304 
1305     *errCode =
1306         instance->Preconfig(static_cast<PreconfigType>(preconfigType), static_cast<ProfileSizeRatio>(preconfigRatio));
1307 }
1308 
FfiCameraSessionAddSecureOutput(int64_t id,int64_t cameraOutputId,int32_t * errCode)1309 FFI_EXPORT void FfiCameraSessionAddSecureOutput(int64_t id, int64_t cameraOutputId, int32_t *errCode)
1310 {
1311     auto instance = FFIData::GetData<CJSession>(id);
1312     if (instance == nullptr) {
1313         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1314         return;
1315     }
1316 
1317     auto cameraOutput = FFIData::GetData<CJPreviewOutput>(cameraOutputId);
1318     if (cameraOutput == nullptr) {
1319         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1320         return;
1321     }
1322 
1323     *errCode = instance->AddSecureOutput(cameraOutput);
1324 }
1325 
FfiCameraOnError(int64_t id,int64_t callbackId,int32_t * errCode)1326 FFI_EXPORT void FfiCameraOnError(int64_t id, int64_t callbackId, int32_t *errCode)
1327 {
1328     auto instance = FFIData::GetData<CJSession>(id);
1329     if (instance == nullptr) {
1330         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1331         return;
1332     }
1333 
1334     instance->OnError(callbackId);
1335     *errCode = CameraError::NO_ERROR;
1336 }
1337 
FfiCameraOffError(int64_t id,int64_t callbackId,int32_t * errCode)1338 FFI_EXPORT void FfiCameraOffError(int64_t id, int64_t callbackId, int32_t *errCode)
1339 {
1340     auto instance = FFIData::GetData<CJSession>(id);
1341     if (instance == nullptr) {
1342         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1343         return;
1344     }
1345 
1346     instance->OffError(callbackId);
1347     *errCode = CameraError::NO_ERROR;
1348 }
1349 
FfiCameraOffAllError(int64_t id,int32_t * errCode)1350 FFI_EXPORT void FfiCameraOffAllError(int64_t id, int32_t *errCode)
1351 {
1352     auto instance = FFIData::GetData<CJSession>(id);
1353     if (instance == nullptr) {
1354         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1355         return;
1356     }
1357 
1358     instance->OffAllError();
1359     *errCode = CameraError::NO_ERROR;
1360 }
1361 
FfiCameraOnFocusStateChange(int64_t id,int64_t callbackId,int32_t * errCode)1362 FFI_EXPORT void FfiCameraOnFocusStateChange(int64_t id, int64_t callbackId, int32_t *errCode)
1363 {
1364     auto instance = FFIData::GetData<CJSession>(id);
1365     if (instance == nullptr) {
1366         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1367         return;
1368     }
1369 
1370     instance->OnFocusStateChange(callbackId);
1371     *errCode = CameraError::NO_ERROR;
1372 }
1373 
FfiCameraOffFocusStateChange(int64_t id,int64_t callbackId,int32_t * errCode)1374 FFI_EXPORT void FfiCameraOffFocusStateChange(int64_t id, int64_t callbackId, int32_t *errCode)
1375 {
1376     auto instance = FFIData::GetData<CJSession>(id);
1377     if (instance == nullptr) {
1378         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1379         return;
1380     }
1381 
1382     instance->OffFocusStateChange(callbackId);
1383     *errCode = CameraError::NO_ERROR;
1384 }
1385 
FfiCameraOffAllFocusStateChange(int64_t id,int32_t * errCode)1386 FFI_EXPORT void FfiCameraOffAllFocusStateChange(int64_t id, int32_t *errCode)
1387 {
1388     auto instance = FFIData::GetData<CJSession>(id);
1389     if (instance == nullptr) {
1390         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1391         return;
1392     }
1393 
1394     instance->OffAllFocusStateChange();
1395     *errCode = CameraError::NO_ERROR;
1396 }
1397 
FfiCameraOnSmoothZoomInfoAvailable(int64_t id,int64_t callbackId,int32_t * errCode)1398 FFI_EXPORT void FfiCameraOnSmoothZoomInfoAvailable(int64_t id, int64_t callbackId, int32_t *errCode)
1399 {
1400     auto instance = FFIData::GetData<CJSession>(id);
1401     if (instance == nullptr) {
1402         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1403         return;
1404     }
1405 
1406     instance->OnSmoothZoom(callbackId);
1407     *errCode = CameraError::NO_ERROR;
1408 }
1409 
FfiCameraOffSmoothZoomInfoAvailable(int64_t id,int64_t callbackId,int32_t * errCode)1410 FFI_EXPORT void FfiCameraOffSmoothZoomInfoAvailable(int64_t id, int64_t callbackId, int32_t *errCode)
1411 {
1412     auto instance = FFIData::GetData<CJSession>(id);
1413     if (instance == nullptr) {
1414         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1415         return;
1416     }
1417 
1418     instance->OffSmoothZoom(callbackId);
1419     *errCode = CameraError::NO_ERROR;
1420 }
1421 
FfiCameraOffAllSmoothZoomInfoAvailable(int64_t id,int32_t * errCode)1422 FFI_EXPORT void FfiCameraOffAllSmoothZoomInfoAvailable(int64_t id, int32_t *errCode)
1423 {
1424     auto instance = FFIData::GetData<CJSession>(id);
1425     if (instance == nullptr) {
1426         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1427         return;
1428     }
1429 
1430     instance->OffAllSmoothZoom();
1431     *errCode = CameraError::NO_ERROR;
1432 }
1433 
FfiCameraAutoExposureIsExposureModeSupported(int64_t id,int32_t aeMode,int32_t * errCode)1434 FFI_EXPORT bool FfiCameraAutoExposureIsExposureModeSupported(int64_t id, int32_t aeMode, int32_t *errCode)
1435 {
1436     auto instance = FFIData::GetData<CJSession>(id);
1437     if (instance == nullptr) {
1438         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1439         return false;
1440     }
1441 
1442     bool isSupported = false;
1443     *errCode = instance->IsExposureModeSupported(static_cast<ExposureMode>(aeMode), isSupported);
1444     return isSupported;
1445 }
1446 
FfiCameraAutoExposureGetExposureBiasRange(int64_t id,int32_t * errCode)1447 FFI_EXPORT CArrFloat32 FfiCameraAutoExposureGetExposureBiasRange(int64_t id, int32_t *errCode)
1448 {
1449     auto instance = FFIData::GetData<CJSession>(id);
1450     if (instance == nullptr) {
1451         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1452         return CArrFloat32{0, 0};
1453     }
1454 
1455     CArrFloat32 cArr = CArrFloat32{0};
1456     *errCode = instance->GetExposureBiasRange(cArr);
1457     return cArr;
1458 }
1459 
FfiCameraAutoExposureGetExposureMode(int64_t id,int32_t * errCode)1460 FFI_EXPORT int32_t FfiCameraAutoExposureGetExposureMode(int64_t id, int32_t *errCode)
1461 {
1462     auto instance = FFIData::GetData<CJSession>(id);
1463     if (instance == nullptr) {
1464         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1465         return static_cast<int32_t>(ExposureMode::EXPOSURE_MODE_UNSUPPORTED);
1466     }
1467 
1468     ExposureMode aeMode = ExposureMode::EXPOSURE_MODE_UNSUPPORTED;
1469     *errCode = instance->GetExposureMode(aeMode);
1470     return static_cast<int32_t>(aeMode);
1471 }
1472 
FfiCameraAutoExposureSetExposureMode(int64_t id,int32_t aeMode,int32_t * errCode)1473 FFI_EXPORT void FfiCameraAutoExposureSetExposureMode(int64_t id, int32_t aeMode, int32_t *errCode)
1474 {
1475     auto instance = FFIData::GetData<CJSession>(id);
1476     if (instance == nullptr) {
1477         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1478         return;
1479     }
1480 
1481     *errCode = instance->SetExposureMode(static_cast<ExposureMode>(aeMode));
1482 }
1483 
FfiCameraAutoExposureGetMeteringPoint(int64_t id,int32_t * errCode)1484 FFI_EXPORT CameraPoint FfiCameraAutoExposureGetMeteringPoint(int64_t id, int32_t *errCode)
1485 {
1486     auto instance = FFIData::GetData<CJSession>(id);
1487     if (instance == nullptr) {
1488         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1489         return CameraPoint{0, 0};
1490     }
1491 
1492     CameraPoint point;
1493     *errCode = instance->GetMeteringPoint(point);
1494     return point;
1495 }
1496 
FfiCameraAutoExposureSetMeteringPoint(int64_t id,CameraPoint point,int32_t * errCode)1497 FFI_EXPORT void FfiCameraAutoExposureSetMeteringPoint(int64_t id, CameraPoint point, int32_t *errCode)
1498 {
1499     auto instance = FFIData::GetData<CJSession>(id);
1500     if (instance == nullptr) {
1501         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1502         return;
1503     }
1504 
1505     *errCode = instance->SetMeteringPoint(point);
1506 }
1507 
FfiCameraAutoExposureSetExposureBias(int64_t id,float exposureBias,int32_t * errCode)1508 FFI_EXPORT void FfiCameraAutoExposureSetExposureBias(int64_t id, float exposureBias, int32_t *errCode)
1509 {
1510     auto instance = FFIData::GetData<CJSession>(id);
1511     if (instance == nullptr) {
1512         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1513         return;
1514     }
1515 
1516     *errCode = instance->SetExposureBias(exposureBias);
1517 }
1518 
FfiCameraAutoExposureGetExposureValue(int64_t id,int32_t * errCode)1519 FFI_EXPORT float FfiCameraAutoExposureGetExposureValue(int64_t id, int32_t *errCode)
1520 {
1521     auto instance = FFIData::GetData<CJSession>(id);
1522     if (instance == nullptr) {
1523         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1524         return 0;
1525     }
1526 
1527     float exposureValue = 0;
1528     *errCode = instance->GetExposureValue(exposureValue);
1529     return exposureValue;
1530 }
1531 
FfiCameraColorManagementGetSupportedColorSpaces(int64_t id,int32_t * errCode)1532 FFI_EXPORT CArrI32 FfiCameraColorManagementGetSupportedColorSpaces(int64_t id, int32_t *errCode)
1533 {
1534     auto instance = FFIData::GetData<CJSession>(id);
1535     if (instance == nullptr) {
1536         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1537         return CArrI32{0, 0};
1538     }
1539 
1540     CArrI32 cArr =  CArrI32{0};
1541     instance->GetSupportedColorSpaces(cArr);
1542     *errCode = CameraError::NO_ERROR;
1543     return cArr;
1544 }
1545 
FfiCameraColorManagementSetColorSpace(int64_t id,int32_t colorSpace,int32_t * errCode)1546 FFI_EXPORT void FfiCameraColorManagementSetColorSpace(int64_t id, int32_t colorSpace, int32_t *errCode)
1547 {
1548     auto instance = FFIData::GetData<CJSession>(id);
1549     if (instance == nullptr) {
1550         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1551         return;
1552     }
1553 
1554     *errCode = instance->SetColorSpace(static_cast<ColorSpace>(colorSpace));
1555 }
1556 
FfiCameraColorManagementGetActiveColorSpace(int64_t id,int32_t * errCode)1557 FFI_EXPORT int32_t FfiCameraColorManagementGetActiveColorSpace(int64_t id, int32_t *errCode)
1558 {
1559     auto instance = FFIData::GetData<CJSession>(id);
1560     if (instance == nullptr) {
1561         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1562         return static_cast<int32_t>(ColorSpace::COLOR_SPACE_UNKNOWN);
1563     }
1564 
1565     ColorSpace colorSpace = ColorSpace::COLOR_SPACE_UNKNOWN;
1566     *errCode = instance->GetActiveColorSpace(colorSpace);
1567     return static_cast<int32_t>(colorSpace);
1568 }
1569 
FfiCameraFlashQueryFlashModeSupported(int64_t id,int32_t flashMode,int32_t * errCode)1570 FFI_EXPORT bool FfiCameraFlashQueryFlashModeSupported(int64_t id, int32_t flashMode, int32_t *errCode)
1571 {
1572     auto instance = FFIData::GetData<CJSession>(id);
1573     if (instance == nullptr) {
1574         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1575         return false;
1576     }
1577 
1578     bool isSupported = false;
1579     *errCode = instance->IsFlashModeSupported(static_cast<FlashMode>(flashMode), isSupported);
1580     return isSupported;
1581 }
1582 
FfiCameraFlashQueryHasFlash(int64_t id,int32_t * errCode)1583 FFI_EXPORT bool FfiCameraFlashQueryHasFlash(int64_t id, int32_t *errCode)
1584 {
1585     auto instance = FFIData::GetData<CJSession>(id);
1586     if (instance == nullptr) {
1587         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1588         return false;
1589     }
1590 
1591     bool hasFlash = false;
1592     *errCode = instance->HasFlash(hasFlash);
1593     return hasFlash;
1594 }
1595 
FfiCameraFlashGetFlashMode(int64_t id,int32_t * errCode)1596 FFI_EXPORT int32_t FfiCameraFlashGetFlashMode(int64_t id, int32_t *errCode)
1597 {
1598     auto instance = FFIData::GetData<CJSession>(id);
1599     if (instance == nullptr) {
1600         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1601         return 0;
1602     }
1603 
1604     FlashMode flashMode = FlashMode::FLASH_MODE_CLOSE;
1605     *errCode = instance->GetFlashMode(flashMode);
1606     return static_cast<int32_t>(flashMode);
1607 }
1608 
FfiCameraFlashSetFlashMode(int64_t id,int32_t flashMode,int32_t * errCode)1609 FFI_EXPORT void FfiCameraFlashSetFlashMode(int64_t id, int32_t flashMode, int32_t *errCode)
1610 {
1611     auto instance = FFIData::GetData<CJSession>(id);
1612     if (instance == nullptr) {
1613         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1614         return;
1615     }
1616 
1617     *errCode = instance->SetFlashMode(static_cast<FlashMode>(flashMode));
1618 }
1619 
FfiCameraFocusIsFocusModeSupported(int64_t id,int32_t afMode,int32_t * errCode)1620 FFI_EXPORT bool FfiCameraFocusIsFocusModeSupported(int64_t id, int32_t afMode, int32_t *errCode)
1621 {
1622     auto instance = FFIData::GetData<CJSession>(id);
1623     if (instance == nullptr) {
1624         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1625         return false;
1626     }
1627 
1628     bool isSupported = false;
1629     *errCode = instance->IsFocusModeSupported(static_cast<FocusMode>(afMode), isSupported);
1630     return isSupported;
1631 }
1632 
FfiCameraFocusSetFocusMode(int64_t id,int32_t afMode,int32_t * errCode)1633 FFI_EXPORT void FfiCameraFocusSetFocusMode(int64_t id, int32_t afMode, int32_t *errCode)
1634 {
1635     auto instance = FFIData::GetData<CJSession>(id);
1636     if (instance == nullptr) {
1637         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1638         return;
1639     }
1640 
1641     *errCode = instance->SetFocusMode(static_cast<FocusMode>(afMode));
1642 }
1643 
FfiCameraFocusGetFocusMode(int64_t id,int32_t * errCode)1644 FFI_EXPORT int32_t FfiCameraFocusGetFocusMode(int64_t id, int32_t *errCode)
1645 {
1646     auto instance = FFIData::GetData<CJSession>(id);
1647     if (instance == nullptr) {
1648         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1649         return 0;
1650     }
1651 
1652     FocusMode afMode = FocusMode::FOCUS_MODE_MANUAL;
1653     *errCode = instance->GetFocusMode(afMode);
1654     return static_cast<int32_t>(afMode);
1655 }
1656 
FfiCameraFocusSetFocusPoint(int64_t id,CameraPoint point,int32_t * errCode)1657 FFI_EXPORT void FfiCameraFocusSetFocusPoint(int64_t id, CameraPoint point, int32_t *errCode)
1658 {
1659     auto instance = FFIData::GetData<CJSession>(id);
1660     if (instance == nullptr) {
1661         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1662         return;
1663     }
1664 
1665     *errCode = instance->SetFocusPoint(point);
1666 }
1667 
FfiCameraFocusGetFocusPoint(int64_t id,int32_t * errCode)1668 FFI_EXPORT CameraPoint FfiCameraFocusGetFocusPoint(int64_t id, int32_t *errCode)
1669 {
1670     auto instance = FFIData::GetData<CJSession>(id);
1671     if (instance == nullptr) {
1672         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1673         return CameraPoint{0, 0};
1674     }
1675 
1676     CameraPoint point;
1677     *errCode = instance->GetFocusPoint(point);
1678     return point;
1679 }
1680 
FfiCameraFocusGetFocalLength(int64_t id,int32_t * errCode)1681 FFI_EXPORT float FfiCameraFocusGetFocalLength(int64_t id, int32_t *errCode)
1682 {
1683     auto instance = FFIData::GetData<CJSession>(id);
1684     if (instance == nullptr) {
1685         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1686         return 0;
1687     }
1688 
1689     float focalLength = 0;
1690     *errCode = instance->GetFocalLength(focalLength);
1691     return focalLength;
1692 }
1693 
FfiCameraStabilizationIsVideoStabilizationModeSupported(int64_t id,int32_t vsMode,int32_t * errCode)1694 FFI_EXPORT bool FfiCameraStabilizationIsVideoStabilizationModeSupported(int64_t id, int32_t vsMode, int32_t *errCode)
1695 {
1696     auto instance = FFIData::GetData<CJSession>(id);
1697     if (instance == nullptr) {
1698         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1699         return false;
1700     }
1701 
1702     bool isSupported = false;
1703     *errCode = instance->IsVideoStabilizationModeSupported(static_cast<VideoStabilizationMode>(vsMode), isSupported);
1704     return isSupported;
1705 }
1706 
FfiCameraStabilizationGetActiveVideoStabilizationMode(int64_t id,int32_t * errCode)1707 FFI_EXPORT int32_t FfiCameraStabilizationGetActiveVideoStabilizationMode(int64_t id, int32_t *errCode)
1708 {
1709     auto instance = FFIData::GetData<CJSession>(id);
1710     if (instance == nullptr) {
1711         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1712         return 0;
1713     }
1714 
1715     VideoStabilizationMode vsMode = VideoStabilizationMode::OFF;
1716     *errCode = instance->GetActiveVideoStabilizationMode(vsMode);
1717     return static_cast<int32_t>(vsMode);
1718 }
1719 
FfiCameraStabilizationSetVideoStabilizationMode(int64_t id,int32_t vsMode,int32_t * errCode)1720 FFI_EXPORT void FfiCameraStabilizationSetVideoStabilizationMode(int64_t id, int32_t vsMode, int32_t *errCode)
1721 {
1722     auto instance = FFIData::GetData<CJSession>(id);
1723     if (instance == nullptr) {
1724         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1725         return;
1726     }
1727 
1728     *errCode = instance->SetVideoStabilizationMode(static_cast<VideoStabilizationMode>(vsMode));
1729 }
1730 
FfiCameraZoomGetZoomRatioRange(int64_t id,int32_t * errCode)1731 FFI_EXPORT CArrFloat32 FfiCameraZoomGetZoomRatioRange(int64_t id, int32_t *errCode)
1732 {
1733     auto instance = FFIData::GetData<CJSession>(id);
1734     if (instance == nullptr) {
1735         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1736         return CArrFloat32{0, 0};
1737     }
1738 
1739     CArrFloat32 cArr = CArrFloat32{0};
1740     *errCode = instance->GetZoomRatioRange(cArr);
1741     return cArr;
1742 }
1743 
FfiCameraZoomSetZoomRatio(int64_t id,float zoomRatio,int32_t * errCode)1744 FFI_EXPORT void FfiCameraZoomSetZoomRatio(int64_t id, float zoomRatio, int32_t *errCode)
1745 {
1746     auto instance = FFIData::GetData<CJSession>(id);
1747     if (instance == nullptr) {
1748         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1749         return;
1750     }
1751 
1752     *errCode = instance->SetZoomRatio(zoomRatio);
1753 }
1754 
FfiCameraZoomGetZoomRatio(int64_t id,int32_t * errCode)1755 FFI_EXPORT float FfiCameraZoomGetZoomRatio(int64_t id, int32_t *errCode)
1756 {
1757     auto instance = FFIData::GetData<CJSession>(id);
1758     if (instance == nullptr) {
1759         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1760         return 0;
1761     }
1762 
1763     float zoomRatio = 0;
1764     *errCode = instance->GetZoomRatio(zoomRatio);
1765     return zoomRatio;
1766 }
1767 
FfiCameraZoomSetSmoothZoom(int64_t id,float targetRatio,int32_t mode,int32_t * errCode)1768 FFI_EXPORT void FfiCameraZoomSetSmoothZoom(int64_t id, float targetRatio, int32_t mode, int32_t *errCode)
1769 {
1770     auto instance = FFIData::GetData<CJSession>(id);
1771     if (instance == nullptr) {
1772         *errCode = CameraError::CAMERA_SERVICE_ERROR;
1773         return;
1774     }
1775 
1776     *errCode = instance->SetSmoothZoom(targetRatio, static_cast<uint32_t>(mode));
1777 }
1778 
1779 } // extern "C"
1780 } // namespace CameraStandard
1781 } // namespace OHOS