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 PROFESSION_SESSION_NAPI_H 17 #define PROFESSION_SESSION_NAPI_H 18 19 #include "napi/native_api.h" 20 #include "napi/native_node_api.h" 21 #include "session/camera_session_napi.h" 22 #include "session/profession_session.h" 23 24 namespace OHOS { 25 namespace CameraStandard { 26 class ExposureInfoCallbackListener : public ExposureInfoCallback, public ListenerBase { 27 public: ExposureInfoCallbackListener(napi_env env)28 ExposureInfoCallbackListener(napi_env env) : ListenerBase(env) {} 29 ~ExposureInfoCallbackListener() = default; 30 void OnExposureInfoChanged(ExposureInfo info) override; 31 32 private: 33 void OnExposureInfoChangedCallback(ExposureInfo info) const; 34 void OnExposureInfoChangedCallbackAsync(ExposureInfo info) const; 35 }; 36 37 struct ExposureInfoChangedCallback { 38 ExposureInfo info_; 39 const ExposureInfoCallbackListener* listener_; ExposureInfoChangedCallbackExposureInfoChangedCallback40 ExposureInfoChangedCallback(ExposureInfo info, const ExposureInfoCallbackListener* listener) 41 : info_(info), listener_(listener) {} 42 }; 43 44 class IsoInfoCallbackListener : public IsoInfoCallback, public ListenerBase { 45 public: IsoInfoCallbackListener(napi_env env)46 IsoInfoCallbackListener(napi_env env) : ListenerBase(env) {} 47 ~IsoInfoCallbackListener() = default; 48 void OnIsoInfoChanged(IsoInfo info) override; 49 50 private: 51 void OnIsoInfoChangedCallback(IsoInfo info) const; 52 void OnIsoInfoChangedCallbackAsync(IsoInfo info) const; 53 }; 54 55 struct IsoInfoChangedCallback { 56 IsoInfo info_; 57 const IsoInfoCallbackListener* listener_; IsoInfoChangedCallbackIsoInfoChangedCallback58 IsoInfoChangedCallback(IsoInfo info, const IsoInfoCallbackListener* listener) 59 : info_(info), listener_(listener) {} 60 }; 61 62 class ApertureInfoCallbackListener : public ApertureInfoCallback, public ListenerBase { 63 public: ApertureInfoCallbackListener(napi_env env)64 ApertureInfoCallbackListener(napi_env env) : ListenerBase(env) {} 65 ~ApertureInfoCallbackListener() = default; 66 void OnApertureInfoChanged(ApertureInfo info) override; 67 68 private: 69 void OnApertureInfoChangedCallback(ApertureInfo info) const; 70 void OnApertureInfoChangedCallbackAsync(ApertureInfo info) const; 71 }; 72 73 struct ApertureInfoChangedCallback { 74 ApertureInfo info_; 75 const ApertureInfoCallbackListener* listener_; ApertureInfoChangedCallbackApertureInfoChangedCallback76 ApertureInfoChangedCallback(ApertureInfo info, const ApertureInfoCallbackListener* listener) 77 : info_(info), listener_(listener) {} 78 }; 79 80 class LuminationInfoCallbackListener : public LuminationInfoCallback, public ListenerBase { 81 public: LuminationInfoCallbackListener(napi_env env)82 LuminationInfoCallbackListener(napi_env env) : ListenerBase(env) {} 83 ~LuminationInfoCallbackListener() = default; 84 void OnLuminationInfoChanged(LuminationInfo info) override; 85 86 private: 87 void OnLuminationInfoChangedCallback(LuminationInfo info) const; 88 void OnLuminationInfoChangedCallbackAsync(LuminationInfo info) const; 89 }; 90 91 struct LuminationInfoChangedCallback { 92 LuminationInfo info_; 93 const LuminationInfoCallbackListener* listener_; LuminationInfoChangedCallbackLuminationInfoChangedCallback94 LuminationInfoChangedCallback(LuminationInfo info, const LuminationInfoCallbackListener* listener) 95 : info_(info), listener_(listener) {} 96 }; 97 98 static const char PROFESSIONAL_SESSION_NAPI_CLASS_NAME[] = "ProfessionSession"; 99 class ProfessionSessionNapi : public CameraSessionNapi { 100 public: 101 static napi_value Init(napi_env env, napi_value exports); 102 static napi_value CreateCameraSession(napi_env env, SceneMode mode); 103 ProfessionSessionNapi(); 104 ~ProfessionSessionNapi(); 105 106 static void ProfessionSessionNapiDestructor(napi_env env, void* nativeObject, void* finalize_hint); 107 static napi_value ProfessionSessionNapiConstructor(napi_env env, napi_callback_info info); 108 109 static napi_value GetSupportedMeteringModes(napi_env env, napi_callback_info info); 110 static napi_value IsMeteringModeSupported(napi_env env, napi_callback_info info); 111 static napi_value GetMeteringMode(napi_env env, napi_callback_info info); 112 static napi_value SetMeteringMode(napi_env env, napi_callback_info info); 113 114 static napi_value IsManualIsoSupported(napi_env env, napi_callback_info info); 115 static napi_value GetIsoRange(napi_env env, napi_callback_info info); 116 static napi_value GetISO(napi_env env, napi_callback_info info); 117 static napi_value SetISO(napi_env env, napi_callback_info info); 118 119 static napi_value GetSupportedVirtualApertures(napi_env env, napi_callback_info info); 120 static napi_value GetVirtualAperture(napi_env env, napi_callback_info info); 121 static napi_value SetVirtualAperture(napi_env env, napi_callback_info info); 122 123 static napi_value GetExposureDurationRange(napi_env env, napi_callback_info info); 124 static napi_value GetExposureDuration(napi_env env, napi_callback_info info); 125 static napi_value SetExposureDuration(napi_env env, napi_callback_info info); 126 127 static napi_value GetSupportedExposureHintModes(napi_env env, napi_callback_info info); 128 static napi_value GetExposureHintMode(napi_env env, napi_callback_info info); 129 static napi_value SetExposureHintMode(napi_env env, napi_callback_info info); 130 131 static napi_value GetSupportedFocusAssistFlashModes(napi_env env, napi_callback_info info); 132 static napi_value IsFocusAssistFlashModeSupported(napi_env env, napi_callback_info info); 133 static napi_value GetFocusAssistFlashMode(napi_env env, napi_callback_info info); 134 static napi_value SetFocusAssistFlashMode(napi_env env, napi_callback_info info); 135 136 static napi_value On(napi_env env, napi_callback_info info); 137 static napi_value Once(napi_env env, napi_callback_info info); 138 static napi_value Off(napi_env env, napi_callback_info info); 139 140 static const std::vector<napi_property_descriptor> manual_exposure_funcs; 141 static const std::vector<napi_property_descriptor> manual_focus_funcs; 142 static const std::vector<napi_property_descriptor> manual_iso_props; 143 static const std::vector<napi_property_descriptor> pro_session_props; 144 145 std::shared_ptr<ExposureInfoCallbackListener> exposureInfoCallback_ = nullptr; 146 std::shared_ptr<IsoInfoCallbackListener> isoInfoCallback_ = nullptr; 147 std::shared_ptr<ApertureInfoCallbackListener> apertureInfoCallback_ = nullptr; 148 std::shared_ptr<LuminationInfoCallbackListener> luminationInfoCallback_ = nullptr; 149 std::shared_ptr<AbilityCallbackListener> abilityCallback_ = nullptr; 150 151 napi_env env_; 152 sptr<ProfessionSession> professionSession_; 153 154 static thread_local napi_ref sConstructor_; 155 156 protected: 157 void RegisterExposureInfoCallbackListener(const std::string& eventName, napi_env env, napi_value callback, 158 const std::vector<napi_value>& args, bool isOnce) override; 159 void UnregisterExposureInfoCallbackListener( 160 const std::string& eventName, napi_env env, napi_value callback, const std::vector<napi_value>& args) override; 161 void RegisterAbilityChangeCallbackListener(const std::string& eventName, napi_env env, napi_value callback, 162 const std::vector<napi_value>& args, bool isOnce) override; 163 void UnregisterAbilityChangeCallbackListener( 164 const std::string& eventName, napi_env env, napi_value callback, const std::vector<napi_value>& args) override; 165 void RegisterIsoInfoCallbackListener(const std::string& eventName, napi_env env, napi_value callback, 166 const std::vector<napi_value>& args, bool isOnce) override; 167 void UnregisterIsoInfoCallbackListener( 168 const std::string& eventName, napi_env env, napi_value callback, const std::vector<napi_value>& args) override; 169 void RegisterApertureInfoCallbackListener(const std::string& eventName, napi_env env, napi_value callback, 170 const std::vector<napi_value>& args, bool isOnce) override; 171 void UnregisterApertureInfoCallbackListener( 172 const std::string& eventName, napi_env env, napi_value callback, const std::vector<napi_value>& args) override; 173 void RegisterLuminationInfoCallbackListener(const std::string& eventName, napi_env env, napi_value callback, 174 const std::vector<napi_value>& args, bool isOnce) override; 175 void UnregisterLuminationInfoCallbackListener( 176 const std::string& eventName, napi_env env, napi_value callback, const std::vector<napi_value>& args) override; 177 }; 178 } 179 } 180 #endif /* PROFESSION_SESSION_NAPI_H */ 181