• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2025 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 <uv.h>
25 
26 #include "camera_napi_event_emitter.h"
27 #include "input/camera_manager.h"
28 #include "listener_base.h"
29 #include "session/capture_session.h"
30 
31 namespace OHOS {
32 namespace CameraStandard {
33 static const char CAMERA_SESSION_NAPI_CLASS_NAME[] = "CaptureSession";
34 
35 class ExposureCallbackListener : public ExposureCallback, public ListenerBase,
36     public std::enable_shared_from_this<ExposureCallbackListener> {
37 public:
ExposureCallbackListener(napi_env env)38     ExposureCallbackListener(napi_env env) : ListenerBase(env) {}
39     ~ExposureCallbackListener() = default;
40     void OnExposureState(const ExposureState state) override;
41 
42 private:
43     void OnExposureStateCallback(ExposureState state) const;
44     void OnExposureStateCallbackAsync(ExposureState state) const;
45 };
46 
47 struct ExposureCallbackInfo {
48     ExposureCallback::ExposureState state_;
49     weak_ptr<const ExposureCallbackListener> listener_;
ExposureCallbackInfoExposureCallbackInfo50     ExposureCallbackInfo(ExposureCallback::ExposureState state, shared_ptr<const ExposureCallbackListener> listener)
51         : state_(state), listener_(listener) {}
52 };
53 
54 class FocusCallbackListener : public FocusCallback, public ListenerBase,
55     public std::enable_shared_from_this<FocusCallbackListener> {
56 public:
FocusCallbackListener(napi_env env)57     FocusCallbackListener(napi_env env) : ListenerBase(env)
58     {
59         currentState = FocusState::UNFOCUSED;
60     }
61     ~FocusCallbackListener() = default;
62     void OnFocusState(FocusState state) override;
63 
64 private:
65     void OnFocusStateCallback(FocusState state) const;
66     void OnFocusStateCallbackAsync(FocusState state) const;
67 };
68 
69 struct FocusCallbackInfo {
70     FocusCallback::FocusState state_;
71     weak_ptr<const FocusCallbackListener> listener_;
FocusCallbackInfoFocusCallbackInfo72     FocusCallbackInfo(FocusCallback::FocusState state, shared_ptr<const FocusCallbackListener> listener)
73         : state_(state), listener_(listener) {}
74 };
75 
76 class MoonCaptureBoostCallbackListener : public MoonCaptureBoostStatusCallback, public ListenerBase,
77     public std::enable_shared_from_this<MoonCaptureBoostCallbackListener> {
78 public:
MoonCaptureBoostCallbackListener(napi_env env)79     MoonCaptureBoostCallbackListener(napi_env env) : ListenerBase(env) {}
80     ~MoonCaptureBoostCallbackListener() = default;
81     void OnMoonCaptureBoostStatusChanged(MoonCaptureBoostStatus status) override;
82 
83 private:
84     void OnMoonCaptureBoostStatusCallback(MoonCaptureBoostStatus status) const;
85     void OnMoonCaptureBoostStatusCallbackAsync(MoonCaptureBoostStatus status) const;
86 };
87 
88 struct MoonCaptureBoostStatusCallbackInfo {
89     MoonCaptureBoostStatusCallback::MoonCaptureBoostStatus status_;
90     weak_ptr<const MoonCaptureBoostCallbackListener> listener_;
MoonCaptureBoostStatusCallbackInfoMoonCaptureBoostStatusCallbackInfo91     MoonCaptureBoostStatusCallbackInfo(
92         MoonCaptureBoostStatusCallback::MoonCaptureBoostStatus status,
93             shared_ptr<const MoonCaptureBoostCallbackListener> listener)
94         : status_(status), listener_(listener)
95     {}
96 };
97 
98 class SessionCallbackListener : public SessionCallback, public ListenerBase,
99     public std::enable_shared_from_this<SessionCallbackListener> {
100 public:
SessionCallbackListener(napi_env env)101     SessionCallbackListener(napi_env env) : ListenerBase(env) {}
102     ~SessionCallbackListener() = default;
103     void OnError(int32_t errorCode) override;
104 
105 private:
106     void OnErrorCallback(int32_t errorCode) const;
107     void OnErrorCallbackAsync(int32_t errorCode) const;
108 };
109 
110 class PressureCallbackListener : public PressureCallback, public ListenerBase,
111     public std::enable_shared_from_this<PressureCallbackListener> {
112 public:
PressureCallbackListener(napi_env env)113     PressureCallbackListener(napi_env env) : ListenerBase(env) {}
114     ~PressureCallbackListener() = default;
115     void OnPressureStatusChanged(PressureStatus status) override;
116 
117 private:
118     void OnPressureCallback(PressureStatus status) const;
119     void OnPressureCallbackAsync(PressureStatus status) const;
120 };
121 
122 class ControlCenterEffectStatusCallbackListener : public ControlCenterEffectCallback, public ListenerBase,
123     public std::enable_shared_from_this<ControlCenterEffectStatusCallbackListener> {
124 public:
ControlCenterEffectStatusCallbackListener(napi_env env)125     ControlCenterEffectStatusCallbackListener(napi_env env) : ListenerBase(env) {}
126     ~ControlCenterEffectStatusCallbackListener() = default;
127     void OnControlCenterEffectStatusChanged(ControlCenterStatusInfo controlCenterStatusInfo) override;
128 
129 private:
130     void OnControlCenterEffectStatusCallback(ControlCenterStatusInfo controlCenterStatusInfo) const;
131     void OnControlCenterEffectStatusCallbackAsync(ControlCenterStatusInfo controlCenterStatusInfo) const;
132 };
133 
134 struct SessionCallbackInfo {
135     int32_t errorCode_;
136     weak_ptr<const SessionCallbackListener> listener_;
SessionCallbackInfoSessionCallbackInfo137     SessionCallbackInfo(int32_t errorCode, shared_ptr<const SessionCallbackListener> listener)
138         : errorCode_(errorCode), listener_(listener) {}
139 };
140 
141 struct PressureCallbackInfo {
142     PressureStatus status_;
143     weak_ptr<const PressureCallbackListener> listener_;
PressureCallbackInfoPressureCallbackInfo144     PressureCallbackInfo(PressureStatus status, shared_ptr<const PressureCallbackListener> listener)
145         : status_(status), listener_(listener) {}
146 };
147 
148 struct ControlCenterEffectCallbackInfo {
149     ControlCenterStatusInfo statusInfo_;
150     weak_ptr<const ControlCenterEffectStatusCallbackListener> listener_;
ControlCenterEffectCallbackInfoControlCenterEffectCallbackInfo151     ControlCenterEffectCallbackInfo(ControlCenterStatusInfo statusInfo,
152         shared_ptr<const ControlCenterEffectStatusCallbackListener> listener)
153         : statusInfo_(statusInfo), listener_(listener) {}
154 };
155 
156 class SmoothZoomCallbackListener : public SmoothZoomCallback, public ListenerBase,
157     public std::enable_shared_from_this<SmoothZoomCallbackListener> {
158 public:
SmoothZoomCallbackListener(napi_env env)159     SmoothZoomCallbackListener(napi_env env) : ListenerBase(env) {}
160     ~SmoothZoomCallbackListener() = default;
161     void OnSmoothZoom(int32_t duration) override;
162 
163 private:
164     void OnSmoothZoomCallback(int32_t duration) const;
165     void OnSmoothZoomCallbackAsync(int32_t duration) const;
166 };
167 
168 struct SmoothZoomCallbackInfo {
169     int32_t duration_;
170     weak_ptr<const SmoothZoomCallbackListener> listener_;
SmoothZoomCallbackInfoSmoothZoomCallbackInfo171     SmoothZoomCallbackInfo(int32_t duration, shared_ptr<const SmoothZoomCallbackListener> listener)
172         : duration_(duration), listener_(listener) {}
173 };
174 
175 class AbilityCallbackListener : public AbilityCallback, public ListenerBase,
176     public std::enable_shared_from_this<AbilityCallbackListener> {
177 public:
AbilityCallbackListener(napi_env env)178     AbilityCallbackListener(napi_env env) : ListenerBase(env) {}
179     ~AbilityCallbackListener() = default;
180     void OnAbilityChange() override;
181 
182 private:
183     void OnAbilityChangeCallback() const;
184     void OnAbilityChangeCallbackAsync() const;
185 };
186 
187 struct AbilityCallbackInfo {
188     weak_ptr<const AbilityCallbackListener> listener_;
AbilityCallbackInfoAbilityCallbackInfo189     AbilityCallbackInfo(shared_ptr<const AbilityCallbackListener> listener) : listener_(listener) {}
190 };
191 
192 class AutoDeviceSwitchCallbackListener : public AutoDeviceSwitchCallback, public ListenerBase,
193     public std::enable_shared_from_this<AutoDeviceSwitchCallbackListener> {
194 public:
AutoDeviceSwitchCallbackListener(napi_env env)195     AutoDeviceSwitchCallbackListener(napi_env env) : ListenerBase(env) {}
196     ~AutoDeviceSwitchCallbackListener() = default;
197     void OnAutoDeviceSwitchStatusChange(bool isDeviceSwitched, bool isDeviceCapabilityChanged) const override;
198 private:
199     void OnAutoDeviceSwitchCallback(bool isDeviceSwitched, bool isDeviceCapabilityChanged) const;
200     void OnAutoDeviceSwitchCallbackAsync(bool isDeviceSwitched, bool isDeviceCapabilityChanged) const;
201 };
202 
203 struct AutoDeviceSwitchCallbackListenerInfo {
204     bool isDeviceSwitched_;
205     bool isDeviceCapabilityChanged_;
206     weak_ptr<const AutoDeviceSwitchCallbackListener> listener_;
AutoDeviceSwitchCallbackListenerInfoAutoDeviceSwitchCallbackListenerInfo207     AutoDeviceSwitchCallbackListenerInfo(bool isDeviceSwitched, bool isDeviceCapabilityChanged,
208         shared_ptr<const AutoDeviceSwitchCallbackListener> listener)
209         : isDeviceSwitched_(isDeviceSwitched), isDeviceCapabilityChanged_(isDeviceCapabilityChanged),
210         listener_(listener) {}
211 };
212 
213 class MacroStatusCallbackListener : public MacroStatusCallback, public ListenerBase,
214     public std::enable_shared_from_this<MacroStatusCallbackListener> {
215 public:
MacroStatusCallbackListener(napi_env env)216     MacroStatusCallbackListener(napi_env env) : ListenerBase(env) {}
217     ~MacroStatusCallbackListener() = default;
218     void OnMacroStatusChanged(MacroStatus status) override;
219 
220 private:
221     void OnMacroStatusCallback(MacroStatus status) const;
222     void OnMacroStatusCallbackAsync(MacroStatus status) const;
223 };
224 
225 struct MacroStatusCallbackInfo {
226     MacroStatusCallback::MacroStatus status_;
227     weak_ptr<const MacroStatusCallbackListener> listener_;
MacroStatusCallbackInfoMacroStatusCallbackInfo228     MacroStatusCallbackInfo(
229         MacroStatusCallback::MacroStatus status,
230             shared_ptr<const MacroStatusCallbackListener> listener)
231         : status_(status), listener_(listener)
232     {}
233 };
234 
235 class CameraSessionNapi : public CameraNapiEventEmitter<CameraSessionNapi> {
236 public:
237     static void Init(napi_env env);
238     static napi_value CreateCameraSession(napi_env env);
239     CameraSessionNapi();
240     ~CameraSessionNapi() override;
241 
242     static void CameraSessionNapiDestructor(napi_env env, void* nativeObject, void* finalize_hint);
243     static napi_value CameraSessionNapiConstructor(napi_env env, napi_callback_info info);
244 
245     static napi_value HasFlash(napi_env env, napi_callback_info info);
246     static napi_value IsFlashModeSupported(napi_env env, napi_callback_info info);
247     static napi_value GetFlashMode(napi_env env, napi_callback_info info);
248     static napi_value SetFlashMode(napi_env env, napi_callback_info info);
249     static napi_value IsLcdFlashSupported(napi_env env, napi_callback_info info);
250     static napi_value EnableLcdFlash(napi_env env, napi_callback_info info);
251     static napi_value IsExposureModeSupported(napi_env env, napi_callback_info info);
252     static napi_value GetExposureMode(napi_env env, napi_callback_info info);
253     static napi_value SetExposureMode(napi_env env, napi_callback_info info);
254     static napi_value SetMeteringPoint(napi_env env, napi_callback_info info);
255     static napi_value GetMeteringPoint(napi_env env, napi_callback_info info);
256     static napi_value GetJSArgsForCameraOutput(napi_env env, size_t argc, const napi_value argv[],
257         sptr<CaptureOutput> &cameraOutput);
258     static napi_value GetExposureBiasRange(napi_env env, napi_callback_info info);
259     static napi_value SetExposureBias(napi_env env, napi_callback_info info);
260     static napi_value GetExposureValue(napi_env env, napi_callback_info info);
261     static napi_value IsFocusModeSupported(napi_env env, napi_callback_info info);
262     static napi_value GetFocusMode(napi_env env, napi_callback_info info);
263     static napi_value SetFocusMode(napi_env env, napi_callback_info info);
264     static napi_value SetQualityPrioritization(napi_env env, napi_callback_info info);
265     static napi_value SetFocusPoint(napi_env env, napi_callback_info info);
266     static napi_value GetFocusPoint(napi_env env, napi_callback_info info);
267     static napi_value GetFocalLength(napi_env env, napi_callback_info info);
268     static napi_value IsFocusRangeTypeSupported(napi_env env, napi_callback_info info);
269     static napi_value GetFocusRange(napi_env env, napi_callback_info info);
270     static napi_value SetFocusRange(napi_env env, napi_callback_info info);
271     static napi_value IsFocusDrivenTypeSupported(napi_env env, napi_callback_info info);
272     static napi_value GetFocusDriven(napi_env env, napi_callback_info info);
273     static napi_value SetFocusDriven(napi_env env, napi_callback_info info);
274     static napi_value GetZoomRatioRange(napi_env env, napi_callback_info info);
275     static napi_value GetZoomRatio(napi_env env, napi_callback_info info);
276     static napi_value SetZoomRatio(napi_env env, napi_callback_info info);
277     static napi_value IsZoomCenterPointSupported(napi_env env, napi_callback_info info);
278     static napi_value GetZoomCenterPoint(napi_env env, napi_callback_info info);
279     static napi_value SetZoomCenterPoint(napi_env env, napi_callback_info info);
280     static napi_value PrepareZoom(napi_env env, napi_callback_info info);
281     static napi_value UnPrepareZoom(napi_env env, napi_callback_info info);
282     static napi_value SetSmoothZoom(napi_env env, napi_callback_info info);
283     static napi_value GetZoomPointInfos(napi_env env, napi_callback_info info);
284     static napi_value GetSupportedFilters(napi_env env, napi_callback_info info);
285     static napi_value GetFilter(napi_env env, napi_callback_info info);
286     static napi_value SetFilter(napi_env env, napi_callback_info info);
287     static napi_value GetSupportedBeautyTypes(napi_env env, napi_callback_info info);
288     static napi_value GetSupportedBeautyRange(napi_env env, napi_callback_info info);
289     static napi_value GetBeauty(napi_env env, napi_callback_info info);
290     static napi_value SetBeauty(napi_env env, napi_callback_info info);
291     static napi_value GetSupportedColorSpaces(napi_env env, napi_callback_info info);
292     static napi_value IsControlCenterSupported(napi_env env, napi_callback_info info);
293     static napi_value GetSupportedEffectTypes(napi_env env, napi_callback_info info);
294     static napi_value EnableControlCenter(napi_env env, napi_callback_info info);
295     static napi_value GetActiveColorSpace(napi_env env, napi_callback_info info);
296     static napi_value SetColorSpace(napi_env env, napi_callback_info info);
297     static napi_value IsMacroSupported(napi_env env, napi_callback_info info);
298     static napi_value EnableMacro(napi_env env, napi_callback_info info);
299     static napi_value CanPreconfig(napi_env env, napi_callback_info info);
300     static napi_value Preconfig(napi_env env, napi_callback_info info);
301 
302     static napi_value IsMoonCaptureBoostSupported(napi_env env, napi_callback_info info);
303     static napi_value EnableMoonCaptureBoost(napi_env env, napi_callback_info info);
304 
305     static napi_value GetSupportedWhiteBalanceModes(napi_env env, napi_callback_info info);
306     static napi_value IsWhiteBalanceModeSupported(napi_env env, napi_callback_info info);
307     static napi_value GetWhiteBalanceMode(napi_env env, napi_callback_info info);
308     static napi_value SetWhiteBalanceMode(napi_env env, napi_callback_info info);
309 
310     static napi_value GetWhiteBalanceRange(napi_env env, napi_callback_info info);
311     static napi_value IsManualWhiteBalanceSupported(napi_env env, napi_callback_info info);
312     static napi_value GetWhiteBalance(napi_env env, napi_callback_info info);
313     static napi_value SetWhiteBalance(napi_env env, napi_callback_info info);
314 
315     static napi_value BeginConfig(napi_env env, napi_callback_info info);
316     static napi_value CommitConfig(napi_env env, napi_callback_info info);
317 
318     static napi_value AddInput(napi_env env, napi_callback_info info);
319     static napi_value CanAddInput(napi_env env, napi_callback_info info);
320     static napi_value RemoveInput(napi_env env, napi_callback_info info);
321 
322     static napi_value AddOutput(napi_env env, napi_callback_info info);
323     static napi_value CanAddOutput(napi_env env, napi_callback_info info);
324     static napi_value RemoveOutput(napi_env env, napi_callback_info info);
325 
326     static napi_value Start(napi_env env, napi_callback_info info);
327     static napi_value Stop(napi_env env, napi_callback_info info);
328     static napi_value Release(napi_env env, napi_callback_info info);
329     static napi_value IsVideoStabilizationModeSupported(napi_env env, napi_callback_info info);
330     static napi_value GetActiveVideoStabilizationMode(napi_env env, napi_callback_info info);
331     static napi_value SetVideoStabilizationMode(napi_env env, napi_callback_info info);
332 
333     static napi_value LockForControl(napi_env env, napi_callback_info info);
334     static napi_value UnlockForControl(napi_env env, napi_callback_info info);
335 
336     static napi_value On(napi_env env, napi_callback_info info);
337     static napi_value Once(napi_env env, napi_callback_info info);
338     static napi_value Off(napi_env env, napi_callback_info info);
339 
340     static napi_value GetCameraOutputCapabilities(napi_env env, napi_callback_info info);
341 
342     static napi_value GetSessionFunctions(napi_env env, napi_callback_info info);
343     static napi_value GetSessionConflictFunctions(napi_env env, napi_callback_info info);
344     const EmitterFunctions& GetEmitterFunctions() override;
345     static napi_value SetUsage(napi_env env, napi_callback_info info);
346     static napi_value IsAutoDeviceSwitchSupported(napi_env env, napi_callback_info info);
347     static napi_value EnableAutoDeviceSwitch(napi_env env, napi_callback_info info);
348 
349     napi_env env_;
350     sptr<CaptureSession> cameraSession_;
351     std::shared_ptr<FocusCallbackListener> focusCallback_;
352     std::shared_ptr<SessionCallbackListener> sessionCallback_;
353     std::shared_ptr<PressureCallbackListener> pressureCallback_;
354     std::shared_ptr<ControlCenterEffectStatusCallbackListener> controlCenterEffectStatusCallback_;
355     std::shared_ptr<ExposureCallbackListener> exposureCallback_;
356     std::shared_ptr<MoonCaptureBoostCallbackListener> moonCaptureBoostCallback_;
357     std::shared_ptr<SmoothZoomCallbackListener> smoothZoomCallback_;
358     std::shared_ptr<AbilityCallbackListener> abilityCallback_;
359     std::shared_ptr<AutoDeviceSwitchCallbackListener> autoDeviceSwitchCallback_;
360     std::shared_ptr<MacroStatusCallbackListener> macroStatusCallback_ = nullptr;
361 
362     static thread_local napi_ref sConstructor_;
363     static thread_local sptr<CaptureSession> sCameraSession_;
364     static thread_local uint32_t cameraSessionTaskId;
365     static const std::vector<napi_property_descriptor> camera_output_capability_sys_props;
366     static const std::vector<napi_property_descriptor> camera_ability_sys_props;
367     static const std::vector<napi_property_descriptor> camera_process_props;
368     static const std::vector<napi_property_descriptor> camera_process_sys_props;
369     static const std::vector<napi_property_descriptor> stabilization_props;
370     static const std::vector<napi_property_descriptor> flash_props;
371     static const std::vector<napi_property_descriptor> flash_sys_props;
372     static const std::vector<napi_property_descriptor> auto_exposure_props;
373     static const std::vector<napi_property_descriptor> focus_props;
374     static const std::vector<napi_property_descriptor> focus_sys_props;
375     static const std::vector<napi_property_descriptor> zoom_props;
376     static const std::vector<napi_property_descriptor> zoom_sys_props;
377     static const std::vector<napi_property_descriptor> filter_props;
378     static const std::vector<napi_property_descriptor> beauty_props;
379     static const std::vector<napi_property_descriptor> macro_props;
380     static const std::vector<napi_property_descriptor> moon_capture_boost_props;
381     static const std::vector<napi_property_descriptor> color_management_props;
382     static const std::vector<napi_property_descriptor> control_center_props;
383     static const std::vector<napi_property_descriptor> preconfig_props;
384     static const std::vector<napi_property_descriptor> white_balance_props;
385     static const std::vector<napi_property_descriptor> auto_switch_props;
386     static const std::vector<napi_property_descriptor> quality_prioritization_props;
387     static void CommitConfigAsync(uv_work_t* work);
388     static void StartAsync(uv_work_t* work);
389     static void UvWorkAsyncCompleted(uv_work_t* work, int status);
390 
391 private:
392     static const EmitterFunctions fun_map_;
393 
394 protected:
395     void RegisterExposureCallbackListener(const std::string& eventName, napi_env env, napi_value callback,
396         const std::vector<napi_value>& args, bool isOnce);
397     void UnregisterExposureCallbackListener(
398         const std::string& eventName, napi_env env, napi_value callback, const std::vector<napi_value>& args);
399     void RegisterFocusCallbackListener(const std::string& eventName, napi_env env, napi_value callback,
400         const std::vector<napi_value>& args, bool isOnce);
401     void UnregisterFocusCallbackListener(
402         const std::string& eventName, napi_env env, napi_value callback, const std::vector<napi_value>& args);
403     void RegisterMoonCaptureBoostCallbackListener(const std::string& eventName, napi_env env, napi_value callback,
404         const std::vector<napi_value>& args, bool isOnce);
405     void UnregisterMoonCaptureBoostCallbackListener(
406         const std::string& eventName, napi_env env, napi_value callback, const std::vector<napi_value>& args);
407     void RegisterSessionErrorCallbackListener(const std::string& eventName, napi_env env, napi_value callback,
408         const std::vector<napi_value>& args, bool isOnce);
409     void UnregisterSessionErrorCallbackListener(
410         const std::string& eventName, napi_env env, napi_value callback, const std::vector<napi_value>& args);
411     void RegisterSmoothZoomCallbackListener(const std::string& eventName, napi_env env, napi_value callback,
412         const std::vector<napi_value>& args, bool isOnce);
413     void UnregisterSmoothZoomCallbackListener(
414         const std::string& eventName, napi_env env, napi_value callback, const std::vector<napi_value>& args);
415     void RegisterAutoDeviceSwitchCallbackListener(const std::string& eventName,
416         napi_env env, napi_value callback, const std::vector<napi_value>& args, bool isOnce);
417     void UnregisterAutoDeviceSwitchCallbackListener(const std::string& eventName,
418         napi_env env, napi_value callback, const std::vector<napi_value>& args);
419 
420     virtual void RegisterFeatureDetectionStatusListener(const std::string& eventName, napi_env env, napi_value callback,
421         const std::vector<napi_value>& args, bool isOnce);
422     virtual void UnregisterFeatureDetectionStatusListener(
423         const std::string& eventName, napi_env env, napi_value callback, const std::vector<napi_value>& args);
424     virtual void RegisterMacroStatusCallbackListener(const std::string& eventName, napi_env env, napi_value callback,
425         const std::vector<napi_value>& args, bool isOnce);
426     virtual void UnregisterMacroStatusCallbackListener(
427         const std::string& eventName, napi_env env, napi_value callback, const std::vector<napi_value>& args);
428     virtual void RegisterEffectSuggestionCallbackListener(const std::string& eventName, napi_env env,
429         napi_value callback, const std::vector<napi_value>& args, bool isOnce);
430     virtual void UnregisterEffectSuggestionCallbackListener(
431         const std::string& eventName, napi_env env, napi_value callback, const std::vector<napi_value>& args);
432     virtual void RegisterAbilityChangeCallbackListener(const std::string& eventName,
433         napi_env env, napi_value callback, const std::vector<napi_value>& args, bool isOnce);
434     virtual void UnregisterAbilityChangeCallbackListener(const std::string& eventName,
435         napi_env env, napi_value callback, const std::vector<napi_value>& args);
436     virtual void RegisterLcdFlashStatusCallbackListener(const std::string& eventName,
437         napi_env env, napi_value callback, const std::vector<napi_value>& args, bool isOnce);
438     virtual void UnregisterLcdFlashStatusCallbackListener(const std::string& eventName,
439         napi_env env, napi_value callback, const std::vector<napi_value>& args);
440     virtual void RegisterFocusTrackingInfoCallbackListener(const std::string& eventName,
441         napi_env env, napi_value callback, const std::vector<napi_value>& args, bool isOnce);
442     virtual void UnregisterFocusTrackingInfoCallbackListener(const std::string& eventName,
443         napi_env env, napi_value callback, const std::vector<napi_value>& args);
444     virtual void RegisterPressureStatusCallbackListener(const std::string& eventName,
445         napi_env env, napi_value callback, const std::vector<napi_value>& args, bool isOnce);
446     virtual void UnregisterPressureStatusCallbackListener(const std::string& eventName,
447         napi_env env, napi_value callback, const std::vector<napi_value>& args);
448     virtual void RegisterControlCenterEffectStatusCallbackListener(const std::string& eventName, napi_env env,
449         napi_value callback, const std::vector<napi_value>& args, bool isOnce);
450     virtual void UnregisterControlCenterEffectStatusCallbackListener(const std::string& eventName, napi_env env,
451         napi_value callback, const std::vector<napi_value>& args);
452 
RegisterSlowMotionStateCb(const std::string & eventName,napi_env env,napi_value callback,const std::vector<napi_value> & args,bool isOnce)453     virtual void RegisterSlowMotionStateCb(const std::string& eventName, napi_env env, napi_value callback,
454         const std::vector<napi_value>& args, bool isOnce) {}
UnregisterSlowMotionStateCb(const std::string & eventName,napi_env env,napi_value callback,const std::vector<napi_value> & args)455     virtual void UnregisterSlowMotionStateCb(
456         const std::string& eventName, napi_env env, napi_value callback, const std::vector<napi_value>& args) {}
RegisterExposureInfoCallbackListener(const std::string & eventName,napi_env env,napi_value callback,const std::vector<napi_value> & args,bool isOnce)457     virtual void RegisterExposureInfoCallbackListener(const std::string& eventName,
458         napi_env env, napi_value callback, const std::vector<napi_value>& args, bool isOnce) {}
UnregisterExposureInfoCallbackListener(const std::string & eventName,napi_env env,napi_value callback,const std::vector<napi_value> & args)459     virtual void UnregisterExposureInfoCallbackListener(const std::string& eventName,
460         napi_env env, napi_value callback, const std::vector<napi_value>& args) {}
RegisterIsoInfoCallbackListener(const std::string & eventName,napi_env env,napi_value callback,const std::vector<napi_value> & args,bool isOnce)461     virtual void RegisterIsoInfoCallbackListener(const std::string& eventName,
462         napi_env env, napi_value callback, const std::vector<napi_value>& args, bool isOnce) {}
UnregisterIsoInfoCallbackListener(const std::string & eventName,napi_env env,napi_value callback,const std::vector<napi_value> & args)463     virtual void UnregisterIsoInfoCallbackListener(const std::string& eventName,
464         napi_env env, napi_value callback, const std::vector<napi_value>& args) {}
RegisterApertureInfoCallbackListener(const std::string & eventName,napi_env env,napi_value callback,const std::vector<napi_value> & args,bool isOnce)465     virtual void RegisterApertureInfoCallbackListener(const std::string& eventName,
466         napi_env env, napi_value callback, const std::vector<napi_value>& args, bool isOnce) {}
UnregisterApertureInfoCallbackListener(const std::string & eventName,napi_env env,napi_value callback,const std::vector<napi_value> & args)467     virtual void UnregisterApertureInfoCallbackListener(const std::string& eventName,
468         napi_env env, napi_value callback, const std::vector<napi_value>& args) {}
RegisterLuminationInfoCallbackListener(const std::string & eventName,napi_env env,napi_value callback,const std::vector<napi_value> & args,bool isOnce)469     virtual void RegisterLuminationInfoCallbackListener(const std::string& eventName,
470         napi_env env, napi_value callback, const std::vector<napi_value>& args, bool isOnce) {}
UnregisterLuminationInfoCallbackListener(const std::string & eventName,napi_env env,napi_value callback,const std::vector<napi_value> & args)471     virtual void UnregisterLuminationInfoCallbackListener(const std::string& eventName,
472         napi_env env, napi_value callback, const std::vector<napi_value>& args) {}
RegisterTryAEInfoCallbackListener(const std::string & eventName,napi_env env,napi_value callback,const std::vector<napi_value> & args,bool isOnce)473     virtual void RegisterTryAEInfoCallbackListener(const std::string& eventName,
474         napi_env env, napi_value callback, const std::vector<napi_value>& args, bool isOnce) {}
UnregisterTryAEInfoCallbackListener(const std::string & eventName,napi_env env,napi_value callback,const std::vector<napi_value> & args)475     virtual void UnregisterTryAEInfoCallbackListener(const std::string& eventName,
476         napi_env env, napi_value callback, const std::vector<napi_value>& args) {}
RegisterLightStatusCallbackListener(const std::string & eventName,napi_env env,napi_value callback,const std::vector<napi_value> & args,bool isOnce)477     virtual void RegisterLightStatusCallbackListener(const std::string& eventName,
478         napi_env env, napi_value callback, const std::vector<napi_value>& args, bool isOnce) {}
UnregisterLightStatusCallbackListener(const std::string & eventName,napi_env env,napi_value callback,const std::vector<napi_value> & args)479     virtual void UnregisterLightStatusCallbackListener(const std::string& eventName,
480         napi_env env, napi_value callback, const std::vector<napi_value>& args) {}
481 };
482 
483 struct CameraSessionAsyncContext : public AsyncContext {
CameraSessionAsyncContextCameraSessionAsyncContext484     CameraSessionAsyncContext(std::string funcName, int32_t taskId) : AsyncContext(funcName, taskId) {};
485     CameraSessionNapi* objectInfo = nullptr;
486     std::string errorMsg;
487     napi_env env = nullptr;
488 };
489 } // namespace CameraStandard
490 } // namespace OHOS
491 #endif /* CAMERA_SESSION_NAPI_H_ */
492