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