• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2022 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_SESSION_NAPI_H_
17 #define CAMERA_SESSION_NAPI_H_
18 
19 #include "camera_log.h"
20 #include "napi/native_api.h"
21 #include "napi/native_node_api.h"
22 
23 #include "hilog/log.h"
24 #include "camera_napi_utils.h"
25 
26 #include "input/camera_manager.h"
27 #include "input/camera_device.h"
28 #include "session/capture_session.h"
29 
30 #include "input/camera_input_napi.h"
31 #include "output/photo_output_napi.h"
32 #include "output/preview_output_napi.h"
33 #include "output/video_output_napi.h"
34 #include "output/metadata_output_napi.h"
35 
36 #include <fstream>
37 #include <iostream>
38 #include <sstream>
39 #include <vector>
40 
41 #include <fcntl.h>
42 #include <sys/stat.h>
43 #include <sys/time.h>
44 #include <sys/types.h>
45 
46 namespace OHOS {
47 namespace CameraStandard {
48 static const char CAMERA_SESSION_NAPI_CLASS_NAME[] = "CaptureSession";
49 
50 enum SessionAsyncCallbackModes {
51     COMMIT_CONFIG_ASYNC_CALLBACK,
52     SESSION_START_ASYNC_CALLBACK,
53     SESSION_STOP_ASYNC_CALLBACK,
54     SESSION_RELEASE_ASYNC_CALLBACK,
55 };
56 
57 class ExposureCallbackListener : public ExposureCallback {
58 public:
ExposureCallbackListener(napi_env env,napi_ref ref)59     ExposureCallbackListener(napi_env env, napi_ref ref) : env_(env), callbackRef_(ref) {}
60     ~ExposureCallbackListener() = default;
61     void OnExposureState(const ExposureState state) override;
62 
63 private:
64     void OnExposureStateCallback(ExposureState state) const;
65     void OnExposureStateCallbackAsync(ExposureState state) const;
66 
67     napi_env env_;
68     napi_ref callbackRef_ = nullptr;
69 };
70 
71 struct ExposureCallbackInfo {
72     ExposureCallback::ExposureState state_;
73     const ExposureCallbackListener* listener_;
ExposureCallbackInfoExposureCallbackInfo74     ExposureCallbackInfo(ExposureCallback::ExposureState state, const ExposureCallbackListener* listener)
75         : state_(state), listener_(listener) {}
76 };
77 
78 class FocusCallbackListener : public FocusCallback {
79 public:
FocusCallbackListener(napi_env env,napi_ref ref)80     FocusCallbackListener(napi_env env, napi_ref ref) : env_(env), callbackRef_(ref) {}
81     ~FocusCallbackListener() = default;
82     void OnFocusState(FocusState state) override;
83 
84 private:
85     void OnFocusStateCallback(FocusState state) const;
86     void OnFocusStateCallbackAsync(FocusState state) const;
87 
88     napi_env env_;
89     napi_ref callbackRef_ = nullptr;
90 };
91 
92 struct FocusCallbackInfo {
93     FocusCallback::FocusState state_;
94     const FocusCallbackListener* listener_;
FocusCallbackInfoFocusCallbackInfo95     FocusCallbackInfo(FocusCallback::FocusState state, const FocusCallbackListener* listener)
96         : state_(state), listener_(listener) {}
97 };
98 
99 class SessionCallbackListener : public SessionCallback {
100 public:
SessionCallbackListener(napi_env env,napi_ref ref)101     SessionCallbackListener(napi_env env, napi_ref ref) : env_(env), callbackRef_(ref) {}
102     ~SessionCallbackListener() = default;
103     void OnError(int32_t errorCode) override;
104 
105 private:
106     void OnErrorCallback(int32_t errorCode) const;
107     void OnErrorCallbackAsync(int32_t errorCode) const;
108 
109     napi_env env_;
110     napi_ref callbackRef_ = nullptr;
111 };
112 
113 struct SessionCallbackInfo {
114     int32_t errorCode_;
115     const SessionCallbackListener* listener_;
SessionCallbackInfoSessionCallbackInfo116     SessionCallbackInfo(int32_t errorCode, const SessionCallbackListener* listener)
117         : errorCode_(errorCode), listener_(listener) {}
118 };
119 
120 class CameraSessionNapi {
121 public:
122     static napi_value Init(napi_env env, napi_value exports);
123     static napi_value CreateCameraSession(napi_env env);
124     CameraSessionNapi();
125     ~CameraSessionNapi();
126 
127     static void CameraSessionNapiDestructor(napi_env env, void* nativeObject, void* finalize_hint);
128     static napi_value CameraSessionNapiConstructor(napi_env env, napi_callback_info info);
129 
130     static napi_value HasFlash(napi_env env, napi_callback_info info);
131     static napi_value IsFlashModeSupported(napi_env env, napi_callback_info info);
132     static napi_value GetFlashMode(napi_env env, napi_callback_info info);
133     static napi_value SetFlashMode(napi_env env, napi_callback_info info);
134     static napi_value IsExposureModeSupported(napi_env env, napi_callback_info info);
135     static napi_value GetExposureMode(napi_env env, napi_callback_info info);
136     static napi_value SetExposureMode(napi_env env, napi_callback_info info);
137     static napi_value SetMeteringPoint(napi_env env, napi_callback_info info);
138     static napi_value GetMeteringPoint(napi_env env, napi_callback_info info);
139     static napi_value GetExposureBiasRange(napi_env env, napi_callback_info info);
140     static napi_value SetExposureBias(napi_env env, napi_callback_info info);
141     static napi_value GetExposureValue(napi_env env, napi_callback_info info);
142     static napi_value IsFocusModeSupported(napi_env env, napi_callback_info info);
143     static napi_value GetFocusMode(napi_env env, napi_callback_info info);
144     static napi_value SetFocusMode(napi_env env, napi_callback_info info);
145     static napi_value SetFocusPoint(napi_env env, napi_callback_info info);
146     static napi_value GetFocusPoint(napi_env env, napi_callback_info info);
147     static napi_value GetFocalLength(napi_env env, napi_callback_info info);
148     static napi_value GetZoomRatioRange(napi_env env, napi_callback_info info);
149     static napi_value GetZoomRatio(napi_env env, napi_callback_info info);
150     static napi_value SetZoomRatio(napi_env env, napi_callback_info info);
151 
152     static napi_value BeginConfig(napi_env env, napi_callback_info info);
153     static napi_value CommitConfig(napi_env env, napi_callback_info info);
154 
155     static napi_value AddInput(napi_env env, napi_callback_info info);
156     static napi_value CanAddInput(napi_env env, napi_callback_info info);
157     static napi_value RemoveInput(napi_env env, napi_callback_info info);
158 
159     static napi_value AddOutput(napi_env env, napi_callback_info info);
160     static napi_value CanAddOutput(napi_env env, napi_callback_info info);
161     static napi_value RemoveOutput(napi_env env, napi_callback_info info);
162 
163     static napi_value Start(napi_env env, napi_callback_info info);
164     static napi_value Stop(napi_env env, napi_callback_info info);
165     static napi_value Release(napi_env env, napi_callback_info info);
166     static napi_value IsVideoStabilizationModeSupported(napi_env env, napi_callback_info info);
167     static napi_value GetActiveVideoStabilizationMode(napi_env env, napi_callback_info info);
168     static napi_value SetVideoStabilizationMode(napi_env env, napi_callback_info info);
169     static napi_value On(napi_env env, napi_callback_info info);
170 
171     static napi_value LockForControl(napi_env env, napi_callback_info info);
172     static napi_value UnlockForControl(napi_env env, napi_callback_info info);
173 
174     napi_env env_;
175     napi_ref wrapper_;
176     sptr<CaptureSession> cameraSession_;
177 
178     static thread_local napi_ref sConstructor_;
179     static thread_local sptr<CaptureSession> sCameraSession_;
180     static thread_local uint32_t cameraSessionTaskId;
181 };
182 
183 struct CameraSessionAsyncContext : public AsyncContext {
184     CameraSessionNapi* objectInfo;
185 
186     SessionAsyncCallbackModes modeForAsync;
187     std::string errorMsg;
188     bool bRetBool;
~CameraSessionAsyncContextCameraSessionAsyncContext189     ~CameraSessionAsyncContext()
190     {
191         objectInfo = nullptr;
192     }
193 };
194 } // namespace CameraStandard
195 } // namespace OHOS
196 #endif /* CAMERA_SESSION_NAPI_H_ */
197