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 GetZoomRatioRange(napi_env env, napi_callback_info info);
286     static napi_value GetZoomRatio(napi_env env, napi_callback_info info);
287     static napi_value SetZoomRatio(napi_env env, napi_callback_info info);
288     static napi_value PrepareZoom(napi_env env, napi_callback_info info);
289     static napi_value UnPrepareZoom(napi_env env, napi_callback_info info);
290     static napi_value SetSmoothZoom(napi_env env, napi_callback_info info);
291     static napi_value GetZoomPointInfos(napi_env env, napi_callback_info info);
292     static napi_value GetSupportedFilters(napi_env env, napi_callback_info info);
293     static napi_value GetFilter(napi_env env, napi_callback_info info);
294     static napi_value SetFilter(napi_env env, napi_callback_info info);
295     static napi_value GetSupportedBeautyTypes(napi_env env, napi_callback_info info);
296     static napi_value GetSupportedBeautyRange(napi_env env, napi_callback_info info);
297     static napi_value GetBeauty(napi_env env, napi_callback_info info);
298     static napi_value SetBeauty(napi_env env, napi_callback_info info);
299     static napi_value GetSupportedPortraitThemeTypes(napi_env env, napi_callback_info info);
300     static napi_value IsPortraitThemeSupported(napi_env env, napi_callback_info info);
301     static napi_value SetPortraitThemeType(napi_env env, napi_callback_info info);
302     static napi_value GetSupportedColorSpaces(napi_env env, napi_callback_info info);
303     static napi_value GetActiveColorSpace(napi_env env, napi_callback_info info);
304     static napi_value SetColorSpace(napi_env env, napi_callback_info info);
305     static napi_value GetSupportedColorEffects(napi_env env, napi_callback_info info);
306     static napi_value GetColorEffect(napi_env env, napi_callback_info info);
307     static napi_value SetColorEffect(napi_env env, napi_callback_info info);
308     static napi_value GetFocusDistance(napi_env env, napi_callback_info info);
309     static napi_value SetFocusDistance(napi_env env, napi_callback_info info);
310     static napi_value IsMacroSupported(napi_env env, napi_callback_info info);
311     static napi_value EnableMacro(napi_env env, napi_callback_info info);
312     static napi_value IsDepthFusionSupported(napi_env env, napi_callback_info info);
313     static napi_value GetDepthFusionThreshold(napi_env env, napi_callback_info info);
314     static napi_value IsDepthFusionEnabled(napi_env env, napi_callback_info info);
315     static napi_value EnableDepthFusion(napi_env env, napi_callback_info info);
316     static napi_value CanPreconfig(napi_env env, napi_callback_info info);
317     static napi_value Preconfig(napi_env env, napi_callback_info info);
318     static napi_value IsEffectSuggestionSupported(napi_env env, napi_callback_info info);
319     static napi_value EnableEffectSuggestion(napi_env env, napi_callback_info info);
320     static napi_value GetSupportedEffectSuggestionType(napi_env env, napi_callback_info info);
321     static napi_value SetEffectSuggestionStatus(napi_env env, napi_callback_info info);
322     static napi_value UpdateEffectSuggestion(napi_env env, napi_callback_info info);
323 
324     static napi_value IsMoonCaptureBoostSupported(napi_env env, napi_callback_info info);
325     static napi_value EnableMoonCaptureBoost(napi_env env, napi_callback_info info);
326 
327     static napi_value IsFeatureSupported(napi_env env, napi_callback_info info);
328     static napi_value EnableFeature(napi_env env, napi_callback_info info);
329 
330     static napi_value GetSupportedWhiteBalanceModes(napi_env env, napi_callback_info info);
331     static napi_value IsWhiteBalanceModeSupported(napi_env env, napi_callback_info info);
332     static napi_value GetWhiteBalanceMode(napi_env env, napi_callback_info info);
333     static napi_value SetWhiteBalanceMode(napi_env env, napi_callback_info info);
334 
335     static napi_value GetManualWhiteBalanceRange(napi_env env, napi_callback_info info);
336     static napi_value IsManualWhiteBalanceSupported(napi_env env, napi_callback_info info);
337     static napi_value GetManualWhiteBalance(napi_env env, napi_callback_info info);
338     static napi_value SetManualWhiteBalance(napi_env env, napi_callback_info info);
339 
340     static napi_value BeginConfig(napi_env env, napi_callback_info info);
341     static napi_value CommitConfig(napi_env env, napi_callback_info info);
342 
343     static napi_value AddInput(napi_env env, napi_callback_info info);
344     static napi_value CanAddInput(napi_env env, napi_callback_info info);
345     static napi_value RemoveInput(napi_env env, napi_callback_info info);
346 
347     static napi_value AddOutput(napi_env env, napi_callback_info info);
348     static napi_value CanAddOutput(napi_env env, napi_callback_info info);
349     static napi_value RemoveOutput(napi_env env, napi_callback_info info);
350 
351     static napi_value Start(napi_env env, napi_callback_info info);
352     static napi_value Stop(napi_env env, napi_callback_info info);
353     static napi_value Release(napi_env env, napi_callback_info info);
354     static napi_value IsVideoStabilizationModeSupported(napi_env env, napi_callback_info info);
355     static napi_value GetActiveVideoStabilizationMode(napi_env env, napi_callback_info info);
356     static napi_value SetVideoStabilizationMode(napi_env env, napi_callback_info info);
357 
358     static napi_value GetSupportedVirtualApertures(napi_env env, napi_callback_info info);
359     static napi_value GetVirtualAperture(napi_env env, napi_callback_info info);
360     static napi_value SetVirtualAperture(napi_env env, napi_callback_info info);
361 
362     static napi_value GetSupportedPhysicalApertures(napi_env env, napi_callback_info info);
363     static napi_value GetPhysicalAperture(napi_env env, napi_callback_info info);
364     static napi_value SetPhysicalAperture(napi_env env, napi_callback_info info);
365 
366     static napi_value LockForControl(napi_env env, napi_callback_info info);
367     static napi_value UnlockForControl(napi_env env, napi_callback_info info);
368 
369     static napi_value On(napi_env env, napi_callback_info info);
370     static napi_value Once(napi_env env, napi_callback_info info);
371     static napi_value Off(napi_env env, napi_callback_info info);
372 
373     static napi_value GetCameraOutputCapabilities(napi_env env, napi_callback_info info);
374 
375     static napi_value GetSessionFunctions(napi_env env, napi_callback_info info);
376     static napi_value GetSessionConflictFunctions(napi_env env, napi_callback_info info);
377     static napi_value CreateFunctionsJSArray(
378         napi_env env, std::vector<sptr<CameraAbility>> functionsList, FunctionsType type);
379     const EmitterFunctions& GetEmitterFunctions() override;
380     static napi_value IsAutoDeviceSwitchSupported(napi_env env, napi_callback_info info);
381     static napi_value EnableAutoDeviceSwitch(napi_env env, napi_callback_info info);
382     static napi_value SetUsage(napi_env env, napi_callback_info info);
383 
384     napi_env env_;
385     sptr<CaptureSession> cameraSession_;
386     std::shared_ptr<FocusCallbackListener> focusCallback_;
387     std::shared_ptr<SessionCallbackListener> sessionCallback_;
388     std::shared_ptr<ExposureCallbackListener> exposureCallback_;
389     std::shared_ptr<MacroStatusCallbackListener> macroStatusCallback_;
390     std::shared_ptr<MoonCaptureBoostCallbackListener> moonCaptureBoostCallback_;
391     std::shared_ptr<FeatureDetectionStatusCallbackListener> featureDetectionStatusCallback_;
392     std::shared_ptr<SmoothZoomCallbackListener> smoothZoomCallback_;
393     std::shared_ptr<AbilityCallbackListener> abilityCallback_;
394     std::shared_ptr<EffectSuggestionCallbackListener> effectSuggestionCallback_;
395     std::shared_ptr<LcdFlashStatusCallbackListener> lcdFlashStatusCallback_;
396     std::shared_ptr<AutoDeviceSwitchCallbackListener> autoDeviceSwitchCallback_;
397 
398     static thread_local napi_ref sConstructor_;
399     static thread_local sptr<CaptureSession> sCameraSession_;
400     static thread_local uint32_t cameraSessionTaskId;
401     static const std::map<SceneMode, FunctionsType> modeToFunctionTypeMap_;
402     static const std::map<SceneMode, FunctionsType> modeToConflictFunctionTypeMap_;
403     static const std::vector<napi_property_descriptor> camera_output_capability_props;
404     static const std::vector<napi_property_descriptor> camera_ability_props;
405     static const std::vector<napi_property_descriptor> camera_process_props;
406     static const std::vector<napi_property_descriptor> stabilization_props;
407     static const std::vector<napi_property_descriptor> flash_props;
408     static const std::vector<napi_property_descriptor> auto_exposure_props;
409     static const std::vector<napi_property_descriptor> focus_props;
410     static const std::vector<napi_property_descriptor> manual_focus_props;
411     static const std::vector<napi_property_descriptor> zoom_props;
412     static const std::vector<napi_property_descriptor> filter_props;
413     static const std::vector<napi_property_descriptor> beauty_props;
414     static const std::vector<napi_property_descriptor> color_effect_props;
415     static const std::vector<napi_property_descriptor> macro_props;
416     static const std::vector<napi_property_descriptor> depth_fusion_props;
417     static const std::vector<napi_property_descriptor> moon_capture_boost_props;
418     static const std::vector<napi_property_descriptor> features_props;
419     static const std::vector<napi_property_descriptor> color_management_props;
420     static const std::vector<napi_property_descriptor> preconfig_props;
421     static const std::vector<napi_property_descriptor> effect_suggestion_props;
422     static const std::vector<napi_property_descriptor> aperture_props;
423     static const std::vector<napi_property_descriptor> auto_wb_props;
424     static const std::vector<napi_property_descriptor> manual_wb_props;
425     static const std::vector<napi_property_descriptor> auto_switch_props;
426     static const std::vector<napi_property_descriptor> quality_prioritization_props;
427 
428 protected:
429     virtual void RegisterSlowMotionStateCb(const std::string& eventName, napi_env env, napi_value callback,
430         const std::vector<napi_value>& args, bool isOnce);
431     virtual void UnregisterSlowMotionStateCb(
432         const std::string& eventName, napi_env env, napi_value callback, const std::vector<napi_value>& args);
433 
434 private:
435     void RegisterExposureCallbackListener(const std::string& eventName, napi_env env, napi_value callback,
436         const std::vector<napi_value>& args, bool isOnce);
437     void UnregisterExposureCallbackListener(
438         const std::string& eventName, napi_env env, napi_value callback, const std::vector<napi_value>& args);
439     void RegisterFocusCallbackListener(const std::string& eventName, napi_env env, napi_value callback,
440         const std::vector<napi_value>& args, bool isOnce);
441     void UnregisterFocusCallbackListener(
442         const std::string& eventName, napi_env env, napi_value callback, const std::vector<napi_value>& args);
443     void RegisterMacroStatusCallbackListener(const std::string& eventName, napi_env env, napi_value callback,
444         const std::vector<napi_value>& args, bool isOnce);
445     void UnregisterMacroStatusCallbackListener(
446         const std::string& eventName, napi_env env, napi_value callback, const std::vector<napi_value>& args);
447     void RegisterMoonCaptureBoostCallbackListener(const std::string& eventName, napi_env env, napi_value callback,
448         const std::vector<napi_value>& args, bool isOnce);
449     void UnregisterMoonCaptureBoostCallbackListener(
450         const std::string& eventName, napi_env env, napi_value callback, const std::vector<napi_value>& args);
451     void RegisterFeatureDetectionStatusListener(const std::string& eventName, napi_env env, napi_value callback,
452         const std::vector<napi_value>& args, bool isOnce);
453     void UnregisterFeatureDetectionStatusListener(
454         const std::string& eventName, napi_env env, napi_value callback, const std::vector<napi_value>& args);
455     void RegisterSessionErrorCallbackListener(const std::string& eventName, napi_env env, napi_value callback,
456         const std::vector<napi_value>& args, bool isOnce);
457     void UnregisterSessionErrorCallbackListener(
458         const std::string& eventName, napi_env env, napi_value callback, const std::vector<napi_value>& args);
459     void RegisterSmoothZoomCallbackListener(const std::string& eventName, napi_env env, napi_value callback,
460         const std::vector<napi_value>& args, bool isOnce);
461     void UnregisterSmoothZoomCallbackListener(
462         const std::string& eventName, napi_env env, napi_value callback, const std::vector<napi_value>& args);
463     void RegisterEffectSuggestionCallbackListener(const std::string& eventName, napi_env env, napi_value callback,
464         const std::vector<napi_value>& args, bool isOnce);
465     void UnregisterEffectSuggestionCallbackListener(
466         const std::string& eventName, napi_env env, napi_value callback, const std::vector<napi_value>& args);
467 
468     static const EmitterFunctions fun_map_;
469 protected:
470     virtual void RegisterExposureInfoCallbackListener(const std::string& eventName,
471         napi_env env, napi_value callback, const std::vector<napi_value>& args, bool isOnce);
472     virtual void UnregisterExposureInfoCallbackListener(const std::string& eventName,
473         napi_env env, napi_value callback, const std::vector<napi_value>& args);
474 
475     virtual void RegisterAbilityChangeCallbackListener(const std::string& eventName,
476         napi_env env, napi_value callback, const std::vector<napi_value>& args, bool isOnce);
477     virtual void UnregisterAbilityChangeCallbackListener(const std::string& eventName,
478         napi_env env, napi_value callback, const std::vector<napi_value>& args);
479 
480     virtual void RegisterIsoInfoCallbackListener(const std::string& eventName,
481         napi_env env, napi_value callback, const std::vector<napi_value>& args, bool isOnce);
482     virtual void UnregisterIsoInfoCallbackListener(const std::string& eventName,
483         napi_env env, napi_value callback, const std::vector<napi_value>& args);
484 
485     virtual void RegisterApertureInfoCallbackListener(const std::string& eventName,
486         napi_env env, napi_value callback, const std::vector<napi_value>& args, bool isOnce);
487     virtual void UnregisterApertureInfoCallbackListener(const std::string& eventName,
488         napi_env env, napi_value callback, const std::vector<napi_value>& args);
489 
490     virtual void RegisterLuminationInfoCallbackListener(const std::string& eventName,
491         napi_env env, napi_value callback, const std::vector<napi_value>& args, bool isOnce);
492     virtual void UnregisterLuminationInfoCallbackListener(const std::string& eventName,
493         napi_env env, napi_value callback, const std::vector<napi_value>& args);
494 
495     virtual void RegisterTryAEInfoCallbackListener(const std::string& eventName,
496         napi_env env, napi_value callback, const std::vector<napi_value>& args, bool isOnce);
497     virtual void UnregisterTryAEInfoCallbackListener(const std::string& eventName,
498         napi_env env, napi_value callback, const std::vector<napi_value>& args);
499 
500     virtual void RegisterLcdFlashStatusCallbackListener(const std::string& eventName,
501         napi_env env, napi_value callback, const std::vector<napi_value>& args, bool isOnce);
502     virtual void UnregisterLcdFlashStatusCallbackListener(const std::string& eventName,
503         napi_env env, napi_value callback, const std::vector<napi_value>& args);
504     virtual void RegisterAutoDeviceSwitchCallbackListener(const std::string& eventName,
505         napi_env env, napi_value callback, const std::vector<napi_value>& args, bool isOnce);
506     virtual void UnregisterAutoDeviceSwitchCallbackListener(const std::string& eventName,
507         napi_env env, napi_value callback, const std::vector<napi_value>& args);
508 };
509 
510 struct CameraSessionAsyncContext : public AsyncContext {
CameraSessionAsyncContextCameraSessionAsyncContext511     CameraSessionAsyncContext(std::string funcName, int32_t taskId) : AsyncContext(funcName, taskId) {};
512     CameraSessionNapi* objectInfo = nullptr;
513     std::string errorMsg;
514 };
515 } // namespace CameraStandard
516 } // namespace OHOS
517 #endif /* CAMERA_SESSION_NAPI_H_ */
518