• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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