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