xref: /aosp_15_r20/hardware/interfaces/automotive/evs/1.1/default/ConfigManagerUtil.cpp (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 
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