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 #ifndef CAMERA_MANAGER_ADAPTER_H
17 #define CAMERA_MANAGER_ADAPTER_H
18 
19 #include <memory>
20 #include <string>
21 #include <vector>
22 
23 namespace OHOS::NWeb {
24 
25 enum class CameraErrorType : int32_t {
26     CAMERA_NOT_CLOSE,
27     INPUT_ALREADY_INIT,
28     CAMERA_MANAGER_IS_NULL,
29     GET_CAMERA_OBJ_FAILED,
30     CREATE_INPUT_FAILED,
31     INPUT_OPEN_FAILED,
32     INPUT_NOT_INIT,
33     CREATE_PREVIEW_SURFACE_FAILED,
34     CREATE_PREVIEW_OUTPUT_FAILED,
35     CREATE_CAPTURE_SESSION_FAILED,
36     ADD_INPUT_FAILED,
37     ADD_OUTPUT_FAILED,
38     COMMIT_CONFIG_FAILED,
39     START_SESSION_FAILED,
40     INPUT_OR_OUTPUT_IS_NULL,
41 };
42 
43 enum class VideoTransportType : int32_t {
44     VIDEO_TRANS_TYPE_BUILD_IN,
45     VIDEO_TRANS_TYPE_USB,
46     VIDEO_TRANS_TYPE_REMOTE,
47     VIDEO_TRANS_TYPE_OTHER
48 };
49 
50 enum class VideoFacingModeAdapter : int32_t { FACING_NONE = 0, FACING_USER, FACING_ENVIRONMENT, NUM_FACING_MODES };
51 
52 enum class VideoPixelFormatAdapter : int32_t {
53     FORMAT_RGBA_8888,
54     FORMAT_YCBCR_420_888,
55     FORMAT_YUV_420_SP,
56     FORMAT_JPEG,
57     FORMAT_UNKNOWN
58 };
59 
60 enum class ExposureModeAdapter : int32_t {
61     EXPOSURE_MODE_UNSUPPORTED = -1,
62     EXPOSURE_MODE_LOCKED = 0,
63     EXPOSURE_MODE_AUTO,
64     EXPOSURE_MODE_CONTINUOUS_AUTO
65 };
66 
67 enum class FocusModeAdapter : int32_t {
68     FOCUS_MODE_MANUAL = 0,
69     FOCUS_MODE_CONTINUOUS_AUTO,
70     FOCUS_MODE_AUTO,
71     FOCUS_MODE_LOCKED,
72 };
73 
74 enum class FlashModeAdapter : int32_t {
75     FLASH_MODE_CLOSE = 0,
76     FLASH_MODE_OPEN,
77     FLASH_MODE_AUTO,
78     FLASH_MODE_ALWAYS_OPEN,
79 };
80 
81 enum class RangeIDAdapter : int32_t {
82     RANGE_ID_EXP_COMPENSATION,
83 };
84 
85 enum class CameraStopType : int32_t { TO_BACK = 0, NORMAL };
86 
87 enum class CameraStatusAdapter : int32_t {
88     APPEAR = 0,
89     DISAPPEAR,
90     AVAILABLE,
91     UNAVAILABLE,
92 };
93 
94 enum CameraManagerAdapterCode : int32_t {
95     CAMERA_OK = 0,
96     CAMERA_ERROR = -1,
97     CAMERA_NULL_ERROR = -2,
98 };
99 
100 class VideoControlSupportAdapter {
101 public:
102     VideoControlSupportAdapter() = default;
103 
104     virtual ~VideoControlSupportAdapter() = default;
105 
106     virtual bool GetPan() = 0;
107 
108     virtual bool GetTilt() = 0;
109 
110     virtual bool GetZoom() = 0;
111 };
112 
113 class FormatAdapter {
114 public:
115     FormatAdapter() = default;
116 
117     virtual ~FormatAdapter() = default;
118 
119     virtual uint32_t GetWidth() = 0;
120 
121     virtual uint32_t GetHeight() = 0;
122 
123     virtual float GetFrameRate() = 0;
124 
125     virtual VideoPixelFormatAdapter GetPixelFormat() = 0;
126 };
127 
128 class VideoDeviceDescriptorAdapter {
129 public:
130     VideoDeviceDescriptorAdapter() = default;
131 
132     virtual ~VideoDeviceDescriptorAdapter() = default;
133 
134     virtual std::string GetDisplayName() = 0;
135 
136     virtual std::string GetDeviceId() = 0;
137 
138     virtual std::string GetModelId() = 0;
139 
140     virtual std::shared_ptr<VideoControlSupportAdapter> GetControlSupport() = 0;
141 
142     virtual VideoTransportType GetTransportType() = 0;
143 
144     virtual VideoFacingModeAdapter GetFacingMode() = 0;
145 
146     virtual std::vector<std::shared_ptr<FormatAdapter>> GetSupportCaptureFormats() = 0;
147 };
148 
149 class VideoCaptureParamsAdapter {
150 public:
151     VideoCaptureParamsAdapter() = default;
152 
153     virtual ~VideoCaptureParamsAdapter() = default;
154 
155     virtual uint32_t GetWidth() = 0;
156 
157     virtual uint32_t GetHeight() = 0;
158 
159     virtual float GetFrameRate() = 0;
160 
161     virtual VideoPixelFormatAdapter GetPixelFormat() = 0;
162 
163     virtual bool GetEnableFaceDetection() = 0;
164 };
165 
166 class VideoCaptureRangeAdapter {
167 public:
168     VideoCaptureRangeAdapter() = default;
169 
170     virtual ~VideoCaptureRangeAdapter() = default;
171 
172     virtual double GetMin() = 0;
173 
174     virtual double GetMax() = 0;
175 
176     virtual double GetStep() = 0;
177 
178     virtual double GetCurrent() = 0;
179 };
180 
181 class CameraRotationInfoAdapter {
182 public:
183     CameraRotationInfoAdapter() = default;
184 
185     virtual ~CameraRotationInfoAdapter() = default;
186 
187     virtual int32_t GetRotation() = 0;
188 
189     virtual bool GetIsFlipX() = 0;
190 
191     virtual bool GetIsFlipY() = 0;
192 };
193 
194 class CameraSurfaceBufferAdapter {
195 public:
196     CameraSurfaceBufferAdapter() = default;
197 
198     virtual ~CameraSurfaceBufferAdapter() = default;
199 
200     virtual int32_t GetFileDescriptor() = 0;
201 
202     virtual int32_t GetWidth() = 0;
203 
204     virtual int32_t GetHeight() = 0;
205 
206     virtual int32_t GetStride() = 0;
207 
208     virtual int32_t GetFormat() = 0;
209 
210     virtual uint32_t GetSize() = 0;
211 
212     virtual uint8_t* GetBufferAddr() = 0;
213 
214 protected:
215     CameraSurfaceBufferAdapter(const CameraSurfaceBufferAdapter&) = delete;
216 
217     CameraSurfaceBufferAdapter& operator=(const CameraSurfaceBufferAdapter&) = delete;
218 };
219 
220 class CameraSurfaceAdapter {
221 public:
222     CameraSurfaceAdapter() = default;
223 
224     virtual ~CameraSurfaceAdapter() = default;
225 
226     virtual int32_t ReleaseBuffer(std::shared_ptr<CameraSurfaceBufferAdapter> buffer, int32_t fence) = 0;
227 };
228 
229 class CameraBufferListenerAdapter {
230 public:
231     virtual ~CameraBufferListenerAdapter() = default;
232 
233     virtual void OnBufferAvailable(std::shared_ptr<CameraSurfaceAdapter> surface,
234         std::shared_ptr<CameraSurfaceBufferAdapter> buffer,
235         std::shared_ptr<CameraRotationInfoAdapter> rotationInfo) = 0;
236 };
237 
238 class CameraStatusCallbackAdapter {
239 public:
240     virtual ~CameraStatusCallbackAdapter() = default;
241 
242     virtual void OnCameraStatusChanged(CameraStatusAdapter cameraStatusAdapter, const std::string callBackDeviceId) = 0;
243 };
244 
245 class CameraManagerAdapter {
246 public:
247     CameraManagerAdapter() = default;
248 
249     virtual ~CameraManagerAdapter() = default;
250 
251     virtual int32_t Create(std::shared_ptr<CameraStatusCallbackAdapter> cameraStatusCallback) = 0;
252 
253     virtual std::vector<std::shared_ptr<VideoDeviceDescriptorAdapter>> GetDevicesInfo() = 0;
254 
255     virtual int32_t ReleaseCameraManger() = 0;
256 
257     virtual int32_t GetExposureModes(std::vector<ExposureModeAdapter>& exposureModesAdapter) = 0;
258 
259     virtual int32_t GetCurrentExposureMode(ExposureModeAdapter& exposureModeAdapter) = 0;
260 
261     virtual std::shared_ptr<VideoCaptureRangeAdapter> GetCaptionRangeById(RangeIDAdapter rangeId) = 0;
262 
263     virtual bool IsFocusModeSupported(FocusModeAdapter focusMode) = 0;
264 
265     virtual FocusModeAdapter GetCurrentFocusMode() = 0;
266 
267     virtual bool IsFlashModeSupported(FlashModeAdapter flashMode) = 0;
268 
269     virtual int32_t RestartSession() = 0;
270 
271     virtual int32_t StopSession(CameraStopType stopType) = 0;
272 
273     virtual CameraStatusAdapter GetCameraStatus() = 0;
274 
275     virtual bool IsExistCaptureTask() = 0;
276 
277     virtual int32_t StartStream(const std::string& deviceId,
278         const std::shared_ptr<VideoCaptureParamsAdapter> captureParams,
279         std::shared_ptr<CameraBufferListenerAdapter> listener) = 0;
280 
281     virtual void SetForegroundFlag(bool isForeground) = 0;
282 
283     virtual void SetCameraStatus(CameraStatusAdapter status) = 0;
284 
285     virtual std::string GetCurrentDeviceId() = 0;
286 };
287 
288 } // namespace OHOS::NWeb
289 
290 #endif // CAMERA_MANAGER_ADAPTER_H
291