1 /*
2  * Copyright (c) 2023-2024 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 TIME_LAPSE_PHOTO_SESSION_NAPI_H
17 #define TIME_LAPSE_PHOTO_SESSION_NAPI_H
18 
19 #include "time_lapse_photo_session.h"
20 #include "mode/profession_session_napi.h"
21 
22 namespace OHOS {
23 namespace CameraStandard {
24 static const char TIME_LAPSE_PHOTO_SESSION_NAPI_CLASS_NAME[] = "TimeLapsePhotoSessionNapi";
25 static const char TRY_AE_INFO_NAPI_CLASS_NAME[] = "TryAEInfo";
26 
27 class TryAEInfoCallbackListener : public TryAEInfoCallback, public ListenerBase {
28 public:
TryAEInfoCallbackListener(napi_env env)29     TryAEInfoCallbackListener(napi_env env) : ListenerBase(env) {}
30     ~TryAEInfoCallbackListener() = default;
31     void OnTryAEInfoChanged(TryAEInfo info) override;
32 
33 private:
34     void OnTryAEInfoChangedCallback(TryAEInfo info) const;
35     void OnTryAEInfoChangedCallbackAsync(TryAEInfo info) const;
36 };
37 
38 struct TryAEInfoChangedCallback {
39     TryAEInfo info_;
40     const TryAEInfoCallbackListener* listener_;
TryAEInfoChangedCallbackTryAEInfoChangedCallback41     TryAEInfoChangedCallback(TryAEInfo info, const TryAEInfoCallbackListener* listener)
42         : info_(info), listener_(listener) {}
43 };
44 
45 class TryAEInfoNapi {
46 public:
47     static napi_value Init(napi_env env, napi_value exports);
48     static napi_value NewInstance(napi_env env);
49     TryAEInfoNapi();
50     virtual ~TryAEInfoNapi();
51 
52     static napi_value IsTryAEDone(napi_env env, napi_callback_info info);
53     static napi_value IsTryAEHintNeeded(napi_env env, napi_callback_info info);
54     static napi_value GetPreviewType(napi_env env, napi_callback_info info);
55     static napi_value GetCaptureInterval(napi_env env, napi_callback_info info);
56 
57     static napi_value Constructor(napi_env env, napi_callback_info info);
58     static void Destructor(napi_env env, void* nativeObject, void* finalize);
59 
60     unique_ptr<TryAEInfo> tryAEInfo_;
61 private:
62     static thread_local napi_ref sConstructor_;
63 };
64 
65 class TimeLapsePhotoSessionNapi : public CameraSessionNapi {
66 public:
67     static const vector<napi_property_descriptor> time_lapse_photo_props;
68     static const vector<napi_property_descriptor> manual_exposure_props;
69     static const vector<napi_property_descriptor> manual_iso_props;
70     static const vector<napi_property_descriptor> white_balance_props;
71 
72     static napi_value Init(napi_env env, napi_value exports);
73     static napi_value CreateCameraSession(napi_env env);
74     TimeLapsePhotoSessionNapi();
75     virtual ~TimeLapsePhotoSessionNapi();
76     // TimeLapsePhotoSession
77     static napi_value On(napi_env env, napi_callback_info info);
78     static napi_value Off(napi_env env, napi_callback_info info);
79     static napi_value IsTryAENeeded(napi_env env, napi_callback_info info);
80     static napi_value StartTryAE(napi_env env, napi_callback_info info);
81     static napi_value StopTryAE(napi_env env, napi_callback_info info);
82     static napi_value GetSupportedTimeLapseIntervalRange(napi_env env, napi_callback_info info);
83     static napi_value GetTimeLapseInterval(napi_env env, napi_callback_info info);
84     static napi_value SetTimeLapseInterval(napi_env env, napi_callback_info info);
85     static napi_value SetTimeLapseRecordState(napi_env env, napi_callback_info info);
86     static napi_value SetTimeLapsePreviewType(napi_env env, napi_callback_info info);
87     // ManualExposure
88     static napi_value GetExposure(napi_env env, napi_callback_info info);
89     static napi_value SetExposure(napi_env env, napi_callback_info info);
90     static napi_value GetSupportedExposureRange(napi_env env, napi_callback_info info);
91     static napi_value GetSupportedMeteringModes(napi_env env, napi_callback_info info);
92     static napi_value IsExposureMeteringModeSupported(napi_env env, napi_callback_info info);
93     static napi_value GetExposureMeteringMode(napi_env env, napi_callback_info info);
94     static napi_value SetExposureMeteringMode(napi_env env, napi_callback_info info);
95     // ManualIso
96     static napi_value GetIso(napi_env env, napi_callback_info info);
97     static napi_value SetIso(napi_env env, napi_callback_info info);
98     static napi_value IsManualIsoSupported(napi_env env, napi_callback_info info);
99     static napi_value GetIsoRange(napi_env env, napi_callback_info info);
100     // WhiteBalance
101     static napi_value IsWhiteBalanceModeSupported(napi_env env, napi_callback_info info);
102     static napi_value GetWhiteBalanceRange(napi_env env, napi_callback_info info);
103     static napi_value GetWhiteBalanceMode(napi_env env, napi_callback_info info);
104     static napi_value SetWhiteBalanceMode(napi_env env, napi_callback_info info);
105     static napi_value GetWhiteBalance(napi_env env, napi_callback_info info);
106     static napi_value SetWhiteBalance(napi_env env, napi_callback_info info);
107 
108 private:
109     static napi_value Constructor(napi_env env, napi_callback_info info);
110     static void Destructor(napi_env env, void* nativeObject, void* finalize);
111     static thread_local napi_ref sConstructor_;
112 
113     sptr<TimeLapsePhotoSession> timeLapsePhotoSession_;
114 
115     shared_ptr<IsoInfoCallbackListener> isoInfoCallback_ = nullptr;
116     shared_ptr<ExposureInfoCallbackListener> exposureInfoCallback_ = nullptr;
117     shared_ptr<LuminationInfoCallbackListener> luminationInfoCallback_ = nullptr;
118     shared_ptr<TryAEInfoCallbackListener> tryAEInfoCallback_ = nullptr;
119 
120 protected:
121     void RegisterIsoInfoCallbackListener(const std::string& eventName,
122         napi_env env, napi_value callback, const std::vector<napi_value>& args, bool isOnce) override;
123     void UnregisterIsoInfoCallbackListener(const std::string& eventName,
124         napi_env env, napi_value callback, const std::vector<napi_value>& args) override;
125     void RegisterExposureInfoCallbackListener(const std::string& eventName,
126         napi_env env, napi_value callback, const std::vector<napi_value>& args, bool isOnce) override;
127     void UnregisterExposureInfoCallbackListener(const std::string& eventName,
128         napi_env env, napi_value callback, const std::vector<napi_value>& args) override;
129     void RegisterLuminationInfoCallbackListener(const std::string& eventName,
130         napi_env env, napi_value callback, const std::vector<napi_value>& args, bool isOnce) override;
131     void UnregisterLuminationInfoCallbackListener(const std::string& eventName,
132         napi_env env, napi_value callback, const std::vector<napi_value>& args) override;
133     void RegisterTryAEInfoCallbackListener(const std::string& eventName,
134         napi_env env, napi_value callback, const std::vector<napi_value>& args, bool isOnce) override;
135     void UnregisterTryAEInfoCallbackListener(const std::string& eventName,
136         napi_env env, napi_value callback, const std::vector<napi_value>& args) override;
137 };
138 
139 }
140 }
141 #endif