xref: /aosp_15_r20/hardware/interfaces/automotive/evs/1.1/default/ConfigManager.h (revision 4d7e907c777eeecc4c5bd7cf640a754fac206ff7)
1*4d7e907cSAndroid Build Coastguard Worker /*
2*4d7e907cSAndroid Build Coastguard Worker  * Copyright (C) 2019 The Android Open Source Project
3*4d7e907cSAndroid Build Coastguard Worker  *
4*4d7e907cSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*4d7e907cSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*4d7e907cSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*4d7e907cSAndroid Build Coastguard Worker  *
8*4d7e907cSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*4d7e907cSAndroid Build Coastguard Worker  *
10*4d7e907cSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*4d7e907cSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*4d7e907cSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*4d7e907cSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*4d7e907cSAndroid Build Coastguard Worker  * limitations under the License.
15*4d7e907cSAndroid Build Coastguard Worker  */
16*4d7e907cSAndroid Build Coastguard Worker #ifndef ANDROID_HARDWARE_AUTOMOTIVE_EVS_V1_1_CONFIGMANAGER_H
17*4d7e907cSAndroid Build Coastguard Worker #define ANDROID_HARDWARE_AUTOMOTIVE_EVS_V1_1_CONFIGMANAGER_H
18*4d7e907cSAndroid Build Coastguard Worker 
19*4d7e907cSAndroid Build Coastguard Worker #include "ConfigManagerUtil.h"
20*4d7e907cSAndroid Build Coastguard Worker 
21*4d7e907cSAndroid Build Coastguard Worker #include <android/hardware/automotive/evs/1.1/types.h>
22*4d7e907cSAndroid Build Coastguard Worker #include <log/log.h>
23*4d7e907cSAndroid Build Coastguard Worker #include <system/camera_metadata.h>
24*4d7e907cSAndroid Build Coastguard Worker #include <tinyxml2.h>
25*4d7e907cSAndroid Build Coastguard Worker 
26*4d7e907cSAndroid Build Coastguard Worker #include <string>
27*4d7e907cSAndroid Build Coastguard Worker #include <unordered_map>
28*4d7e907cSAndroid Build Coastguard Worker #include <unordered_set>
29*4d7e907cSAndroid Build Coastguard Worker #include <vector>
30*4d7e907cSAndroid Build Coastguard Worker 
31*4d7e907cSAndroid Build Coastguard Worker namespace android::hardware::automotive::evs::V1_1::implementation {
32*4d7e907cSAndroid Build Coastguard Worker 
33*4d7e907cSAndroid Build Coastguard Worker using hardware::hidl_vec;
34*4d7e907cSAndroid Build Coastguard Worker using hardware::automotive::evs::V1_1::CameraParam;
35*4d7e907cSAndroid Build Coastguard Worker using hardware::camera::device::V3_2::Stream;
36*4d7e907cSAndroid Build Coastguard Worker 
37*4d7e907cSAndroid Build Coastguard Worker /*
38*4d7e907cSAndroid Build Coastguard Worker  * Plese note that this is different from what is defined in
39*4d7e907cSAndroid Build Coastguard Worker  * libhardware/modules/camera/3_4/metadata/types.h; this has one additional
40*4d7e907cSAndroid Build Coastguard Worker  * field to store a framerate.
41*4d7e907cSAndroid Build Coastguard Worker  */
42*4d7e907cSAndroid Build Coastguard Worker const size_t kStreamCfgSz = 6;
43*4d7e907cSAndroid Build Coastguard Worker typedef std::array<int32_t, kStreamCfgSz> RawStreamConfiguration;
44*4d7e907cSAndroid Build Coastguard Worker 
45*4d7e907cSAndroid Build Coastguard Worker class ConfigManager {
46*4d7e907cSAndroid Build Coastguard Worker   public:
47*4d7e907cSAndroid Build Coastguard Worker     static std::unique_ptr<ConfigManager> Create(const char* path = "");
48*4d7e907cSAndroid Build Coastguard Worker     ConfigManager(const ConfigManager&) = delete;
49*4d7e907cSAndroid Build Coastguard Worker     ConfigManager& operator=(const ConfigManager&) = delete;
50*4d7e907cSAndroid Build Coastguard Worker 
51*4d7e907cSAndroid Build Coastguard Worker     virtual ~ConfigManager();
52*4d7e907cSAndroid Build Coastguard Worker 
53*4d7e907cSAndroid Build Coastguard Worker     /* Camera device's capabilities and metadata */
54*4d7e907cSAndroid Build Coastguard Worker     class CameraInfo {
55*4d7e907cSAndroid Build Coastguard Worker       public:
CameraInfo()56*4d7e907cSAndroid Build Coastguard Worker         CameraInfo() : characteristics(nullptr) { /* Nothing to do */
57*4d7e907cSAndroid Build Coastguard Worker         }
58*4d7e907cSAndroid Build Coastguard Worker 
~CameraInfo()59*4d7e907cSAndroid Build Coastguard Worker         virtual ~CameraInfo() { free_camera_metadata(characteristics); }
60*4d7e907cSAndroid Build Coastguard Worker 
61*4d7e907cSAndroid Build Coastguard Worker         /* Allocate memory for camera_metadata_t */
allocate(size_t entry_cap,size_t data_cap)62*4d7e907cSAndroid Build Coastguard Worker         bool allocate(size_t entry_cap, size_t data_cap) {
63*4d7e907cSAndroid Build Coastguard Worker             if (characteristics != nullptr) {
64*4d7e907cSAndroid Build Coastguard Worker                 ALOGE("Camera metadata is already allocated");
65*4d7e907cSAndroid Build Coastguard Worker                 return false;
66*4d7e907cSAndroid Build Coastguard Worker             }
67*4d7e907cSAndroid Build Coastguard Worker 
68*4d7e907cSAndroid Build Coastguard Worker             characteristics = allocate_camera_metadata(entry_cap, data_cap);
69*4d7e907cSAndroid Build Coastguard Worker             return characteristics != nullptr;
70*4d7e907cSAndroid Build Coastguard Worker         }
71*4d7e907cSAndroid Build Coastguard Worker 
72*4d7e907cSAndroid Build Coastguard Worker         /*
73*4d7e907cSAndroid Build Coastguard Worker          * List of supported controls that the primary client can program.
74*4d7e907cSAndroid Build Coastguard Worker          * Paraemters are stored with its valid range
75*4d7e907cSAndroid Build Coastguard Worker          */
76*4d7e907cSAndroid Build Coastguard Worker         std::unordered_map<CameraParam, std::tuple<int32_t, int32_t, int32_t>> controls;
77*4d7e907cSAndroid Build Coastguard Worker 
78*4d7e907cSAndroid Build Coastguard Worker         /*
79*4d7e907cSAndroid Build Coastguard Worker          * List of supported output stream configurations; each array stores
80*4d7e907cSAndroid Build Coastguard Worker          * format, width, height, and direction values in the order.
81*4d7e907cSAndroid Build Coastguard Worker          */
82*4d7e907cSAndroid Build Coastguard Worker         std::unordered_map<int32_t, RawStreamConfiguration> streamConfigurations;
83*4d7e907cSAndroid Build Coastguard Worker 
84*4d7e907cSAndroid Build Coastguard Worker         /*
85*4d7e907cSAndroid Build Coastguard Worker          * Internal storage for camera metadata.  Each entry holds a pointer to
86*4d7e907cSAndroid Build Coastguard Worker          * data and number of elements
87*4d7e907cSAndroid Build Coastguard Worker          */
88*4d7e907cSAndroid Build Coastguard Worker         std::unordered_map<camera_metadata_tag_t, std::pair<std::unique_ptr<void*>, size_t>>
89*4d7e907cSAndroid Build Coastguard Worker                 cameraMetadata;
90*4d7e907cSAndroid Build Coastguard Worker 
91*4d7e907cSAndroid Build Coastguard Worker         /* Camera module characteristics */
92*4d7e907cSAndroid Build Coastguard Worker         camera_metadata_t* characteristics;
93*4d7e907cSAndroid Build Coastguard Worker     };
94*4d7e907cSAndroid Build Coastguard Worker 
95*4d7e907cSAndroid Build Coastguard Worker     class CameraGroupInfo : public CameraInfo {
96*4d7e907cSAndroid Build Coastguard Worker       public:
CameraGroupInfo()97*4d7e907cSAndroid Build Coastguard Worker         CameraGroupInfo() {}
98*4d7e907cSAndroid Build Coastguard Worker 
99*4d7e907cSAndroid Build Coastguard Worker         /* ID of member camera devices */
100*4d7e907cSAndroid Build Coastguard Worker         std::unordered_set<std::string> devices;
101*4d7e907cSAndroid Build Coastguard Worker 
102*4d7e907cSAndroid Build Coastguard Worker         /* The capture operation of member camera devices are synchronized */
103*4d7e907cSAndroid Build Coastguard Worker         bool synchronized = false;
104*4d7e907cSAndroid Build Coastguard Worker     };
105*4d7e907cSAndroid Build Coastguard Worker 
106*4d7e907cSAndroid Build Coastguard Worker     class SystemInfo {
107*4d7e907cSAndroid Build Coastguard Worker       public:
108*4d7e907cSAndroid Build Coastguard Worker         /* number of available cameras */
109*4d7e907cSAndroid Build Coastguard Worker         int32_t numCameras = 0;
110*4d7e907cSAndroid Build Coastguard Worker     };
111*4d7e907cSAndroid Build Coastguard Worker 
112*4d7e907cSAndroid Build Coastguard Worker     class DisplayInfo {
113*4d7e907cSAndroid Build Coastguard Worker       public:
114*4d7e907cSAndroid Build Coastguard Worker         /*
115*4d7e907cSAndroid Build Coastguard Worker          * List of supported input stream configurations; each array stores
116*4d7e907cSAndroid Build Coastguard Worker          * format, width, height, and direction values in the order.
117*4d7e907cSAndroid Build Coastguard Worker          */
118*4d7e907cSAndroid Build Coastguard Worker         std::unordered_map<int32_t, RawStreamConfiguration> streamConfigurations;
119*4d7e907cSAndroid Build Coastguard Worker     };
120*4d7e907cSAndroid Build Coastguard Worker 
121*4d7e907cSAndroid Build Coastguard Worker     /*
122*4d7e907cSAndroid Build Coastguard Worker      * Return system information
123*4d7e907cSAndroid Build Coastguard Worker      *
124*4d7e907cSAndroid Build Coastguard Worker      * @return SystemInfo
125*4d7e907cSAndroid Build Coastguard Worker      *         Constant reference of SystemInfo.
126*4d7e907cSAndroid Build Coastguard Worker      */
getSystemInfo()127*4d7e907cSAndroid Build Coastguard Worker     const SystemInfo& getSystemInfo() { return mSystemInfo; }
128*4d7e907cSAndroid Build Coastguard Worker 
129*4d7e907cSAndroid Build Coastguard Worker     /*
130*4d7e907cSAndroid Build Coastguard Worker      * Return a list of cameras
131*4d7e907cSAndroid Build Coastguard Worker      *
132*4d7e907cSAndroid Build Coastguard Worker      * This function assumes that it is not being called frequently.
133*4d7e907cSAndroid Build Coastguard Worker      *
134*4d7e907cSAndroid Build Coastguard Worker      * @return std::vector<std::string>
135*4d7e907cSAndroid Build Coastguard Worker      *         A vector that contains unique camera device identifiers.
136*4d7e907cSAndroid Build Coastguard Worker      */
getCameraList()137*4d7e907cSAndroid Build Coastguard Worker     std::vector<std::string> getCameraList() {
138*4d7e907cSAndroid Build Coastguard Worker         std::vector<std::string> aList;
139*4d7e907cSAndroid Build Coastguard Worker         for (auto& v : mCameraInfo) {
140*4d7e907cSAndroid Build Coastguard Worker             aList.push_back(v.first);
141*4d7e907cSAndroid Build Coastguard Worker         }
142*4d7e907cSAndroid Build Coastguard Worker 
143*4d7e907cSAndroid Build Coastguard Worker         return aList;
144*4d7e907cSAndroid Build Coastguard Worker     }
145*4d7e907cSAndroid Build Coastguard Worker 
146*4d7e907cSAndroid Build Coastguard Worker     /*
147*4d7e907cSAndroid Build Coastguard Worker      * Return a list of cameras
148*4d7e907cSAndroid Build Coastguard Worker      *
149*4d7e907cSAndroid Build Coastguard Worker      * @return CameraGroupInfo
150*4d7e907cSAndroid Build Coastguard Worker      *         A pointer to a camera group identified by a given id.
151*4d7e907cSAndroid Build Coastguard Worker      */
getCameraGroupInfo(const std::string & gid)152*4d7e907cSAndroid Build Coastguard Worker     std::unique_ptr<CameraGroupInfo>& getCameraGroupInfo(const std::string& gid) {
153*4d7e907cSAndroid Build Coastguard Worker         return mCameraGroupInfos[gid];
154*4d7e907cSAndroid Build Coastguard Worker     }
155*4d7e907cSAndroid Build Coastguard Worker 
156*4d7e907cSAndroid Build Coastguard Worker     /*
157*4d7e907cSAndroid Build Coastguard Worker      * Return a camera metadata
158*4d7e907cSAndroid Build Coastguard Worker      *
159*4d7e907cSAndroid Build Coastguard Worker      * @param  cameraId
160*4d7e907cSAndroid Build Coastguard Worker      *         Unique camera node identifier in std::string
161*4d7e907cSAndroid Build Coastguard Worker      *
162*4d7e907cSAndroid Build Coastguard Worker      * @return std::unique_ptr<CameraInfo>
163*4d7e907cSAndroid Build Coastguard Worker      *         A pointer to CameraInfo that is associated with a given camera
164*4d7e907cSAndroid Build Coastguard Worker      *         ID.  This returns a null pointer if this does not recognize a
165*4d7e907cSAndroid Build Coastguard Worker      *         given camera identifier.
166*4d7e907cSAndroid Build Coastguard Worker      */
getCameraInfo(const std::string cameraId)167*4d7e907cSAndroid Build Coastguard Worker     std::unique_ptr<CameraInfo>& getCameraInfo(const std::string cameraId) noexcept {
168*4d7e907cSAndroid Build Coastguard Worker         return mCameraInfo[cameraId];
169*4d7e907cSAndroid Build Coastguard Worker     }
170*4d7e907cSAndroid Build Coastguard Worker 
171*4d7e907cSAndroid Build Coastguard Worker   private:
172*4d7e907cSAndroid Build Coastguard Worker     /* Constructors */
ConfigManager(const char * xmlPath)173*4d7e907cSAndroid Build Coastguard Worker     ConfigManager(const char* xmlPath) : mConfigFilePath(xmlPath) {}
174*4d7e907cSAndroid Build Coastguard Worker 
175*4d7e907cSAndroid Build Coastguard Worker     /* System configuration */
176*4d7e907cSAndroid Build Coastguard Worker     SystemInfo mSystemInfo;
177*4d7e907cSAndroid Build Coastguard Worker 
178*4d7e907cSAndroid Build Coastguard Worker     /* Internal data structure for camera device information */
179*4d7e907cSAndroid Build Coastguard Worker     std::unordered_map<std::string, std::unique_ptr<CameraInfo>> mCameraInfo;
180*4d7e907cSAndroid Build Coastguard Worker 
181*4d7e907cSAndroid Build Coastguard Worker     /* Internal data structure for camera device information */
182*4d7e907cSAndroid Build Coastguard Worker     std::unordered_map<std::string, std::unique_ptr<DisplayInfo>> mDisplayInfo;
183*4d7e907cSAndroid Build Coastguard Worker 
184*4d7e907cSAndroid Build Coastguard Worker     /* Camera groups are stored in <groud id, CameraGroupInfo> hash map */
185*4d7e907cSAndroid Build Coastguard Worker     std::unordered_map<std::string, std::unique_ptr<CameraGroupInfo>> mCameraGroupInfos;
186*4d7e907cSAndroid Build Coastguard Worker 
187*4d7e907cSAndroid Build Coastguard Worker     /*
188*4d7e907cSAndroid Build Coastguard Worker      * Camera positions are stored in <position, camera id set> hash map.
189*4d7e907cSAndroid Build Coastguard Worker      * The position must be one of front, rear, left, and right.
190*4d7e907cSAndroid Build Coastguard Worker      */
191*4d7e907cSAndroid Build Coastguard Worker     std::unordered_map<std::string, std::unordered_set<std::string>> mCameraPosition;
192*4d7e907cSAndroid Build Coastguard Worker 
193*4d7e907cSAndroid Build Coastguard Worker     /* A path to XML configuration file */
194*4d7e907cSAndroid Build Coastguard Worker     const char* mConfigFilePath;
195*4d7e907cSAndroid Build Coastguard Worker 
196*4d7e907cSAndroid Build Coastguard Worker     /*
197*4d7e907cSAndroid Build Coastguard Worker      * Parse a given EVS configuration file and store the information
198*4d7e907cSAndroid Build Coastguard Worker      * internally.
199*4d7e907cSAndroid Build Coastguard Worker      *
200*4d7e907cSAndroid Build Coastguard Worker      * @return bool
201*4d7e907cSAndroid Build Coastguard Worker      *         True if it completes parsing a file successfully.
202*4d7e907cSAndroid Build Coastguard Worker      */
203*4d7e907cSAndroid Build Coastguard Worker     bool readConfigDataFromXML() noexcept;
204*4d7e907cSAndroid Build Coastguard Worker 
205*4d7e907cSAndroid Build Coastguard Worker     /*
206*4d7e907cSAndroid Build Coastguard Worker      * read the information of the vehicle
207*4d7e907cSAndroid Build Coastguard Worker      *
208*4d7e907cSAndroid Build Coastguard Worker      * @param  aSysElem
209*4d7e907cSAndroid Build Coastguard Worker      *         A pointer to "system" XML element.
210*4d7e907cSAndroid Build Coastguard Worker      */
211*4d7e907cSAndroid Build Coastguard Worker     void readSystemInfo(const tinyxml2::XMLElement* const aSysElem);
212*4d7e907cSAndroid Build Coastguard Worker 
213*4d7e907cSAndroid Build Coastguard Worker     /*
214*4d7e907cSAndroid Build Coastguard Worker      * read the information of camera devices
215*4d7e907cSAndroid Build Coastguard Worker      *
216*4d7e907cSAndroid Build Coastguard Worker      * @param  aCameraElem
217*4d7e907cSAndroid Build Coastguard Worker      *         A pointer to "camera" XML element that may contain multiple
218*4d7e907cSAndroid Build Coastguard Worker      *         "device" elements.
219*4d7e907cSAndroid Build Coastguard Worker      */
220*4d7e907cSAndroid Build Coastguard Worker     void readCameraInfo(const tinyxml2::XMLElement* const aCameraElem);
221*4d7e907cSAndroid Build Coastguard Worker 
222*4d7e907cSAndroid Build Coastguard Worker     /*
223*4d7e907cSAndroid Build Coastguard Worker      * read display device information
224*4d7e907cSAndroid Build Coastguard Worker      *
225*4d7e907cSAndroid Build Coastguard Worker      * @param  aDisplayElem
226*4d7e907cSAndroid Build Coastguard Worker      *         A pointer to "display" XML element that may contain multiple
227*4d7e907cSAndroid Build Coastguard Worker      *         "device" elements.
228*4d7e907cSAndroid Build Coastguard Worker      */
229*4d7e907cSAndroid Build Coastguard Worker     void readDisplayInfo(const tinyxml2::XMLElement* const aDisplayElem);
230*4d7e907cSAndroid Build Coastguard Worker 
231*4d7e907cSAndroid Build Coastguard Worker     /*
232*4d7e907cSAndroid Build Coastguard Worker      * read camera device information
233*4d7e907cSAndroid Build Coastguard Worker      *
234*4d7e907cSAndroid Build Coastguard Worker      * @param  aCamera
235*4d7e907cSAndroid Build Coastguard Worker      *         A pointer to CameraInfo that will be completed by this
236*4d7e907cSAndroid Build Coastguard Worker      *         method.
237*4d7e907cSAndroid Build Coastguard Worker      *         aDeviceElem
238*4d7e907cSAndroid Build Coastguard Worker      *         A pointer to "device" XML element that contains camera module
239*4d7e907cSAndroid Build Coastguard Worker      *         capability info and its characteristics.
240*4d7e907cSAndroid Build Coastguard Worker      *
241*4d7e907cSAndroid Build Coastguard Worker      * @return bool
242*4d7e907cSAndroid Build Coastguard Worker      *         Return false upon any failure in reading and processing camera
243*4d7e907cSAndroid Build Coastguard Worker      *         device information.
244*4d7e907cSAndroid Build Coastguard Worker      */
245*4d7e907cSAndroid Build Coastguard Worker     bool readCameraDeviceInfo(CameraInfo* aCamera, const tinyxml2::XMLElement* aDeviceElem);
246*4d7e907cSAndroid Build Coastguard Worker 
247*4d7e907cSAndroid Build Coastguard Worker     /*
248*4d7e907cSAndroid Build Coastguard Worker      * read camera metadata
249*4d7e907cSAndroid Build Coastguard Worker      *
250*4d7e907cSAndroid Build Coastguard Worker      * @param  aCapElem
251*4d7e907cSAndroid Build Coastguard Worker      *         A pointer to "cap" XML element.
252*4d7e907cSAndroid Build Coastguard Worker      * @param  aCamera
253*4d7e907cSAndroid Build Coastguard Worker      *         A pointer to CameraInfo that is being filled by this method.
254*4d7e907cSAndroid Build Coastguard Worker      * @param  dataSize
255*4d7e907cSAndroid Build Coastguard Worker      *         Required size of memory to store camera metadata found in this
256*4d7e907cSAndroid Build Coastguard Worker      *         method.  This is calculated in this method and returned to the
257*4d7e907cSAndroid Build Coastguard Worker      *         caller for camera_metadata allocation.
258*4d7e907cSAndroid Build Coastguard Worker      *
259*4d7e907cSAndroid Build Coastguard Worker      * @return size_t
260*4d7e907cSAndroid Build Coastguard Worker      *         Number of camera metadata entries
261*4d7e907cSAndroid Build Coastguard Worker      */
262*4d7e907cSAndroid Build Coastguard Worker     size_t readCameraCapabilities(const tinyxml2::XMLElement* const aCapElem, CameraInfo* aCamera,
263*4d7e907cSAndroid Build Coastguard Worker                                   size_t& dataSize);
264*4d7e907cSAndroid Build Coastguard Worker 
265*4d7e907cSAndroid Build Coastguard Worker     /*
266*4d7e907cSAndroid Build Coastguard Worker      * read camera metadata
267*4d7e907cSAndroid Build Coastguard Worker      *
268*4d7e907cSAndroid Build Coastguard Worker      * @param  aParamElem
269*4d7e907cSAndroid Build Coastguard Worker      *         A pointer to "characteristics" XML element.
270*4d7e907cSAndroid Build Coastguard Worker      * @param  aCamera
271*4d7e907cSAndroid Build Coastguard Worker      *         A pointer to CameraInfo that is being filled by this method.
272*4d7e907cSAndroid Build Coastguard Worker      * @param  dataSize
273*4d7e907cSAndroid Build Coastguard Worker      *         Required size of memory to store camera metadata found in this
274*4d7e907cSAndroid Build Coastguard Worker      *         method.
275*4d7e907cSAndroid Build Coastguard Worker      *
276*4d7e907cSAndroid Build Coastguard Worker      * @return size_t
277*4d7e907cSAndroid Build Coastguard Worker      *         Number of camera metadata entries
278*4d7e907cSAndroid Build Coastguard Worker      */
279*4d7e907cSAndroid Build Coastguard Worker     size_t readCameraMetadata(const tinyxml2::XMLElement* const aParamElem, CameraInfo* aCamera,
280*4d7e907cSAndroid Build Coastguard Worker                               size_t& dataSize);
281*4d7e907cSAndroid Build Coastguard Worker 
282*4d7e907cSAndroid Build Coastguard Worker     /*
283*4d7e907cSAndroid Build Coastguard Worker      * construct camera_metadata_t from camera capabilities and metadata
284*4d7e907cSAndroid Build Coastguard Worker      *
285*4d7e907cSAndroid Build Coastguard Worker      * @param  aCamera
286*4d7e907cSAndroid Build Coastguard Worker      *         A pointer to CameraInfo that is being filled by this method.
287*4d7e907cSAndroid Build Coastguard Worker      * @param  totalEntries
288*4d7e907cSAndroid Build Coastguard Worker      *         Number of camera metadata entries to be added.
289*4d7e907cSAndroid Build Coastguard Worker      * @param  totalDataSize
290*4d7e907cSAndroid Build Coastguard Worker      *         Sum of sizes of camera metadata entries to be added.
291*4d7e907cSAndroid Build Coastguard Worker      *
292*4d7e907cSAndroid Build Coastguard Worker      * @return bool
293*4d7e907cSAndroid Build Coastguard Worker      *         False if either it fails to allocate memory for camera metadata
294*4d7e907cSAndroid Build Coastguard Worker      *         or its size is not large enough to add all found camera metadata
295*4d7e907cSAndroid Build Coastguard Worker      *         entries.
296*4d7e907cSAndroid Build Coastguard Worker      */
297*4d7e907cSAndroid Build Coastguard Worker     bool constructCameraMetadata(CameraInfo* aCamera, const size_t totalEntries,
298*4d7e907cSAndroid Build Coastguard Worker                                  const size_t totalDataSize);
299*4d7e907cSAndroid Build Coastguard Worker };
300*4d7e907cSAndroid Build Coastguard Worker 
301*4d7e907cSAndroid Build Coastguard Worker }  // namespace android::hardware::automotive::evs::V1_1::implementation
302*4d7e907cSAndroid Build Coastguard Worker #endif  // ANDROID_HARDWARE_AUTOMOTIVE_EVS_V1_1_CONFIGMANAGER_H
303