1 /* 2 * Copyright (c) 2024-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 CAMERA_NAPI_OBJECT_TYPES_H 17 #define CAMERA_NAPI_OBJECT_TYPES_H 18 19 #include <any> 20 #include <cstdint> 21 #include <memory> 22 23 #include "camera_napi_object.h" 24 #include "camera_output_capability.h" 25 #include "js_native_api_types.h" 26 #include "video_session.h" 27 28 namespace OHOS { 29 namespace CameraStandard { 30 31 class CameraNapiObjectTypes { 32 public: ~CameraNapiObjectTypes()33 virtual ~CameraNapiObjectTypes() {}; 34 virtual CameraNapiObject& GetCameraNapiObject() = 0; 35 virtual napi_value GenerateNapiValue(napi_env env) final; 36 37 protected: 38 template<typename T, typename... Args> Hold(Args &&...args)39 T* Hold(Args&&... args) 40 { 41 std::shared_ptr<T> ptr = std::make_shared<T>(std::forward<Args>(args)...); 42 ptrHolder_.emplace_back(ptr); 43 return ptr.get(); 44 } 45 46 private: 47 std::list<std::shared_ptr<void>> ptrHolder_; 48 }; 49 50 class CameraNapiObjSize : public CameraNapiObjectTypes { 51 public: CameraNapiObjSize(Size & size)52 explicit CameraNapiObjSize(Size& size) : size_(size) {} 53 CameraNapiObject& GetCameraNapiObject() override; 54 55 private: 56 Size& size_; 57 }; 58 59 class CameraNapiObjFrameRateRange : public CameraNapiObjectTypes { 60 public: CameraNapiObjFrameRateRange(std::vector<int32_t> & frameRateRange)61 explicit CameraNapiObjFrameRateRange(std::vector<int32_t>& frameRateRange) : frameRateRange_(frameRateRange) {} 62 CameraNapiObject& GetCameraNapiObject() override; 63 64 private: 65 std::vector<int32_t>& frameRateRange_; 66 }; 67 68 class CameraNapiObjProfile : public CameraNapiObjectTypes { 69 public: CameraNapiObjProfile(Profile & profile)70 explicit CameraNapiObjProfile(Profile& profile) : profile_(profile) {} 71 CameraNapiObject& GetCameraNapiObject() override; 72 73 private: 74 Profile& profile_; 75 }; 76 77 class CameraNapiObjVideoProfile : public CameraNapiObjectTypes { 78 public: CameraNapiObjVideoProfile(VideoProfile & videoProfile)79 explicit CameraNapiObjVideoProfile(VideoProfile& videoProfile) : videoProfile_(videoProfile) {} 80 CameraNapiObject& GetCameraNapiObject() override; 81 82 private: 83 VideoProfile& videoProfile_; 84 }; 85 86 class CameraNapiObjDepthProfile : public CameraNapiObjectTypes { 87 public: CameraNapiObjDepthProfile(DepthProfile & depthProfile)88 explicit CameraNapiObjDepthProfile(DepthProfile& depthProfile) : depthProfile_(depthProfile) {} 89 CameraNapiObject& GetCameraNapiObject() override; 90 91 private: 92 DepthProfile& depthProfile_; 93 }; 94 95 class CameraDevice; 96 class CameraNapiObjCameraDevice : public CameraNapiObjectTypes { 97 public: CameraNapiObjCameraDevice(CameraDevice & cameraDevice)98 explicit CameraNapiObjCameraDevice(CameraDevice& cameraDevice) : cameraDevice_(cameraDevice) {} 99 CameraNapiObject& GetCameraNapiObject() override; 100 101 private: 102 CameraDevice& cameraDevice_; 103 }; 104 105 struct Rect; 106 class CameraNapiBoundingBox : public CameraNapiObjectTypes { 107 public: CameraNapiBoundingBox(Rect & rect)108 explicit CameraNapiBoundingBox(Rect& rect) : rect_(rect) {} 109 CameraNapiObject& GetCameraNapiObject() override; 110 111 private: 112 Rect& rect_; 113 }; 114 115 class MetadataObject; 116 class CameraNapiObjMetadataObject : public CameraNapiObjectTypes { 117 public: CameraNapiObjMetadataObject(MetadataObject & metadataObject)118 explicit CameraNapiObjMetadataObject(MetadataObject& metadataObject) : metadataObject_(metadataObject) {} 119 CameraNapiObject& GetCameraNapiObject() override; 120 121 private: 122 MetadataObject& metadataObject_; 123 }; 124 125 class CameraOutputCapability; 126 class CameraNapiObjCameraOutputCapability : public CameraNapiObjectTypes { 127 public: CameraNapiObjCameraOutputCapability(CameraOutputCapability & cameraOutputCapability)128 explicit CameraNapiObjCameraOutputCapability(CameraOutputCapability& cameraOutputCapability) 129 : cameraOutputCapability_(cameraOutputCapability) 130 {} 131 CameraNapiObject& GetCameraNapiObject() override; 132 133 private: 134 CameraOutputCapability& cameraOutputCapability_; 135 }; 136 137 class FocusTrackingInfo; 138 class CameraNapiFocusTrackingInfo : public CameraNapiObjectTypes { 139 public: CameraNapiFocusTrackingInfo(FocusTrackingInfo & focusTrackingInfo)140 explicit CameraNapiFocusTrackingInfo(FocusTrackingInfo& focusTrackingInfo) : focusTrackingInfo_(focusTrackingInfo) 141 {} 142 CameraNapiObject& GetCameraNapiObject() override; 143 144 private: 145 FocusTrackingInfo& focusTrackingInfo_; 146 }; 147 } // namespace CameraStandard 148 } // namespace OHOS 149 #endif /* CAMERA_NAPI_OBJECT_TYPES_H */ 150