1 /*
2  * Copyright (c) 2021 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  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef CAMERA_HOST_HCS_DEAL_H
18 #define CAMERA_HOST_HCS_DEAL_H
19 
20 #include <list>
21 #include <map>
22 #include <string>
23 #include "camera_metadata_info.h"
24 #include "device_resource_if.h"
25 #include "utils.h"
26 
27 namespace OHOS::Camera {
28 class HcsDeal {
29     using CameraIdMap = std::map<std::string, std::vector<std::string>>;
30     using CameraMetadataMap = std::map<std::string, std::shared_ptr<CameraMetadata>>;
31 
32 public:
33     HcsDeal(const std::string &pathName);
34     virtual ~HcsDeal();
35     HcsDeal(const HcsDeal &other) = delete;
36     HcsDeal(HcsDeal &&other) = delete;
37     HcsDeal &operator=(const HcsDeal &other) = delete;
38     HcsDeal &operator=(HcsDeal &&other) = delete;
39 
40 public:
41     void SetHcsPathName(const std::string &pathName);
42     RetCode Init();
43     RetCode GetMetadata(CameraMetadataMap &metadataMap) const;
44     RetCode GetCameraId(CameraIdMap &cameraIdMap) const;
45 
46 private:
47     RetCode DealHcsData();
48     void ChangeToMetadata();
49     RetCode DealCameraAbility(const struct DeviceResourceNode &node);
50     RetCode DealPhysicsCameraId(const struct DeviceResourceNode &node, std::vector<std::string> &cameraIds);
51     RetCode DealMetadata(const std::string &cameraId, const struct DeviceResourceNode &node);
52 
53     RetCode DealAeAvailableAntiBandingModes(
54         const struct DeviceResourceNode &metadataNode, std::shared_ptr<CameraMetadata> &metadata);
55     RetCode DealAeAvailableModes(
56         const struct DeviceResourceNode &metadataNode, std::shared_ptr<CameraMetadata> &metadata);
57     RetCode DealCameraPosition(
58         const struct DeviceResourceNode &metadataNode, std::shared_ptr<CameraMetadata> &metadata);
59     RetCode DealCameraType(const struct DeviceResourceNode &metadataNode, std::shared_ptr<CameraMetadata> &metadata);
60     RetCode DealCameraConnectionType(
61         const struct DeviceResourceNode &metadataNode, std::shared_ptr<CameraMetadata> &metadata);
62     RetCode DealCameraFaceDetectMaxNum(
63         const struct DeviceResourceNode &metadataNode, std::shared_ptr<CameraMetadata> &metadata);
64     RetCode DealAvailableFpsRange(
65         const struct DeviceResourceNode &metadataNode, std::shared_ptr<CameraMetadata> &metadata);
66     RetCode DealAeCompensationRange(
67         const struct DeviceResourceNode &metadataNode, std::shared_ptr<CameraMetadata> &metadata);
68     RetCode DealAeCompensationSteps(
69         const struct DeviceResourceNode &metadataNode, std::shared_ptr<CameraMetadata> &metadata);
70     RetCode DealAvailableAwbModes(
71         const struct DeviceResourceNode &metadataNode, std::shared_ptr<CameraMetadata> &metadata);
72     RetCode DealSensitivityRange(
73         const struct DeviceResourceNode &metadataNode, std::shared_ptr<CameraMetadata> &metadata);
74     RetCode DealFaceDetectMode(
75         const struct DeviceResourceNode &metadataNode, std::shared_ptr<CameraMetadata> &metadata);
76     RetCode DealAvailableResultKeys(
77         const struct DeviceResourceNode &metadataNode, std::shared_ptr<CameraMetadata> &metadata);
78     RetCode DealFocalLength(
79         const struct DeviceResourceNode &metadataNode, std::shared_ptr<Camera::CameraMetadata> &metadata);
80     RetCode DealAvailableFocusModes(
81         const struct DeviceResourceNode &metadataNode, std::shared_ptr<Camera::CameraMetadata> &metadata);
82     RetCode DealAvailableExposureModes(
83         const struct DeviceResourceNode &metadataNode, std::shared_ptr<Camera::CameraMetadata> &metadata);
84     RetCode DealAvailableMetereModes(
85         const struct DeviceResourceNode &metadataNode, std::shared_ptr<Camera::CameraMetadata> &metadata);
86     RetCode DealAvalialbleFlashModes(
87         const struct DeviceResourceNode &metadataNode, std::shared_ptr<Camera::CameraMetadata> &metadata);
88     RetCode DealMirrorSupported(
89         const struct DeviceResourceNode &metadataNode, std::shared_ptr<Camera::CameraMetadata> &metadata);
90     RetCode DealAvaliableBasicConfigurations(
91         const struct DeviceResourceNode &metadataNode, std::shared_ptr<Camera::CameraMetadata> &metadata);
92     RetCode DealSensorOrientation(
93         const struct DeviceResourceNode &metadataNode, std::shared_ptr<Camera::CameraMetadata> &metadata);
94     RetCode DealAvalialbleVideoStabilizationModes(
95         const struct DeviceResourceNode &metadataNode, std::shared_ptr<Camera::CameraMetadata> &metadata);
96     RetCode DealAvalialbleFlash(
97         const struct DeviceResourceNode &metadataNode, std::shared_ptr<Camera::CameraMetadata> &metadata);
98     RetCode DealAvalialbleAutoFocus(
99         const struct DeviceResourceNode &metadataNode, std::shared_ptr<Camera::CameraMetadata> &metadata);
100     RetCode DealZoomRationRange(
101         const struct DeviceResourceNode &metadataNode, std::shared_ptr<Camera::CameraMetadata> &metadata);
102     RetCode DealJpegOrientation(
103         const struct DeviceResourceNode &metadataNode, std::shared_ptr<Camera::CameraMetadata> &metadata);
104     RetCode DealJpegQuality(
105         const struct DeviceResourceNode &metadataNode, std::shared_ptr<Camera::CameraMetadata> &metadata);
106     RetCode DealCameraMemoryType(
107         const struct DeviceResourceNode &metadataNode, std::shared_ptr<CameraMetadata> &metadata);
108     RetCode DealAvaliableExtendConfigurations(
109     const struct DeviceResourceNode &metadataNode, std::shared_ptr<Camera::CameraMetadata> &metadata);
110 
111 private:
112     std::string sPathName;
113     const struct DeviceResourceIface *pDevResIns;
114     const struct DeviceResourceNode *pRootNode;
115     CameraIdMap cameraIdMap_;
116     CameraMetadataMap cameraMetadataMap_;
117 };
118 } // namespace OHOS::Camera
119 #endif /* CAMERA_HOST_HCS_DEAL_H */
120