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