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