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