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