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 { 82 currentState = FocusState::UNFOCUSED; 83 } 84 ~FocusCallbackListener() = default; 85 void OnFocusState(FocusState state) override; 86 87 private: 88 void OnFocusStateCallback(FocusState state) const; 89 void OnFocusStateCallbackAsync(FocusState state) const; 90 91 napi_env env_; 92 napi_ref callbackRef_ = nullptr; 93 }; 94 95 struct FocusCallbackInfo { 96 FocusCallback::FocusState state_; 97 const FocusCallbackListener* listener_; FocusCallbackInfoFocusCallbackInfo98 FocusCallbackInfo(FocusCallback::FocusState state, const FocusCallbackListener* listener) 99 : state_(state), listener_(listener) {} 100 }; 101 102 class SessionCallbackListener : public SessionCallback { 103 public: SessionCallbackListener(napi_env env,napi_ref ref)104 SessionCallbackListener(napi_env env, napi_ref ref) : env_(env), callbackRef_(ref) {} 105 ~SessionCallbackListener() = default; 106 void OnError(int32_t errorCode) override; 107 108 private: 109 void OnErrorCallback(int32_t errorCode) const; 110 void OnErrorCallbackAsync(int32_t errorCode) const; 111 112 napi_env env_; 113 napi_ref callbackRef_ = nullptr; 114 }; 115 116 struct SessionCallbackInfo { 117 int32_t errorCode_; 118 const SessionCallbackListener* listener_; SessionCallbackInfoSessionCallbackInfo119 SessionCallbackInfo(int32_t errorCode, const SessionCallbackListener* listener) 120 : errorCode_(errorCode), listener_(listener) {} 121 }; 122 123 class CameraSessionNapi { 124 public: 125 static napi_value Init(napi_env env, napi_value exports); 126 static napi_value CreateCameraSession(napi_env env); 127 CameraSessionNapi(); 128 ~CameraSessionNapi(); 129 130 static void CameraSessionNapiDestructor(napi_env env, void* nativeObject, void* finalize_hint); 131 static napi_value CameraSessionNapiConstructor(napi_env env, napi_callback_info info); 132 133 static napi_value HasFlash(napi_env env, napi_callback_info info); 134 static napi_value IsFlashModeSupported(napi_env env, napi_callback_info info); 135 static napi_value GetFlashMode(napi_env env, napi_callback_info info); 136 static napi_value SetFlashMode(napi_env env, napi_callback_info info); 137 static napi_value IsExposureModeSupported(napi_env env, napi_callback_info info); 138 static napi_value GetExposureMode(napi_env env, napi_callback_info info); 139 static napi_value SetExposureMode(napi_env env, napi_callback_info info); 140 static napi_value SetMeteringPoint(napi_env env, napi_callback_info info); 141 static napi_value GetMeteringPoint(napi_env env, napi_callback_info info); 142 static napi_value GetExposureBiasRange(napi_env env, napi_callback_info info); 143 static napi_value SetExposureBias(napi_env env, napi_callback_info info); 144 static napi_value GetExposureValue(napi_env env, napi_callback_info info); 145 static napi_value IsFocusModeSupported(napi_env env, napi_callback_info info); 146 static napi_value GetFocusMode(napi_env env, napi_callback_info info); 147 static napi_value SetFocusMode(napi_env env, napi_callback_info info); 148 static napi_value SetFocusPoint(napi_env env, napi_callback_info info); 149 static napi_value GetFocusPoint(napi_env env, napi_callback_info info); 150 static napi_value GetFocalLength(napi_env env, napi_callback_info info); 151 static napi_value GetZoomRatioRange(napi_env env, napi_callback_info info); 152 static napi_value GetZoomRatio(napi_env env, napi_callback_info info); 153 static napi_value SetZoomRatio(napi_env env, napi_callback_info info); 154 static napi_value GetSupportedFilters(napi_env env, napi_callback_info info); 155 static napi_value GetFilter(napi_env env, napi_callback_info info); 156 static napi_value SetFilter(napi_env env, napi_callback_info info); 157 static napi_value GetSupportedBeautyTypes(napi_env env, napi_callback_info info); 158 static napi_value GetSupportedBeautyRanges(napi_env env, napi_callback_info info); 159 static napi_value GetBeauty(napi_env env, napi_callback_info info); 160 static napi_value SetBeauty(napi_env env, napi_callback_info info); 161 162 static napi_value BeginConfig(napi_env env, napi_callback_info info); 163 static napi_value CommitConfig(napi_env env, napi_callback_info info); 164 165 static napi_value AddInput(napi_env env, napi_callback_info info); 166 static napi_value CanAddInput(napi_env env, napi_callback_info info); 167 static napi_value RemoveInput(napi_env env, napi_callback_info info); 168 169 static napi_value AddOutput(napi_env env, napi_callback_info info); 170 static napi_value CanAddOutput(napi_env env, napi_callback_info info); 171 static napi_value RemoveOutput(napi_env env, napi_callback_info info); 172 173 static napi_value Start(napi_env env, napi_callback_info info); 174 static napi_value Stop(napi_env env, napi_callback_info info); 175 static napi_value Release(napi_env env, napi_callback_info info); 176 static napi_value IsVideoStabilizationModeSupported(napi_env env, napi_callback_info info); 177 static napi_value GetActiveVideoStabilizationMode(napi_env env, napi_callback_info info); 178 static napi_value SetVideoStabilizationMode(napi_env env, napi_callback_info info); 179 static napi_value On(napi_env env, napi_callback_info info); 180 181 static napi_value LockForControl(napi_env env, napi_callback_info info); 182 static napi_value UnlockForControl(napi_env env, napi_callback_info info); 183 184 napi_env env_; 185 napi_ref wrapper_; 186 sptr<CaptureSession> cameraSession_; 187 188 static thread_local napi_ref sConstructor_; 189 static thread_local sptr<CaptureSession> sCameraSession_; 190 static thread_local uint32_t cameraSessionTaskId; 191 }; 192 193 struct CameraSessionAsyncContext : public AsyncContext { 194 CameraSessionNapi* objectInfo; 195 196 SessionAsyncCallbackModes modeForAsync; 197 std::string errorMsg; 198 bool bRetBool; ~CameraSessionAsyncContextCameraSessionAsyncContext199 ~CameraSessionAsyncContext() 200 { 201 objectInfo = nullptr; 202 } 203 }; 204 } // namespace CameraStandard 205 } // namespace OHOS 206 #endif /* CAMERA_SESSION_NAPI_H_ */ 207