1 /*
2  * Copyright (c) 2023 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 "ohos_adapter/bridge/ark_camera_manager_adapter_impl.h"
17 
18 #include "ohos_adapter/bridge/ark_camera_buffer_listener_adapter_wrapper.h"
19 #include "ohos_adapter/bridge/ark_camera_status_callback_adapter_wrapper.h"
20 #include "ohos_adapter/bridge/ark_video_capture_params_adapter_wrapper.h"
21 #include "ohos_adapter/bridge/ark_video_capture_range_adapter_impl.h"
22 #include "ohos_adapter/cpptoc/ark_video_device_descriptor_adapter_vector_cpptoc.h"
23 
24 #include "base/bridge/ark_web_bridge_macros.h"
25 
26 namespace OHOS::ArkWeb {
27 
ArkCameraManagerAdapterImpl(NWeb::CameraManagerAdapter & ref)28 ArkCameraManagerAdapterImpl::ArkCameraManagerAdapterImpl(NWeb::CameraManagerAdapter& ref) : real_(ref) {}
29 
Create(ArkWebRefPtr<ArkCameraStatusCallbackAdapter> cameraStatusCallback)30 int32_t ArkCameraManagerAdapterImpl::Create(ArkWebRefPtr<ArkCameraStatusCallbackAdapter> cameraStatusCallback)
31 {
32     if (CHECK_REF_PTR_IS_NULL(cameraStatusCallback)) {
33         return real_.Create(nullptr);
34     }
35 
36     return real_.Create(std::make_shared<ArkCameraStatusCallbackAdapterWrapper>(cameraStatusCallback));
37 }
38 
GetDevicesInfo()39 ArkVideoDeviceDescriptorAdapterVector ArkCameraManagerAdapterImpl::GetDevicesInfo()
40 {
41     std::vector<std::shared_ptr<NWeb::VideoDeviceDescriptorAdapter>> desc = real_.GetDevicesInfo();
42     ArkVideoDeviceDescriptorAdapterVector result = ArkVideoDeviceDescriptorAdapterVectorClassToStruct(desc);
43     return result;
44 }
45 
ReleaseCameraManger()46 int32_t ArkCameraManagerAdapterImpl::ReleaseCameraManger()
47 {
48     return real_.ReleaseCameraManger();
49 }
50 
GetExposureModes(ArkWebInt32Vector & exposureModesAdapter)51 int32_t ArkCameraManagerAdapterImpl::GetExposureModes(ArkWebInt32Vector& exposureModesAdapter)
52 {
53     std::vector<NWeb::ExposureModeAdapter> vec;
54     int32_t result = real_.GetExposureModes(vec);
55     exposureModesAdapter.size = vec.size();
56     exposureModesAdapter.ark_web_mem_free_func = ArkWebMemFree;
57     if (exposureModesAdapter.size > 0) {
58         exposureModesAdapter.value = (int32_t*)ArkWebMemMalloc(sizeof(int32_t) * exposureModesAdapter.size);
59         if (exposureModesAdapter.value == nullptr) {
60             exposureModesAdapter.size = 0;
61             return -1;
62         }
63 
64         int count = 0;
65         for (auto it = vec.begin(); it != vec.end(); it++) {
66             exposureModesAdapter.value[count] = (int32_t)(*it);
67             count++;
68         }
69     }
70     return result;
71 }
72 
GetCurrentExposureMode(int32_t & exposureModeAdapter)73 int32_t ArkCameraManagerAdapterImpl::GetCurrentExposureMode(int32_t& exposureModeAdapter)
74 {
75     OHOS::NWeb::ExposureModeAdapter adapter;
76     int32_t result = real_.GetCurrentExposureMode(adapter);
77     exposureModeAdapter = (int32_t)adapter;
78     return result;
79 }
80 
GetCaptionRangeById(int32_t rangeId)81 ArkWebRefPtr<ArkVideoCaptureRangeAdapter> ArkCameraManagerAdapterImpl::GetCaptionRangeById(int32_t rangeId)
82 {
83     std::shared_ptr<NWeb::VideoCaptureRangeAdapter> adapter = real_.GetCaptionRangeById((NWeb::RangeIDAdapter)rangeId);
84     if (CHECK_SHARED_PTR_IS_NULL(adapter)) {
85         return nullptr;
86     }
87 
88     return new ArkVideoCaptureRangeAdapterImpl(adapter);
89 }
90 
IsFocusModeSupported(int32_t focusMode)91 bool ArkCameraManagerAdapterImpl::IsFocusModeSupported(int32_t focusMode)
92 {
93     return real_.IsFocusModeSupported((NWeb::FocusModeAdapter)focusMode);
94 }
95 
GetCurrentFocusMode()96 int32_t ArkCameraManagerAdapterImpl::GetCurrentFocusMode()
97 {
98     return (int32_t)real_.GetCurrentFocusMode();
99 }
100 
IsFlashModeSupported(int32_t flashMode)101 bool ArkCameraManagerAdapterImpl::IsFlashModeSupported(int32_t flashMode)
102 {
103     return real_.IsFlashModeSupported((NWeb::FlashModeAdapter)flashMode);
104 }
105 
RestartSession()106 int32_t ArkCameraManagerAdapterImpl::RestartSession()
107 {
108     return real_.RestartSession();
109 }
110 
StopSession(int32_t stopType)111 int32_t ArkCameraManagerAdapterImpl::StopSession(int32_t stopType)
112 {
113     return real_.StopSession((NWeb::CameraStopType)stopType);
114 }
115 
GetCameraStatus()116 int32_t ArkCameraManagerAdapterImpl::GetCameraStatus()
117 {
118     return (int32_t)real_.GetCameraStatus();
119 }
120 
IsExistCaptureTask()121 bool ArkCameraManagerAdapterImpl::IsExistCaptureTask()
122 {
123     return real_.IsExistCaptureTask();
124 }
125 
StartStream(const ArkWebString & deviceId,const ArkWebRefPtr<ArkVideoCaptureParamsAdapter> captureParams,ArkWebRefPtr<ArkCameraBufferListenerAdapter> listener)126 int32_t ArkCameraManagerAdapterImpl::StartStream(const ArkWebString& deviceId,
127     const ArkWebRefPtr<ArkVideoCaptureParamsAdapter> captureParams,
128     ArkWebRefPtr<ArkCameraBufferListenerAdapter> listener)
129 {
130     if (CHECK_REF_PTR_IS_NULL(listener) && CHECK_REF_PTR_IS_NULL(captureParams)) {
131         return real_.StartStream(ArkWebStringStructToClass(deviceId), nullptr, nullptr);
132     } else if (!CHECK_REF_PTR_IS_NULL(listener) && !CHECK_REF_PTR_IS_NULL(captureParams)) {
133         return real_.StartStream(ArkWebStringStructToClass(deviceId),
134             std::make_shared<ArkVideoCaptureParamsAdapterWrapper>(captureParams),
135             std::make_shared<ArkCameraBufferListenerAdapterWrapper>(listener));
136     } else if (CHECK_REF_PTR_IS_NULL(listener)) {
137         return real_.StartStream(ArkWebStringStructToClass(deviceId),
138             std::make_shared<ArkVideoCaptureParamsAdapterWrapper>(captureParams), nullptr);
139     } else {
140         return real_.StartStream(ArkWebStringStructToClass(deviceId), nullptr,
141             std::make_shared<ArkCameraBufferListenerAdapterWrapper>(listener));
142     }
143 }
144 
SetForegroundFlag(bool isForeground)145 void ArkCameraManagerAdapterImpl::SetForegroundFlag(bool isForeground)
146 {
147     real_.SetForegroundFlag(isForeground);
148 }
149 
SetCameraStatus(int32_t status)150 void ArkCameraManagerAdapterImpl::SetCameraStatus(int32_t status)
151 {
152     real_.SetCameraStatus((NWeb::CameraStatusAdapter)status);
153 }
154 
GetCurrentDeviceId()155 ArkWebString ArkCameraManagerAdapterImpl::GetCurrentDeviceId()
156 {
157     return ArkWebStringClassToStruct(real_.GetCurrentDeviceId());
158 }
159 
160 } // namespace OHOS::ArkWeb
161