diff options
Diffstat (limited to 'automotive/evs/1.1/default/ConfigManager.cpp')
-rw-r--r-- | automotive/evs/1.1/default/ConfigManager.cpp | 246 |
1 files changed, 100 insertions, 146 deletions
diff --git a/automotive/evs/1.1/default/ConfigManager.cpp b/automotive/evs/1.1/default/ConfigManager.cpp index 986793e8a8..ca8cfae150 100644 --- a/automotive/evs/1.1/default/ConfigManager.cpp +++ b/automotive/evs/1.1/default/ConfigManager.cpp @@ -14,38 +14,40 @@ * limitations under the License. */ -#include <sstream> -#include <fstream> -#include <thread> +#include "ConfigManager.h" +#include <android/hardware/camera/device/3.2/ICameraDevice.h> #include <hardware/gralloc.h> #include <utils/SystemClock.h> -#include <android/hardware/camera/device/3.2/ICameraDevice.h> -#include "ConfigManager.h" +#include <fstream> +#include <sstream> +#include <thread> -using ::android::hardware::camera::device::V3_2::StreamRotation; +namespace android::hardware::automotive::evs::V1_1::implementation { +using namespace std; +using namespace tinyxml2; +using hardware::camera::device::V3_2::StreamRotation; ConfigManager::~ConfigManager() { /* Nothing to do */ } - -void ConfigManager::readCameraInfo(const XMLElement * const aCameraElem) { +void ConfigManager::readCameraInfo(const XMLElement* const aCameraElem) { if (aCameraElem == nullptr) { ALOGW("XML file does not have required camera element"); return; } - const XMLElement *curElem = aCameraElem->FirstChildElement(); + const XMLElement* curElem = aCameraElem->FirstChildElement(); while (curElem != nullptr) { if (!strcmp(curElem->Name(), "group")) { /* camera group identifier */ - const char *id = curElem->FindAttribute("id")->Value(); + const char* id = curElem->FindAttribute("id")->Value(); /* create a camera group to be filled */ - CameraGroupInfo *aCamera = new CameraGroupInfo(); + CameraGroupInfo* aCamera = new CameraGroupInfo(); /* read camera device information */ if (!readCameraDeviceInfo(aCamera, curElem)) { @@ -55,28 +57,26 @@ void ConfigManager::readCameraInfo(const XMLElement * const aCameraElem) { } /* camera group synchronization */ - const char *sync = curElem->FindAttribute("synchronized")->Value(); + const char* sync = curElem->FindAttribute("synchronized")->Value(); if (!strcmp(sync, "CALIBRATED")) { - aCamera->synchronized = - ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_CALIBRATED; + aCamera->synchronized = ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_CALIBRATED; } else if (!strcmp(sync, "APPROXIMATE")) { - aCamera->synchronized = - ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_APPROXIMATE; + aCamera->synchronized = ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_APPROXIMATE; } else { - aCamera->synchronized = 0; // Not synchronized + aCamera->synchronized = 0; // Not synchronized } /* add a group to hash map */ mCameraGroupInfos.insert_or_assign(id, unique_ptr<CameraGroupInfo>(aCamera)); } else if (!strcmp(curElem->Name(), "device")) { /* camera unique identifier */ - const char *id = curElem->FindAttribute("id")->Value(); + const char* id = curElem->FindAttribute("id")->Value(); /* camera mount location */ - const char *pos = curElem->FindAttribute("position")->Value(); + const char* pos = curElem->FindAttribute("position")->Value(); /* create a camera device to be filled */ - CameraInfo *aCamera = new CameraInfo(); + CameraInfo* aCamera = new CameraInfo(); /* read camera device information */ if (!readCameraDeviceInfo(aCamera, curElem)) { @@ -99,10 +99,7 @@ void ConfigManager::readCameraInfo(const XMLElement * const aCameraElem) { } } - -bool -ConfigManager::readCameraDeviceInfo(CameraInfo *aCamera, - const XMLElement *aDeviceElem) { +bool ConfigManager::readCameraDeviceInfo(CameraInfo* aCamera, const XMLElement* aDeviceElem) { if (aCamera == nullptr || aDeviceElem == nullptr) { return false; } @@ -113,16 +110,11 @@ ConfigManager::readCameraDeviceInfo(CameraInfo *aCamera, /* read device capabilities */ totalEntries += - readCameraCapabilities(aDeviceElem->FirstChildElement("caps"), - aCamera, - totalDataSize); - + readCameraCapabilities(aDeviceElem->FirstChildElement("caps"), aCamera, totalDataSize); /* read camera metadata */ - totalEntries += - readCameraMetadata(aDeviceElem->FirstChildElement("characteristics"), - aCamera, - totalDataSize); + totalEntries += readCameraMetadata(aDeviceElem->FirstChildElement("characteristics"), aCamera, + totalDataSize); /* construct camera_metadata_t */ if (!constructCameraMetadata(aCamera, totalEntries, totalDataSize)) { @@ -133,40 +125,34 @@ ConfigManager::readCameraDeviceInfo(CameraInfo *aCamera, return true; } - -size_t -ConfigManager::readCameraCapabilities(const XMLElement * const aCapElem, - CameraInfo *aCamera, - size_t &dataSize) { +size_t ConfigManager::readCameraCapabilities(const XMLElement* const aCapElem, CameraInfo* aCamera, + size_t& dataSize) { if (aCapElem == nullptr || aCamera == nullptr) { return 0; } string token; - const XMLElement *curElem = nullptr; + const XMLElement* curElem = nullptr; /* a list of supported camera parameters/controls */ curElem = aCapElem->FirstChildElement("supported_controls"); if (curElem != nullptr) { - const XMLElement *ctrlElem = curElem->FirstChildElement("control"); + const XMLElement* ctrlElem = curElem->FirstChildElement("control"); while (ctrlElem != nullptr) { - const char *nameAttr = ctrlElem->FindAttribute("name")->Value();; + const char* nameAttr = ctrlElem->FindAttribute("name")->Value(); + ; const int32_t minVal = stoi(ctrlElem->FindAttribute("min")->Value()); const int32_t maxVal = stoi(ctrlElem->FindAttribute("max")->Value()); int32_t stepVal = 1; - const XMLAttribute *stepAttr = ctrlElem->FindAttribute("step"); + const XMLAttribute* stepAttr = ctrlElem->FindAttribute("step"); if (stepAttr != nullptr) { stepVal = stoi(stepAttr->Value()); } CameraParam aParam; - if (ConfigManagerUtil::convertToEvsCameraParam(nameAttr, - aParam)) { - aCamera->controls.emplace( - aParam, - make_tuple(minVal, maxVal, stepVal) - ); + if (ConfigManagerUtil::convertToEvsCameraParam(nameAttr, aParam)) { + aCamera->controls.emplace(aParam, make_tuple(minVal, maxVal, stepVal)); } ctrlElem = ctrlElem->NextSiblingElement("control"); @@ -177,11 +163,11 @@ ConfigManager::readCameraCapabilities(const XMLElement * const aCapElem, curElem = aCapElem->FirstChildElement("stream"); while (curElem != nullptr) { /* read 5 attributes */ - const XMLAttribute *idAttr = curElem->FindAttribute("id"); - const XMLAttribute *widthAttr = curElem->FindAttribute("width"); - const XMLAttribute *heightAttr = curElem->FindAttribute("height"); - const XMLAttribute *fmtAttr = curElem->FindAttribute("format"); - const XMLAttribute *fpsAttr = curElem->FindAttribute("framerate"); + const XMLAttribute* idAttr = curElem->FindAttribute("id"); + const XMLAttribute* widthAttr = curElem->FindAttribute("width"); + const XMLAttribute* heightAttr = curElem->FindAttribute("height"); + const XMLAttribute* fmtAttr = curElem->FindAttribute("format"); + const XMLAttribute* fpsAttr = curElem->FindAttribute("framerate"); const int32_t id = stoi(idAttr->Value()); int32_t framerate = 0; @@ -190,16 +176,13 @@ ConfigManager::readCameraCapabilities(const XMLElement * const aCapElem, } int32_t pixFormat; - if (ConfigManagerUtil::convertToPixelFormat(fmtAttr->Value(), - pixFormat)) { - RawStreamConfiguration cfg = { - id, - stoi(widthAttr->Value()), - stoi(heightAttr->Value()), - pixFormat, - ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT, - framerate - }; + if (ConfigManagerUtil::convertToPixelFormat(fmtAttr->Value(), pixFormat)) { + RawStreamConfiguration cfg = {id, + stoi(widthAttr->Value()), + stoi(heightAttr->Value()), + pixFormat, + ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT, + framerate}; aCamera->streamConfigurations.insert_or_assign(id, cfg); } @@ -207,70 +190,58 @@ ConfigManager::readCameraCapabilities(const XMLElement * const aCapElem, } dataSize = calculate_camera_metadata_entry_data_size( - get_camera_metadata_tag_type( - ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS - ), - aCamera->streamConfigurations.size() * kStreamCfgSz - ); + get_camera_metadata_tag_type(ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS), + aCamera->streamConfigurations.size() * kStreamCfgSz); /* a single camera metadata entry contains multiple stream configurations */ return dataSize > 0 ? 1 : 0; } - -size_t -ConfigManager::readCameraMetadata(const XMLElement * const aParamElem, - CameraInfo *aCamera, - size_t &dataSize) { +size_t ConfigManager::readCameraMetadata(const XMLElement* const aParamElem, CameraInfo* aCamera, + size_t& dataSize) { if (aParamElem == nullptr || aCamera == nullptr) { return 0; } - const XMLElement *curElem = aParamElem->FirstChildElement("parameter"); + const XMLElement* curElem = aParamElem->FirstChildElement("parameter"); size_t numEntries = 0; camera_metadata_tag_t tag; while (curElem != nullptr) { if (!ConfigManagerUtil::convertToMetadataTag(curElem->FindAttribute("name")->Value(), tag)) { - switch(tag) { + switch (tag) { case ANDROID_LENS_DISTORTION: case ANDROID_LENS_POSE_ROTATION: case ANDROID_LENS_POSE_TRANSLATION: case ANDROID_LENS_INTRINSIC_CALIBRATION: { /* float[] */ size_t count = 0; - void *data = ConfigManagerUtil::convertFloatArray( - curElem->FindAttribute("size")->Value(), - curElem->FindAttribute("value")->Value(), - count - ); + void* data = ConfigManagerUtil::convertFloatArray( + curElem->FindAttribute("size")->Value(), + curElem->FindAttribute("value")->Value(), count); aCamera->cameraMetadata.insert_or_assign( - tag, make_pair(make_unique<void *>(data), count) - ); + tag, make_pair(make_unique<void*>(data), count)); ++numEntries; dataSize += calculate_camera_metadata_entry_data_size( - get_camera_metadata_tag_type(tag), count - ); + get_camera_metadata_tag_type(tag), count); break; } case ANDROID_REQUEST_AVAILABLE_CAPABILITIES: { - camera_metadata_enum_android_request_available_capabilities_t *data = - new camera_metadata_enum_android_request_available_capabilities_t[1]; + camera_metadata_enum_android_request_available_capabilities_t* data = + new camera_metadata_enum_android_request_available_capabilities_t[1]; if (ConfigManagerUtil::convertToCameraCapability( - curElem->FindAttribute("value")->Value(), *data)) { - curElem->FindAttribute("value")->Value(), - aCamera->cameraMetadata.insert_or_assign( - tag, make_pair(make_unique<void *>(data), 1) - ); + curElem->FindAttribute("value")->Value(), *data)) { + curElem->FindAttribute("value")->Value(), + aCamera->cameraMetadata.insert_or_assign( + tag, make_pair(make_unique<void*>(data), 1)); ++numEntries; dataSize += calculate_camera_metadata_entry_data_size( - get_camera_metadata_tag_type(tag), 1 - ); + get_camera_metadata_tag_type(tag), 1); } break; } @@ -278,13 +249,11 @@ ConfigManager::readCameraMetadata(const XMLElement * const aParamElem, case ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS: { /* a comma-separated list of physical camera devices */ size_t len = strlen(curElem->FindAttribute("value")->Value()); - char *data = new char[len + 1]; - memcpy(data, - curElem->FindAttribute("value")->Value(), - len * sizeof(char)); + char* data = new char[len + 1]; + memcpy(data, curElem->FindAttribute("value")->Value(), len * sizeof(char)); /* replace commas with null char */ - char *p = data; + char* p = data; while (*p != '\0') { if (*p == ',') { *p = '\0'; @@ -293,19 +262,16 @@ ConfigManager::readCameraMetadata(const XMLElement * const aParamElem, } aCamera->cameraMetadata.insert_or_assign( - tag, make_pair(make_unique<void *>(data), len) - ); + tag, make_pair(make_unique<void*>(data), len)); ++numEntries; dataSize += calculate_camera_metadata_entry_data_size( - get_camera_metadata_tag_type(tag), len - ); + get_camera_metadata_tag_type(tag), len); break; } default: - ALOGW("Parameter %s is not supported", - curElem->FindAttribute("name")->Value()); + ALOGW("Parameter %s is not supported", curElem->FindAttribute("name")->Value()); break; } } @@ -316,11 +282,8 @@ ConfigManager::readCameraMetadata(const XMLElement * const aParamElem, return numEntries; } - -bool -ConfigManager::constructCameraMetadata(CameraInfo *aCamera, - const size_t totalEntries, - const size_t totalDataSize) { +bool ConfigManager::constructCameraMetadata(CameraInfo* aCamera, const size_t totalEntries, + const size_t totalDataSize) { if (aCamera == nullptr || !aCamera->allocate(totalEntries, totalDataSize)) { ALOGE("Failed to allocate memory for camera metadata"); return false; @@ -328,16 +291,15 @@ ConfigManager::constructCameraMetadata(CameraInfo *aCamera, const size_t numStreamConfigs = aCamera->streamConfigurations.size(); unique_ptr<int32_t[]> data(new int32_t[kStreamCfgSz * numStreamConfigs]); - int32_t *ptr = data.get(); - for (auto &cfg : aCamera->streamConfigurations) { + int32_t* ptr = data.get(); + for (auto& cfg : aCamera->streamConfigurations) { for (auto i = 0; i < kStreamCfgSz; ++i) { - *ptr++ = cfg.second[i]; + *ptr++ = cfg.second[i]; } } int32_t err = add_camera_metadata_entry(aCamera->characteristics, ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS, - data.get(), - numStreamConfigs * kStreamCfgSz); + data.get(), numStreamConfigs * kStreamCfgSz); if (err) { ALOGE("Failed to add stream configurations to metadata, ignored"); @@ -345,11 +307,9 @@ ConfigManager::constructCameraMetadata(CameraInfo *aCamera, } bool success = true; - for (auto &[tag, entry] : aCamera->cameraMetadata) { + for (auto& [tag, entry] : aCamera->cameraMetadata) { /* try to add new camera metadata entry */ - int32_t err = add_camera_metadata_entry(aCamera->characteristics, - tag, - entry.first.get(), + int32_t err = add_camera_metadata_entry(aCamera->characteristics, tag, entry.first.get(), entry.second); if (err) { ALOGE("Failed to add an entry with a tag 0x%X", tag); @@ -376,8 +336,7 @@ ConfigManager::constructCameraMetadata(CameraInfo *aCamera, return success; } - -void ConfigManager::readSystemInfo(const XMLElement * const aSysElem) { +void ConfigManager::readSystemInfo(const XMLElement* const aSysElem) { if (aSysElem == nullptr) { return; } @@ -389,24 +348,22 @@ void ConfigManager::readSystemInfo(const XMLElement * const aSysElem) { */ /* read number of cameras available in the system */ - const XMLElement *xmlElem = aSysElem->FirstChildElement("num_cameras"); + const XMLElement* xmlElem = aSysElem->FirstChildElement("num_cameras"); if (xmlElem != nullptr) { - mSystemInfo.numCameras = - stoi(xmlElem->FindAttribute("value")->Value()); + mSystemInfo.numCameras = stoi(xmlElem->FindAttribute("value")->Value()); } } - -void ConfigManager::readDisplayInfo(const XMLElement * const aDisplayElem) { +void ConfigManager::readDisplayInfo(const XMLElement* const aDisplayElem) { if (aDisplayElem == nullptr) { ALOGW("XML file does not have required camera element"); return; } - const XMLElement *curDev = aDisplayElem->FirstChildElement("device"); + const XMLElement* curDev = aDisplayElem->FirstChildElement("device"); while (curDev != nullptr) { - const char *id = curDev->FindAttribute("id")->Value(); - //const char *pos = curDev->FirstAttribute("position")->Value(); + const char* id = curDev->FindAttribute("id")->Value(); + // const char *pos = curDev->FirstAttribute("position")->Value(); unique_ptr<DisplayInfo> dpy(new DisplayInfo()); if (dpy == nullptr) { @@ -414,27 +371,26 @@ void ConfigManager::readDisplayInfo(const XMLElement * const aDisplayElem) { return; } - const XMLElement *cap = curDev->FirstChildElement("caps"); + const XMLElement* cap = curDev->FirstChildElement("caps"); if (cap != nullptr) { - const XMLElement *curStream = cap->FirstChildElement("stream"); + const XMLElement* curStream = cap->FirstChildElement("stream"); while (curStream != nullptr) { /* read 4 attributes */ - const XMLAttribute *idAttr = curStream->FindAttribute("id"); - const XMLAttribute *widthAttr = curStream->FindAttribute("width"); - const XMLAttribute *heightAttr = curStream->FindAttribute("height"); - const XMLAttribute *fmtAttr = curStream->FindAttribute("format"); + const XMLAttribute* idAttr = curStream->FindAttribute("id"); + const XMLAttribute* widthAttr = curStream->FindAttribute("width"); + const XMLAttribute* heightAttr = curStream->FindAttribute("height"); + const XMLAttribute* fmtAttr = curStream->FindAttribute("format"); const int32_t id = stoi(idAttr->Value()); int32_t pixFormat; - if (ConfigManagerUtil::convertToPixelFormat(fmtAttr->Value(), - pixFormat)) { + if (ConfigManagerUtil::convertToPixelFormat(fmtAttr->Value(), pixFormat)) { RawStreamConfiguration cfg = { - id, - stoi(widthAttr->Value()), - stoi(heightAttr->Value()), - pixFormat, - ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_INPUT, - 0 // unused + id, + stoi(widthAttr->Value()), + stoi(heightAttr->Value()), + pixFormat, + ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_INPUT, + 0 // unused }; dpy->streamConfigurations.insert_or_assign(id, cfg); } @@ -450,7 +406,6 @@ void ConfigManager::readDisplayInfo(const XMLElement * const aDisplayElem) { return; } - bool ConfigManager::readConfigDataFromXML() noexcept { XMLDocument xmlDoc; @@ -464,7 +419,7 @@ bool ConfigManager::readConfigDataFromXML() noexcept { } /* retrieve the root element */ - const XMLElement *rootElem = xmlDoc.RootElement(); + const XMLElement* rootElem = xmlDoc.RootElement(); if (strcmp(rootElem->Name(), "configuration")) { ALOGE("A configuration file is not in the required format. " "See /etc/automotive/evs/evs_configuration.dtd"); @@ -487,12 +442,10 @@ bool ConfigManager::readConfigDataFromXML() noexcept { ALOGI("Parsing configuration file takes %lf (ms)", (double)(parsingEnd - parsingStart) / 1000000.0); - return true; } - -std::unique_ptr<ConfigManager> ConfigManager::Create(const char *path) { +std::unique_ptr<ConfigManager> ConfigManager::Create(const char* path) { unique_ptr<ConfigManager> cfgMgr(new ConfigManager(path)); /* @@ -510,3 +463,4 @@ std::unique_ptr<ConfigManager> ConfigManager::Create(const char *path) { } } +} // namespace android::hardware::automotive::evs::V1_1::implementation |