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
17*4d7e907cSAndroid Build Coastguard Worker #include "ConfigManagerUtil.h"
18*4d7e907cSAndroid Build Coastguard Worker
19*4d7e907cSAndroid Build Coastguard Worker #include <log/log.h>
20*4d7e907cSAndroid Build Coastguard Worker #include <system/graphics-base-v1.0.h>
21*4d7e907cSAndroid Build Coastguard Worker
22*4d7e907cSAndroid Build Coastguard Worker #include <linux/videodev2.h>
23*4d7e907cSAndroid Build Coastguard Worker #include <sstream>
24*4d7e907cSAndroid Build Coastguard Worker #include <string>
25*4d7e907cSAndroid Build Coastguard Worker
26*4d7e907cSAndroid Build Coastguard Worker namespace android::hardware::automotive::evs::V1_1::implementation {
27*4d7e907cSAndroid Build Coastguard Worker
28*4d7e907cSAndroid Build Coastguard Worker using namespace std;
29*4d7e907cSAndroid Build Coastguard Worker
convertToEvsCameraParam(const string & id,CameraParam & camParam)30*4d7e907cSAndroid Build Coastguard Worker bool ConfigManagerUtil::convertToEvsCameraParam(const string& id, CameraParam& camParam) {
31*4d7e907cSAndroid Build Coastguard Worker string trimmed = ConfigManagerUtil::trimString(id);
32*4d7e907cSAndroid Build Coastguard Worker bool success = true;
33*4d7e907cSAndroid Build Coastguard Worker
34*4d7e907cSAndroid Build Coastguard Worker if (!trimmed.compare("BRIGHTNESS")) {
35*4d7e907cSAndroid Build Coastguard Worker camParam = CameraParam::BRIGHTNESS;
36*4d7e907cSAndroid Build Coastguard Worker } else if (!trimmed.compare("CONTRAST")) {
37*4d7e907cSAndroid Build Coastguard Worker camParam = CameraParam::CONTRAST;
38*4d7e907cSAndroid Build Coastguard Worker } else if (!trimmed.compare("AUTOGAIN")) {
39*4d7e907cSAndroid Build Coastguard Worker camParam = CameraParam::AUTOGAIN;
40*4d7e907cSAndroid Build Coastguard Worker } else if (!trimmed.compare("GAIN")) {
41*4d7e907cSAndroid Build Coastguard Worker camParam = CameraParam::GAIN;
42*4d7e907cSAndroid Build Coastguard Worker } else if (!trimmed.compare("AUTO_WHITE_BALANCE")) {
43*4d7e907cSAndroid Build Coastguard Worker camParam = CameraParam::AUTO_WHITE_BALANCE;
44*4d7e907cSAndroid Build Coastguard Worker } else if (!trimmed.compare("WHITE_BALANCE_TEMPERATURE")) {
45*4d7e907cSAndroid Build Coastguard Worker camParam = CameraParam::WHITE_BALANCE_TEMPERATURE;
46*4d7e907cSAndroid Build Coastguard Worker } else if (!trimmed.compare("SHARPNESS")) {
47*4d7e907cSAndroid Build Coastguard Worker camParam = CameraParam::SHARPNESS;
48*4d7e907cSAndroid Build Coastguard Worker } else if (!trimmed.compare("AUTO_EXPOSURE")) {
49*4d7e907cSAndroid Build Coastguard Worker camParam = CameraParam::AUTO_EXPOSURE;
50*4d7e907cSAndroid Build Coastguard Worker } else if (!trimmed.compare("ABSOLUTE_EXPOSURE")) {
51*4d7e907cSAndroid Build Coastguard Worker camParam = CameraParam::ABSOLUTE_EXPOSURE;
52*4d7e907cSAndroid Build Coastguard Worker } else if (!trimmed.compare("ABSOLUTE_FOCUS")) {
53*4d7e907cSAndroid Build Coastguard Worker camParam = CameraParam::ABSOLUTE_FOCUS;
54*4d7e907cSAndroid Build Coastguard Worker } else if (!trimmed.compare("AUTO_FOCUS")) {
55*4d7e907cSAndroid Build Coastguard Worker camParam = CameraParam::AUTO_FOCUS;
56*4d7e907cSAndroid Build Coastguard Worker } else if (!trimmed.compare("ABSOLUTE_ZOOM")) {
57*4d7e907cSAndroid Build Coastguard Worker camParam = CameraParam::ABSOLUTE_ZOOM;
58*4d7e907cSAndroid Build Coastguard Worker } else {
59*4d7e907cSAndroid Build Coastguard Worker success = false;
60*4d7e907cSAndroid Build Coastguard Worker }
61*4d7e907cSAndroid Build Coastguard Worker
62*4d7e907cSAndroid Build Coastguard Worker return success;
63*4d7e907cSAndroid Build Coastguard Worker }
64*4d7e907cSAndroid Build Coastguard Worker
convertToPixelFormat(const string & format,int32_t & pixFormat)65*4d7e907cSAndroid Build Coastguard Worker bool ConfigManagerUtil::convertToPixelFormat(const string& format, int32_t& pixFormat) {
66*4d7e907cSAndroid Build Coastguard Worker string trimmed = ConfigManagerUtil::trimString(format);
67*4d7e907cSAndroid Build Coastguard Worker bool success = true;
68*4d7e907cSAndroid Build Coastguard Worker
69*4d7e907cSAndroid Build Coastguard Worker if (!trimmed.compare("RGBA_8888")) {
70*4d7e907cSAndroid Build Coastguard Worker pixFormat = HAL_PIXEL_FORMAT_RGBA_8888;
71*4d7e907cSAndroid Build Coastguard Worker } else if (!trimmed.compare("YCRCB_420_SP")) {
72*4d7e907cSAndroid Build Coastguard Worker pixFormat = HAL_PIXEL_FORMAT_YCRCB_420_SP;
73*4d7e907cSAndroid Build Coastguard Worker } else if (!trimmed.compare("YCBCR_422_I")) {
74*4d7e907cSAndroid Build Coastguard Worker pixFormat = HAL_PIXEL_FORMAT_YCBCR_422_I;
75*4d7e907cSAndroid Build Coastguard Worker } else {
76*4d7e907cSAndroid Build Coastguard Worker success = false;
77*4d7e907cSAndroid Build Coastguard Worker }
78*4d7e907cSAndroid Build Coastguard Worker
79*4d7e907cSAndroid Build Coastguard Worker return success;
80*4d7e907cSAndroid Build Coastguard Worker }
81*4d7e907cSAndroid Build Coastguard Worker
convertToMetadataTag(const char * name,camera_metadata_tag & aTag)82*4d7e907cSAndroid Build Coastguard Worker bool ConfigManagerUtil::convertToMetadataTag(const char* name, camera_metadata_tag& aTag) {
83*4d7e907cSAndroid Build Coastguard Worker if (!strcmp(name, "LENS_DISTORTION")) {
84*4d7e907cSAndroid Build Coastguard Worker aTag = ANDROID_LENS_DISTORTION;
85*4d7e907cSAndroid Build Coastguard Worker } else if (!strcmp(name, "LENS_INTRINSIC_CALIBRATION")) {
86*4d7e907cSAndroid Build Coastguard Worker aTag = ANDROID_LENS_INTRINSIC_CALIBRATION;
87*4d7e907cSAndroid Build Coastguard Worker } else if (!strcmp(name, "LENS_POSE_ROTATION")) {
88*4d7e907cSAndroid Build Coastguard Worker aTag = ANDROID_LENS_POSE_ROTATION;
89*4d7e907cSAndroid Build Coastguard Worker } else if (!strcmp(name, "LENS_POSE_TRANSLATION")) {
90*4d7e907cSAndroid Build Coastguard Worker aTag = ANDROID_LENS_POSE_TRANSLATION;
91*4d7e907cSAndroid Build Coastguard Worker } else if (!strcmp(name, "REQUEST_AVAILABLE_CAPABILITIES")) {
92*4d7e907cSAndroid Build Coastguard Worker aTag = ANDROID_REQUEST_AVAILABLE_CAPABILITIES;
93*4d7e907cSAndroid Build Coastguard Worker } else if (!strcmp(name, "LOGICAL_MULTI_CAMERA_PHYSICAL_IDS")) {
94*4d7e907cSAndroid Build Coastguard Worker aTag = ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS;
95*4d7e907cSAndroid Build Coastguard Worker } else {
96*4d7e907cSAndroid Build Coastguard Worker return false;
97*4d7e907cSAndroid Build Coastguard Worker }
98*4d7e907cSAndroid Build Coastguard Worker
99*4d7e907cSAndroid Build Coastguard Worker return true;
100*4d7e907cSAndroid Build Coastguard Worker }
101*4d7e907cSAndroid Build Coastguard Worker
convertToCameraCapability(const char * name,camera_metadata_enum_android_request_available_capabilities_t & cap)102*4d7e907cSAndroid Build Coastguard Worker bool ConfigManagerUtil::convertToCameraCapability(
103*4d7e907cSAndroid Build Coastguard Worker const char* name, camera_metadata_enum_android_request_available_capabilities_t& cap) {
104*4d7e907cSAndroid Build Coastguard Worker if (!strcmp(name, "DEPTH_OUTPUT")) {
105*4d7e907cSAndroid Build Coastguard Worker cap = ANDROID_REQUEST_AVAILABLE_CAPABILITIES_DEPTH_OUTPUT;
106*4d7e907cSAndroid Build Coastguard Worker } else if (!strcmp(name, "LOGICAL_MULTI_CAMERA")) {
107*4d7e907cSAndroid Build Coastguard Worker cap = ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA;
108*4d7e907cSAndroid Build Coastguard Worker } else if (!strcmp(name, "MONOCHROME")) {
109*4d7e907cSAndroid Build Coastguard Worker cap = ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME;
110*4d7e907cSAndroid Build Coastguard Worker } else if (!strcmp(name, "SECURE_IMAGE_DATA")) {
111*4d7e907cSAndroid Build Coastguard Worker cap = ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA;
112*4d7e907cSAndroid Build Coastguard Worker } else {
113*4d7e907cSAndroid Build Coastguard Worker return false;
114*4d7e907cSAndroid Build Coastguard Worker }
115*4d7e907cSAndroid Build Coastguard Worker
116*4d7e907cSAndroid Build Coastguard Worker return true;
117*4d7e907cSAndroid Build Coastguard Worker }
118*4d7e907cSAndroid Build Coastguard Worker
convertFloatArray(const char * sz,const char * vals,size_t & count,const char delimiter)119*4d7e907cSAndroid Build Coastguard Worker float* ConfigManagerUtil::convertFloatArray(const char* sz, const char* vals, size_t& count,
120*4d7e907cSAndroid Build Coastguard Worker const char delimiter) {
121*4d7e907cSAndroid Build Coastguard Worker string size_string(sz);
122*4d7e907cSAndroid Build Coastguard Worker string value_string(vals);
123*4d7e907cSAndroid Build Coastguard Worker
124*4d7e907cSAndroid Build Coastguard Worker count = stoi(size_string);
125*4d7e907cSAndroid Build Coastguard Worker float* result = new float[count];
126*4d7e907cSAndroid Build Coastguard Worker stringstream values(value_string);
127*4d7e907cSAndroid Build Coastguard Worker
128*4d7e907cSAndroid Build Coastguard Worker int32_t idx = 0;
129*4d7e907cSAndroid Build Coastguard Worker string token;
130*4d7e907cSAndroid Build Coastguard Worker while (getline(values, token, delimiter)) {
131*4d7e907cSAndroid Build Coastguard Worker result[idx++] = stof(token);
132*4d7e907cSAndroid Build Coastguard Worker }
133*4d7e907cSAndroid Build Coastguard Worker
134*4d7e907cSAndroid Build Coastguard Worker return result;
135*4d7e907cSAndroid Build Coastguard Worker }
136*4d7e907cSAndroid Build Coastguard Worker
trimString(const string & src,const string & ws)137*4d7e907cSAndroid Build Coastguard Worker string ConfigManagerUtil::trimString(const string& src, const string& ws) {
138*4d7e907cSAndroid Build Coastguard Worker const auto s = src.find_first_not_of(ws);
139*4d7e907cSAndroid Build Coastguard Worker if (s == string::npos) {
140*4d7e907cSAndroid Build Coastguard Worker return "";
141*4d7e907cSAndroid Build Coastguard Worker }
142*4d7e907cSAndroid Build Coastguard Worker
143*4d7e907cSAndroid Build Coastguard Worker const auto e = src.find_last_not_of(ws);
144*4d7e907cSAndroid Build Coastguard Worker const auto r = e - s + 1;
145*4d7e907cSAndroid Build Coastguard Worker
146*4d7e907cSAndroid Build Coastguard Worker return src.substr(s, r);
147*4d7e907cSAndroid Build Coastguard Worker }
148*4d7e907cSAndroid Build Coastguard Worker
149*4d7e907cSAndroid Build Coastguard Worker } // namespace android::hardware::automotive::evs::V1_1::implementation
150