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 <memory> 20 #include <mutex> 21 #include <type_traits> 22 #include <unordered_map> 23 #include <unordered_set> 24 25 #include "ability/camera_ability_napi.h" 26 #include "camera_napi_utils.h" 27 #include "capture_scene_const.h" 28 #include "input/camera_device.h" 29 #include "input/camera_input_napi.h" 30 #include "input/camera_manager.h" 31 #include "listener_base.h" 32 #include "output/depth_data_output_napi.h" 33 #include "output/metadata_output_napi.h" 34 #include "output/preview_output_napi.h" 35 #include "output/video_output_napi.h" 36 #include "session/capture_session.h" 37 38 namespace OHOS { 39 namespace CameraStandard { 40 static const char CAMERA_SESSION_NAPI_CLASS_NAME[] = "CaptureSession"; 41 42 class ExposureCallbackListener : public ExposureCallback, public ListenerBase, 43 public std::enable_shared_from_this<ExposureCallbackListener> { 44 public: ExposureCallbackListener(napi_env env)45 ExposureCallbackListener(napi_env env) : ListenerBase(env) {} 46 ~ExposureCallbackListener() = default; 47 void OnExposureState(const ExposureState state) override; 48 49 private: 50 void OnExposureStateCallback(ExposureState state) const; 51 void OnExposureStateCallbackAsync(ExposureState state) const; 52 }; 53 54 struct ExposureCallbackInfo { 55 ExposureCallback::ExposureState state_; 56 weak_ptr<const ExposureCallbackListener> listener_; ExposureCallbackInfoExposureCallbackInfo57 ExposureCallbackInfo(ExposureCallback::ExposureState state, shared_ptr<const ExposureCallbackListener> listener) 58 : state_(state), listener_(listener) {} 59 }; 60 61 class FocusCallbackListener : public FocusCallback, public ListenerBase, 62 public std::enable_shared_from_this<FocusCallbackListener> { 63 public: FocusCallbackListener(napi_env env)64 FocusCallbackListener(napi_env env) : ListenerBase(env) 65 { 66 currentState = FocusState::UNFOCUSED; 67 } 68 ~FocusCallbackListener() = default; 69 void OnFocusState(FocusState state) override; 70 71 private: 72 void OnFocusStateCallback(FocusState state) const; 73 void OnFocusStateCallbackAsync(FocusState state) const; 74 }; 75 76 struct FocusCallbackInfo { 77 FocusCallback::FocusState state_; 78 weak_ptr<const FocusCallbackListener> listener_; FocusCallbackInfoFocusCallbackInfo79 FocusCallbackInfo(FocusCallback::FocusState state, shared_ptr<const FocusCallbackListener> listener) 80 : state_(state), listener_(listener) {} 81 }; 82 83 class MacroStatusCallbackListener : public MacroStatusCallback, public ListenerBase, 84 public std::enable_shared_from_this<MacroStatusCallbackListener> { 85 public: MacroStatusCallbackListener(napi_env env)86 MacroStatusCallbackListener(napi_env env) : ListenerBase(env) {} 87 ~MacroStatusCallbackListener() = default; 88 void OnMacroStatusChanged(MacroStatus status) override; 89 90 private: 91 void OnMacroStatusCallback(MacroStatus status) const; 92 void OnMacroStatusCallbackAsync(MacroStatus status) const; 93 }; 94 95 struct MacroStatusCallbackInfo { 96 MacroStatusCallback::MacroStatus status_; 97 weak_ptr<const MacroStatusCallbackListener> listener_; MacroStatusCallbackInfoMacroStatusCallbackInfo98 MacroStatusCallbackInfo( 99 MacroStatusCallback::MacroStatus status, 100 shared_ptr<const MacroStatusCallbackListener> listener) 101 : status_(status), listener_(listener) 102 {} 103 }; 104 105 class MoonCaptureBoostCallbackListener : public MoonCaptureBoostStatusCallback, public ListenerBase, 106 public std::enable_shared_from_this<MoonCaptureBoostCallbackListener> { 107 public: MoonCaptureBoostCallbackListener(napi_env env)108 MoonCaptureBoostCallbackListener(napi_env env) : ListenerBase(env) {} 109 ~MoonCaptureBoostCallbackListener() = default; 110 void OnMoonCaptureBoostStatusChanged(MoonCaptureBoostStatus status) override; 111 112 private: 113 void OnMoonCaptureBoostStatusCallback(MoonCaptureBoostStatus status) const; 114 void OnMoonCaptureBoostStatusCallbackAsync(MoonCaptureBoostStatus status) const; 115 }; 116 117 struct MoonCaptureBoostStatusCallbackInfo { 118 MoonCaptureBoostStatusCallback::MoonCaptureBoostStatus status_; 119 weak_ptr<const MoonCaptureBoostCallbackListener> listener_; MoonCaptureBoostStatusCallbackInfoMoonCaptureBoostStatusCallbackInfo120 MoonCaptureBoostStatusCallbackInfo( 121 MoonCaptureBoostStatusCallback::MoonCaptureBoostStatus status, 122 shared_ptr<const MoonCaptureBoostCallbackListener> listener) 123 : status_(status), listener_(listener) 124 {} 125 }; 126 127 class FeatureDetectionStatusCallbackListener : public FeatureDetectionStatusCallback, public ListenerBase, 128 public std::enable_shared_from_this<FeatureDetectionStatusCallbackListener> { 129 public: FeatureDetectionStatusCallbackListener(napi_env env)130 FeatureDetectionStatusCallbackListener(napi_env env) : ListenerBase(env) {}; 131 ~FeatureDetectionStatusCallbackListener() = default; 132 void OnFeatureDetectionStatusChanged(SceneFeature feature, FeatureDetectionStatus status) override; 133 bool IsFeatureSubscribed(SceneFeature feature) override; 134 135 private: 136 void OnFeatureDetectionStatusChangedCallback(SceneFeature feature, FeatureDetectionStatus status) const; 137 void OnFeatureDetectionStatusChangedCallbackAsync(SceneFeature feature, FeatureDetectionStatus status) const; 138 }; 139 140 struct FeatureDetectionStatusCallbackInfo { 141 SceneFeature feature_; 142 FeatureDetectionStatusCallback::FeatureDetectionStatus status_; 143 weak_ptr<const FeatureDetectionStatusCallbackListener> listener_; FeatureDetectionStatusCallbackInfoFeatureDetectionStatusCallbackInfo144 FeatureDetectionStatusCallbackInfo(SceneFeature feature, 145 FeatureDetectionStatusCallback::FeatureDetectionStatus status, 146 shared_ptr<const FeatureDetectionStatusCallbackListener> listener) 147 : feature_(feature), status_(status), listener_(listener) 148 {} 149 }; 150 151 class SessionCallbackListener : public SessionCallback, public ListenerBase, 152 public std::enable_shared_from_this<SessionCallbackListener> { 153 public: SessionCallbackListener(napi_env env)154 SessionCallbackListener(napi_env env) : ListenerBase(env) {} 155 ~SessionCallbackListener() = default; 156 void OnError(int32_t errorCode) override; 157 158 private: 159 void OnErrorCallback(int32_t errorCode) const; 160 void OnErrorCallbackAsync(int32_t errorCode) const; 161 }; 162 163 struct SessionCallbackInfo { 164 int32_t errorCode_; 165 weak_ptr<const SessionCallbackListener> listener_; SessionCallbackInfoSessionCallbackInfo166 SessionCallbackInfo(int32_t errorCode, shared_ptr<const SessionCallbackListener> listener) 167 : errorCode_(errorCode), listener_(listener) {} 168 }; 169 170 class SmoothZoomCallbackListener : public SmoothZoomCallback, public ListenerBase, 171 public std::enable_shared_from_this<SmoothZoomCallbackListener> { 172 public: SmoothZoomCallbackListener(napi_env env)173 SmoothZoomCallbackListener(napi_env env) : ListenerBase(env) {} 174 ~SmoothZoomCallbackListener() = default; 175 void OnSmoothZoom(int32_t duration) override; 176 177 private: 178 void OnSmoothZoomCallback(int32_t duration) const; 179 void OnSmoothZoomCallbackAsync(int32_t duration) const; 180 }; 181 182 struct SmoothZoomCallbackInfo { 183 int32_t duration_; 184 weak_ptr<const SmoothZoomCallbackListener> listener_; SmoothZoomCallbackInfoSmoothZoomCallbackInfo185 SmoothZoomCallbackInfo(int32_t duration, shared_ptr<const SmoothZoomCallbackListener> listener) 186 : duration_(duration), listener_(listener) {} 187 }; 188 189 class AbilityCallbackListener : public AbilityCallback, public ListenerBase, 190 public std::enable_shared_from_this<AbilityCallbackListener> { 191 public: AbilityCallbackListener(napi_env env)192 AbilityCallbackListener(napi_env env) : ListenerBase(env) {} 193 ~AbilityCallbackListener() = default; 194 void OnAbilityChange() override; 195 196 private: 197 void OnAbilityChangeCallback() const; 198 void OnAbilityChangeCallbackAsync() const; 199 }; 200 201 struct AbilityCallbackInfo { 202 weak_ptr<const AbilityCallbackListener> listener_; AbilityCallbackInfoAbilityCallbackInfo203 AbilityCallbackInfo(shared_ptr<const AbilityCallbackListener> listener) : listener_(listener) {} 204 }; 205 206 class EffectSuggestionCallbackListener : public EffectSuggestionCallback, public ListenerBase, 207 public std::enable_shared_from_this<EffectSuggestionCallbackListener> { 208 public: EffectSuggestionCallbackListener(napi_env env)209 EffectSuggestionCallbackListener(napi_env env) : ListenerBase(env) {} 210 ~EffectSuggestionCallbackListener() = default; 211 void OnEffectSuggestionChange(EffectSuggestionType effectSuggestionType) override; 212 213 private: 214 void OnEffectSuggestionCallback(EffectSuggestionType effectSuggestionType) const; 215 void OnEffectSuggestionCallbackAsync(EffectSuggestionType effectSuggestionType) const; 216 }; 217 218 struct EffectSuggestionCallbackInfo { 219 EffectSuggestionType effectSuggestionType_; 220 weak_ptr<const EffectSuggestionCallbackListener> listener_; EffectSuggestionCallbackInfoEffectSuggestionCallbackInfo221 EffectSuggestionCallbackInfo(EffectSuggestionType effectSuggestionType, 222 shared_ptr<const EffectSuggestionCallbackListener> listener) 223 : effectSuggestionType_(effectSuggestionType), listener_(listener) {} 224 }; 225 226 class LcdFlashStatusCallbackListener : public LcdFlashStatusCallback, public ListenerBase, 227 public std::enable_shared_from_this<LcdFlashStatusCallbackListener> { 228 public: LcdFlashStatusCallbackListener(napi_env env)229 LcdFlashStatusCallbackListener(napi_env env) : ListenerBase(env) {} 230 ~LcdFlashStatusCallbackListener() = default; 231 void OnLcdFlashStatusChanged(LcdFlashStatusInfo lcdFlashStatusInfo) override; 232 233 private: 234 void OnLcdFlashStatusCallback(LcdFlashStatusInfo lcdFlashStatusInfo) const; 235 void OnLcdFlashStatusCallbackAsync(LcdFlashStatusInfo lcdFlashStatusInfo) const; 236 }; 237 238 struct LcdFlashStatusStatusCallbackInfo { 239 LcdFlashStatusInfo lcdFlashStatusInfo_; 240 weak_ptr<const LcdFlashStatusCallbackListener> listener_; LcdFlashStatusStatusCallbackInfoLcdFlashStatusStatusCallbackInfo241 LcdFlashStatusStatusCallbackInfo(LcdFlashStatusInfo lcdFlashStatusInfo, 242 shared_ptr<const LcdFlashStatusCallbackListener> listener) 243 : lcdFlashStatusInfo_(lcdFlashStatusInfo), listener_(listener) {} 244 }; 245 246 class AutoDeviceSwitchCallbackListener : public AutoDeviceSwitchCallback, public ListenerBase, 247 public std::enable_shared_from_this<AutoDeviceSwitchCallbackListener> { 248 public: AutoDeviceSwitchCallbackListener(napi_env env)249 AutoDeviceSwitchCallbackListener(napi_env env) : ListenerBase(env) {} 250 ~AutoDeviceSwitchCallbackListener() = default; 251 void OnAutoDeviceSwitchStatusChange(bool isDeviceSwitched, bool isDeviceCapabilityChanged) const override; 252 private: 253 void OnAutoDeviceSwitchCallback(bool isDeviceSwitched, bool isDeviceCapabilityChanged) const; 254 void OnAutoDeviceSwitchCallbackAsync(bool isDeviceSwitched, bool isDeviceCapabilityChanged) const; 255 }; 256 257 struct AutoDeviceSwitchCallbackListenerInfo { 258 bool isDeviceSwitched_; 259 bool isDeviceCapabilityChanged_; 260 weak_ptr<const AutoDeviceSwitchCallbackListener> listener_; AutoDeviceSwitchCallbackListenerInfoAutoDeviceSwitchCallbackListenerInfo261 AutoDeviceSwitchCallbackListenerInfo(bool isDeviceSwitched, bool isDeviceCapabilityChanged, 262 shared_ptr<const AutoDeviceSwitchCallbackListener> listener) 263 : isDeviceSwitched_(isDeviceSwitched), isDeviceCapabilityChanged_(isDeviceCapabilityChanged), 264 listener_(listener) {} 265 }; 266 267 class CameraSessionNapi : public CameraNapiEventEmitter<CameraSessionNapi> { 268 public: 269 static napi_value Init(napi_env env, napi_value exports); 270 static napi_value CreateCameraSession(napi_env env); 271 CameraSessionNapi(); 272 ~CameraSessionNapi() override; 273 274 static void CameraSessionNapiDestructor(napi_env env, void* nativeObject, void* finalize_hint); 275 static napi_value CameraSessionNapiConstructor(napi_env env, napi_callback_info info); 276 277 static napi_value HasFlash(napi_env env, napi_callback_info info); 278 static napi_value IsFlashModeSupported(napi_env env, napi_callback_info info); 279 static napi_value GetFlashMode(napi_env env, napi_callback_info info); 280 static napi_value SetFlashMode(napi_env env, napi_callback_info info); 281 static napi_value IsLcdFlashSupported(napi_env env, napi_callback_info info); 282 static napi_value EnableLcdFlash(napi_env env, napi_callback_info info); 283 static napi_value IsExposureModeSupported(napi_env env, napi_callback_info info); 284 static napi_value GetExposureMode(napi_env env, napi_callback_info info); 285 static napi_value SetExposureMode(napi_env env, napi_callback_info info); 286 static napi_value SetMeteringPoint(napi_env env, napi_callback_info info); 287 static napi_value GetMeteringPoint(napi_env env, napi_callback_info info); 288 static napi_value GetJSArgsForCameraOutput(napi_env env, size_t argc, const napi_value argv[], 289 sptr<CaptureOutput> &cameraOutput); 290 static napi_value GetExposureBiasRange(napi_env env, napi_callback_info info); 291 static napi_value SetExposureBias(napi_env env, napi_callback_info info); 292 static napi_value GetExposureValue(napi_env env, napi_callback_info info); 293 static napi_value IsFocusModeSupported(napi_env env, napi_callback_info info); 294 static napi_value GetFocusMode(napi_env env, napi_callback_info info); 295 static napi_value SetFocusMode(napi_env env, napi_callback_info info); 296 static napi_value SetQualityPrioritization(napi_env env, napi_callback_info info); 297 static napi_value SetFocusPoint(napi_env env, napi_callback_info info); 298 static napi_value GetFocusPoint(napi_env env, napi_callback_info info); 299 static napi_value GetFocalLength(napi_env env, napi_callback_info info); 300 static napi_value IsFocusRangeTypeSupported(napi_env env, napi_callback_info info); 301 static napi_value GetFocusRange(napi_env env, napi_callback_info info); 302 static napi_value SetFocusRange(napi_env env, napi_callback_info info); 303 static napi_value IsFocusDrivenTypeSupported(napi_env env, napi_callback_info info); 304 static napi_value GetFocusDriven(napi_env env, napi_callback_info info); 305 static napi_value SetFocusDriven(napi_env env, napi_callback_info info); 306 static napi_value GetSupportedColorReservationTypes(napi_env env, napi_callback_info info); 307 static napi_value GetColorReservation(napi_env env, napi_callback_info info); 308 static napi_value SetColorReservation(napi_env env, napi_callback_info info); 309 static napi_value GetZoomRatioRange(napi_env env, napi_callback_info info); 310 static napi_value GetZoomRatio(napi_env env, napi_callback_info info); 311 static napi_value SetZoomRatio(napi_env env, napi_callback_info info); 312 static napi_value PrepareZoom(napi_env env, napi_callback_info info); 313 static napi_value UnPrepareZoom(napi_env env, napi_callback_info info); 314 static napi_value SetSmoothZoom(napi_env env, napi_callback_info info); 315 static napi_value GetZoomPointInfos(napi_env env, napi_callback_info info); 316 static napi_value GetSupportedFilters(napi_env env, napi_callback_info info); 317 static napi_value GetFilter(napi_env env, napi_callback_info info); 318 static napi_value SetFilter(napi_env env, napi_callback_info info); 319 static napi_value GetSupportedBeautyTypes(napi_env env, napi_callback_info info); 320 static napi_value GetSupportedBeautyRange(napi_env env, napi_callback_info info); 321 static napi_value GetBeauty(napi_env env, napi_callback_info info); 322 static napi_value SetBeauty(napi_env env, napi_callback_info info); 323 static napi_value GetSupportedPortraitThemeTypes(napi_env env, napi_callback_info info); 324 static napi_value IsPortraitThemeSupported(napi_env env, napi_callback_info info); 325 static napi_value SetPortraitThemeType(napi_env env, napi_callback_info info); 326 static napi_value GetSupportedColorSpaces(napi_env env, napi_callback_info info); 327 static napi_value GetActiveColorSpace(napi_env env, napi_callback_info info); 328 static napi_value SetColorSpace(napi_env env, napi_callback_info info); 329 static napi_value GetSupportedColorEffects(napi_env env, napi_callback_info info); 330 static napi_value GetColorEffect(napi_env env, napi_callback_info info); 331 static napi_value SetColorEffect(napi_env env, napi_callback_info info); 332 static napi_value GetFocusDistance(napi_env env, napi_callback_info info); 333 static napi_value SetFocusDistance(napi_env env, napi_callback_info info); 334 static napi_value IsMacroSupported(napi_env env, napi_callback_info info); 335 static napi_value EnableMacro(napi_env env, napi_callback_info info); 336 static napi_value IsDepthFusionSupported(napi_env env, napi_callback_info info); 337 static napi_value GetDepthFusionThreshold(napi_env env, napi_callback_info info); 338 static napi_value IsDepthFusionEnabled(napi_env env, napi_callback_info info); 339 static napi_value EnableDepthFusion(napi_env env, napi_callback_info info); 340 static napi_value CanPreconfig(napi_env env, napi_callback_info info); 341 static napi_value Preconfig(napi_env env, napi_callback_info info); 342 static napi_value IsEffectSuggestionSupported(napi_env env, napi_callback_info info); 343 static napi_value EnableEffectSuggestion(napi_env env, napi_callback_info info); 344 static napi_value GetSupportedEffectSuggestionType(napi_env env, napi_callback_info info); 345 static napi_value SetEffectSuggestionStatus(napi_env env, napi_callback_info info); 346 static napi_value UpdateEffectSuggestion(napi_env env, napi_callback_info info); 347 348 static napi_value IsMoonCaptureBoostSupported(napi_env env, napi_callback_info info); 349 static napi_value EnableMoonCaptureBoost(napi_env env, napi_callback_info info); 350 351 static napi_value IsFeatureSupported(napi_env env, napi_callback_info info); 352 static napi_value EnableFeature(napi_env env, napi_callback_info info); 353 354 static napi_value GetSupportedWhiteBalanceModes(napi_env env, napi_callback_info info); 355 static napi_value IsWhiteBalanceModeSupported(napi_env env, napi_callback_info info); 356 static napi_value GetWhiteBalanceMode(napi_env env, napi_callback_info info); 357 static napi_value SetWhiteBalanceMode(napi_env env, napi_callback_info info); 358 359 static napi_value GetManualWhiteBalanceRange(napi_env env, napi_callback_info info); 360 static napi_value IsManualWhiteBalanceSupported(napi_env env, napi_callback_info info); 361 static napi_value GetManualWhiteBalance(napi_env env, napi_callback_info info); 362 static napi_value SetManualWhiteBalance(napi_env env, napi_callback_info info); 363 364 static napi_value BeginConfig(napi_env env, napi_callback_info info); 365 static napi_value CommitConfig(napi_env env, napi_callback_info info); 366 367 static napi_value AddInput(napi_env env, napi_callback_info info); 368 static napi_value CanAddInput(napi_env env, napi_callback_info info); 369 static napi_value RemoveInput(napi_env env, napi_callback_info info); 370 371 static napi_value AddOutput(napi_env env, napi_callback_info info); 372 static napi_value CanAddOutput(napi_env env, napi_callback_info info); 373 static napi_value RemoveOutput(napi_env env, napi_callback_info info); 374 375 static napi_value Start(napi_env env, napi_callback_info info); 376 static napi_value Stop(napi_env env, napi_callback_info info); 377 static napi_value Release(napi_env env, napi_callback_info info); 378 static napi_value IsVideoStabilizationModeSupported(napi_env env, napi_callback_info info); 379 static napi_value GetActiveVideoStabilizationMode(napi_env env, napi_callback_info info); 380 static napi_value SetVideoStabilizationMode(napi_env env, napi_callback_info info); 381 382 static napi_value GetSupportedVirtualApertures(napi_env env, napi_callback_info info); 383 static napi_value GetVirtualAperture(napi_env env, napi_callback_info info); 384 static napi_value SetVirtualAperture(napi_env env, napi_callback_info info); 385 386 static napi_value GetSupportedPhysicalApertures(napi_env env, napi_callback_info info); 387 static napi_value GetPhysicalAperture(napi_env env, napi_callback_info info); 388 static napi_value SetPhysicalAperture(napi_env env, napi_callback_info info); 389 390 static napi_value LockForControl(napi_env env, napi_callback_info info); 391 static napi_value UnlockForControl(napi_env env, napi_callback_info info); 392 393 static napi_value On(napi_env env, napi_callback_info info); 394 static napi_value Once(napi_env env, napi_callback_info info); 395 static napi_value Off(napi_env env, napi_callback_info info); 396 397 static napi_value GetCameraOutputCapabilities(napi_env env, napi_callback_info info); 398 399 static napi_value GetSessionFunctions(napi_env env, napi_callback_info info); 400 static napi_value GetSessionConflictFunctions(napi_env env, napi_callback_info info); 401 static napi_value CreateFunctionsJSArray( 402 napi_env env, std::vector<sptr<CameraAbility>> functionsList, FunctionsType type); 403 const EmitterFunctions& GetEmitterFunctions() override; 404 static napi_value SetUsage(napi_env env, napi_callback_info info); 405 static napi_value IsAutoDeviceSwitchSupported(napi_env env, napi_callback_info info); 406 static napi_value EnableAutoDeviceSwitch(napi_env env, napi_callback_info info); 407 408 napi_env env_; 409 sptr<CaptureSession> cameraSession_; 410 std::shared_ptr<FocusCallbackListener> focusCallback_; 411 std::shared_ptr<SessionCallbackListener> sessionCallback_; 412 std::shared_ptr<ExposureCallbackListener> exposureCallback_; 413 std::shared_ptr<MacroStatusCallbackListener> macroStatusCallback_; 414 std::shared_ptr<MoonCaptureBoostCallbackListener> moonCaptureBoostCallback_; 415 std::shared_ptr<FeatureDetectionStatusCallbackListener> featureDetectionStatusCallback_; 416 std::shared_ptr<SmoothZoomCallbackListener> smoothZoomCallback_; 417 std::shared_ptr<AbilityCallbackListener> abilityCallback_; 418 std::shared_ptr<EffectSuggestionCallbackListener> effectSuggestionCallback_; 419 std::shared_ptr<LcdFlashStatusCallbackListener> lcdFlashStatusCallback_; 420 std::shared_ptr<AutoDeviceSwitchCallbackListener> autoDeviceSwitchCallback_; 421 422 static thread_local napi_ref sConstructor_; 423 static thread_local sptr<CaptureSession> sCameraSession_; 424 static thread_local uint32_t cameraSessionTaskId; 425 static const std::map<SceneMode, FunctionsType> modeToFunctionTypeMap_; 426 static const std::map<SceneMode, FunctionsType> modeToConflictFunctionTypeMap_; 427 static const std::vector<napi_property_descriptor> camera_output_capability_props; 428 static const std::vector<napi_property_descriptor> camera_ability_props; 429 static const std::vector<napi_property_descriptor> camera_process_props; 430 static const std::vector<napi_property_descriptor> stabilization_props; 431 static const std::vector<napi_property_descriptor> flash_props; 432 static const std::vector<napi_property_descriptor> auto_exposure_props; 433 static const std::vector<napi_property_descriptor> focus_props; 434 static const std::vector<napi_property_descriptor> manual_focus_props; 435 static const std::vector<napi_property_descriptor> zoom_props; 436 static const std::vector<napi_property_descriptor> filter_props; 437 static const std::vector<napi_property_descriptor> beauty_props; 438 static const std::vector<napi_property_descriptor> color_effect_props; 439 static const std::vector<napi_property_descriptor> macro_props; 440 static const std::vector<napi_property_descriptor> depth_fusion_props; 441 static const std::vector<napi_property_descriptor> moon_capture_boost_props; 442 static const std::vector<napi_property_descriptor> features_props; 443 static const std::vector<napi_property_descriptor> color_management_props; 444 static const std::vector<napi_property_descriptor> preconfig_props; 445 static const std::vector<napi_property_descriptor> effect_suggestion_props; 446 static const std::vector<napi_property_descriptor> aperture_props; 447 static const std::vector<napi_property_descriptor> auto_wb_props; 448 static const std::vector<napi_property_descriptor> manual_wb_props; 449 static const std::vector<napi_property_descriptor> auto_switch_props; 450 static const std::vector<napi_property_descriptor> quality_prioritization_props; 451 static const std::vector<napi_property_descriptor> color_reservation_props; 452 453 protected: 454 virtual void RegisterSlowMotionStateCb(const std::string& eventName, napi_env env, napi_value callback, 455 const std::vector<napi_value>& args, bool isOnce); 456 virtual void UnregisterSlowMotionStateCb( 457 const std::string& eventName, napi_env env, napi_value callback, const std::vector<napi_value>& args); 458 459 private: 460 void RegisterExposureCallbackListener(const std::string& eventName, napi_env env, napi_value callback, 461 const std::vector<napi_value>& args, bool isOnce); 462 void UnregisterExposureCallbackListener( 463 const std::string& eventName, napi_env env, napi_value callback, const std::vector<napi_value>& args); 464 void RegisterFocusCallbackListener(const std::string& eventName, napi_env env, napi_value callback, 465 const std::vector<napi_value>& args, bool isOnce); 466 void UnregisterFocusCallbackListener( 467 const std::string& eventName, napi_env env, napi_value callback, const std::vector<napi_value>& args); 468 void RegisterMacroStatusCallbackListener(const std::string& eventName, napi_env env, napi_value callback, 469 const std::vector<napi_value>& args, bool isOnce); 470 void UnregisterMacroStatusCallbackListener( 471 const std::string& eventName, napi_env env, napi_value callback, const std::vector<napi_value>& args); 472 void RegisterMoonCaptureBoostCallbackListener(const std::string& eventName, napi_env env, napi_value callback, 473 const std::vector<napi_value>& args, bool isOnce); 474 void UnregisterMoonCaptureBoostCallbackListener( 475 const std::string& eventName, napi_env env, napi_value callback, const std::vector<napi_value>& args); 476 void RegisterFeatureDetectionStatusListener(const std::string& eventName, napi_env env, napi_value callback, 477 const std::vector<napi_value>& args, bool isOnce); 478 void UnregisterFeatureDetectionStatusListener( 479 const std::string& eventName, napi_env env, napi_value callback, const std::vector<napi_value>& args); 480 void RegisterSessionErrorCallbackListener(const std::string& eventName, napi_env env, napi_value callback, 481 const std::vector<napi_value>& args, bool isOnce); 482 void UnregisterSessionErrorCallbackListener( 483 const std::string& eventName, napi_env env, napi_value callback, const std::vector<napi_value>& args); 484 void RegisterSmoothZoomCallbackListener(const std::string& eventName, napi_env env, napi_value callback, 485 const std::vector<napi_value>& args, bool isOnce); 486 void UnregisterSmoothZoomCallbackListener( 487 const std::string& eventName, napi_env env, napi_value callback, const std::vector<napi_value>& args); 488 void RegisterEffectSuggestionCallbackListener(const std::string& eventName, napi_env env, napi_value callback, 489 const std::vector<napi_value>& args, bool isOnce); 490 void UnregisterEffectSuggestionCallbackListener( 491 const std::string& eventName, napi_env env, napi_value callback, const std::vector<napi_value>& args); 492 493 static const EmitterFunctions fun_map_; 494 protected: 495 virtual void RegisterExposureInfoCallbackListener(const std::string& eventName, 496 napi_env env, napi_value callback, const std::vector<napi_value>& args, bool isOnce); 497 virtual void UnregisterExposureInfoCallbackListener(const std::string& eventName, 498 napi_env env, napi_value callback, const std::vector<napi_value>& args); 499 500 virtual void RegisterAbilityChangeCallbackListener(const std::string& eventName, 501 napi_env env, napi_value callback, const std::vector<napi_value>& args, bool isOnce); 502 virtual void UnregisterAbilityChangeCallbackListener(const std::string& eventName, 503 napi_env env, napi_value callback, const std::vector<napi_value>& args); 504 505 virtual void RegisterIsoInfoCallbackListener(const std::string& eventName, 506 napi_env env, napi_value callback, const std::vector<napi_value>& args, bool isOnce); 507 virtual void UnregisterIsoInfoCallbackListener(const std::string& eventName, 508 napi_env env, napi_value callback, const std::vector<napi_value>& args); 509 510 virtual void RegisterApertureInfoCallbackListener(const std::string& eventName, 511 napi_env env, napi_value callback, const std::vector<napi_value>& args, bool isOnce); 512 virtual void UnregisterApertureInfoCallbackListener(const std::string& eventName, 513 napi_env env, napi_value callback, const std::vector<napi_value>& args); 514 515 virtual void RegisterLuminationInfoCallbackListener(const std::string& eventName, 516 napi_env env, napi_value callback, const std::vector<napi_value>& args, bool isOnce); 517 virtual void UnregisterLuminationInfoCallbackListener(const std::string& eventName, 518 napi_env env, napi_value callback, const std::vector<napi_value>& args); 519 520 virtual void RegisterLightStatusCallbackListener(const std::string& eventName, 521 napi_env env, napi_value callback, const std::vector<napi_value>& args, bool isOnce); 522 virtual void UnregisterLightStatusCallbackListener(const std::string& eventName, 523 napi_env env, napi_value callback, const std::vector<napi_value>& args); 524 525 virtual void RegisterTryAEInfoCallbackListener(const std::string& eventName, 526 napi_env env, napi_value callback, const std::vector<napi_value>& args, bool isOnce); 527 virtual void UnregisterTryAEInfoCallbackListener(const std::string& eventName, 528 napi_env env, napi_value callback, const std::vector<napi_value>& args); 529 530 virtual void RegisterLcdFlashStatusCallbackListener(const std::string& eventName, 531 napi_env env, napi_value callback, const std::vector<napi_value>& args, bool isOnce); 532 virtual void UnregisterLcdFlashStatusCallbackListener(const std::string& eventName, 533 napi_env env, napi_value callback, const std::vector<napi_value>& args); 534 virtual void RegisterAutoDeviceSwitchCallbackListener(const std::string& eventName, 535 napi_env env, napi_value callback, const std::vector<napi_value>& args, bool isOnce); 536 virtual void UnregisterAutoDeviceSwitchCallbackListener(const std::string& eventName, 537 napi_env env, napi_value callback, const std::vector<napi_value>& args); 538 virtual void RegisterFocusTrackingInfoCallbackListener(const std::string& eventName, 539 napi_env env, napi_value callback, const std::vector<napi_value>& args, bool isOnce); 540 virtual void UnregisterFocusTrackingInfoCallbackListener(const std::string& eventName, 541 napi_env env, napi_value callback, const std::vector<napi_value>& args); 542 }; 543 544 struct CameraSessionAsyncContext : public AsyncContext { CameraSessionAsyncContextCameraSessionAsyncContext545 CameraSessionAsyncContext(std::string funcName, int32_t taskId) : AsyncContext(funcName, taskId) {}; 546 CameraSessionNapi* objectInfo = nullptr; 547 std::string errorMsg; 548 }; 549 } // namespace CameraStandard 550 } // namespace OHOS 551 #endif /* CAMERA_SESSION_NAPI_H_ */ 552