blob: 5550fd53441c4646b94b14d9a917811d8ce126f0 [file] [log] [blame]
Tanmay Patilb2897b42020-06-08 17:55:02 -07001/*
2 * Copyright 2020 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef SURROUND_VIEW_SERVICE_IMPL_IOMODULECOMMON_H_
18#define SURROUND_VIEW_SERVICE_IMPL_IOMODULECOMMON_H_
19
20#include <string>
21
22#include "core_lib.h"
23
24namespace android {
25namespace hardware {
26namespace automotive {
27namespace sv {
28namespace V1_0 {
29namespace implementation {
30
31// Struct for camera related configurations.
Tanmay Patilfcb633d2020-06-15 13:39:31 -070032// Note: Does not include camera intrinsics and extrinsics, these are specified in EVS metadata.
Tanmay Patilb2897b42020-06-08 17:55:02 -070033struct CameraConfig {
34 // Id of logical group containing surronnd view cameras.
35 std::string evsGroupId;
36
37 // List of evs camera Ids in order: front, right, rear, left.
38 std::vector<std::string> evsCameraIds;
39
40 // In order: front, right, rear, left.
41 std::vector<std::string> maskFilenames;
42};
43
44struct SvConfig2d {
45 // Bool flag for surround view 2d.
46 bool sv2dEnabled;
47
48 // Surround view 2d params.
49 android_auto::surround_view::SurroundView2dParams sv2dParams;
50
51 // Car model bounding box for 2d surround view.
52 // To be moved into sv 2d params.
53 android_auto::surround_view::BoundingBox carBoundingBox;
54};
55
56struct SvConfig3d {
57 // Bool flag for enabling/disabling surround view 3d.
58 bool sv3dEnabled;
59
60 // Bool flag for enabling/disabling animations.
61 bool sv3dAnimationsEnabled;
62
63 // Car model config file.
64 std::string carModelConfigFile;
65
66 // Car model obj file.
67 std::string carModelObjFile;
68
69 // Surround view 3d params.
70 android_auto::surround_view::SurroundView3dParams sv3dParams;
71};
72
73// Main struct in which surround view config is parsed into.
74struct SurroundViewConfig {
75 // Version info.
76 std::string version;
77
78 // Camera config.
79 CameraConfig cameraConfig;
80
81 // Surround view 2d config.
82 SvConfig2d sv2dConfig;
83
84 // Surround view 3d config.
85 SvConfig3d sv3dConfig;
86};
87
88struct Range {
89 // Range start.
90 // Start value may be greater than end value.
91 float start;
92
93 // Range end.
94 float end;
95};
96
97// Rotation axis
98struct RotationAxis {
99 // Unit axis direction vector.
100 std::array<float, 3> axisVector;
101
102 // Rotate about this point.
103 std::array<float, 3> rotationPoint;
104};
105
106enum AnimationType {
107 // Rotate a part about an axis from a start to end angle.
108 ROTATION_ANGLE = 0,
109
110 // Continuously rotate a part about an axis by a specified angular speed.
111 ROTATION_SPEED = 1,
112
113 // Linearly translates a part from one point to another.
114 TRANSLATION = 2,
115
116 // Switch to another texture once.
117 SWITCH_TEXTURE_ONCE = 3,
118
119 // Adjust the brightness of the texture once.
120 ADJUST_GAMMA_ONCE = 4,
121
122 // Repeatedly toggle between two textures.
123 SWITCH_TEXTURE_REPEAT = 5,
124
125 // Repeatedly toggle between two gamma values.
126 ADJUST_GAMMA_REPEAT = 6,
127};
128
129// Rotation operation
130struct RotationOp {
131 // VHAL signal to trigger operation.
132 uint64_t vhalProperty;
133
134 // Rotation operation type.
135 AnimationType type;
136
137 // Rotation axis.
138 RotationAxis axis;
139
140 // Default rotation (angle/speed) value.
141 // It is used for default rotation when the signal is on while vhal_range is
142 // not provided.
143 float defaultRotationValue;
144
145 // Default animation time elapsed to finish the rotation operation.
146 // It is ignored if VHAL provides continuous signal value.
147 float animationTime;
148
149 // physical rotation range with start mapped to vhal_range start and
150 // end mapped to vhal_range end.
151 Range rotationRange;
152
153 // VHAL signal range.
154 // Un-supported types: STRING, BYTES and VEC
155 // Refer: hardware/interfaces/automotive/vehicle/2.0/types.hal
156 // VehiclePropertyType
157 Range vhalRange;
158};
159
160// Translation operation.
161struct TranslationOp {
162 // VHAL signal to trigger operation.
163 uint64_t vhalProperty;
164
165 // Translation operation type.
166 AnimationType type;
167
168 // Unit direction vector.
169 std::array<float, 3> direction;
170
171 // Default translation value.
172 // It is used for default translation when the signal is on while vhal_range
173 // is not provided.
174 float defaultTranslationValue;
175
176 // Default animation time elapsed to finish the texture operation.
177 // It is ignored if VHAL provides continuous signal value.
178 float animationTime;
179
180 // Physical translation range with start mapped to vhal_range start and
181 // end mapped to vhal_range end.
182 Range translationRange;
183
184 // VHAL signal range.
185 // Un-supported types: STRING, BYTES and VEC
186 // Refer: hardware/interfaces/automotive/vehicle/2.0/types.hal
187 // VehiclePropertyType
188 Range vhalRange;
189};
190
191// Texture operation.
192struct TextureOp {
193 // VHAL signal to trigger operation.
194 uint64_t vhalProperty;
195
196 // Texture operation type.
197 AnimationType type;
198
199 // Default texture id.
200 // It is used as default texture when the signal is on while vhal_range is
201 // not provided.
202 std::string defaultTexture;
203
204 // Default animation time elapsed to finish the texture operation.
205 // Unit is milliseconds.
206 // If the animation time is specified, the vhal_property is assumed to be
207 // on/off type.
208 // It is ignored if it is equal or less than zero and vhal_property is
209 // assumed to provide continuous value.
210 int animationTime;
211
212 // texture range mapped to texture_ids[i].first.
213 Range textureRange;
214
215 // VHAL signal range.
216 // Un-supported types: STRING, BYTES and VEC
217 // Refer: hardware/interfaces/automotive/vehicle/2.0/types.hal
218 // VehiclePropertyType
219 Range vhalRange;
220
221 // Texture ids for switching textures.
222 // Applicable for animation types: kSwitchTextureOnce and
223 // kSwitchTextureRepeated
224 // 0 - n-1
225 std::vector<std::pair<float, std::string>> textureIds;
226};
227
228// Gamma operation.
229struct GammaOp {
230 // VHAL signal to trigger operation.
231 uint64_t vhalProperty;
232
233 // Texture operation type.
234 // Applicable for animation types: kAdjustGammaOnce and kAdjustGammaRepeat.
235 AnimationType type;
236
237 // Default animation time elapsed to finish the gamma operation.
238 // Unit is milliseconds.
239 // If the animation time is specified, the vhal_property is assumed to be
240 // on/off type.
241 // It is ignored if it is equal or less than zero and vhal_property is
242 // assumed to provide continuous value.
243 int animationTime;
244
245 // Gamma range with start mapped to vhal_range start and
246 // end mapped to vhal_range end.
247 Range gammaRange;
248
249 // VHAL signal range.
250 // Un-supported types: STRING, BYTES and VEC
251 // Refer: hardware/interfaces/automotive/vehicle/2.0/types.hal
252 // VehiclePropertyType
253 Range vhalRange;
254};
255
256// Animation info of a car part
257struct AnimationInfo {
258 // Car animation part id(name). It is a unique id.
259 std::string partId;
260
261 // Car part parent name.
262 std::string parentId;
263
264 // List of child Ids.
265 std::vector<std::string> childIds;
266
267 // Car part pose w.r.t parent's coordinate.
268 android_auto::surround_view::Mat4x4 pose;
269
270 // VHAL priority from high [0] to low [n-1]. Only VHALs specified in the
271 // vector have priority.
272 std::vector<uint64_t> vhalPriority;
273
274 // TODO(b/158245554): simplify xxOpsMap data structs.
275 // Map of gamma operations. Key value is VHAL property.
276 std::map<uint64_t, std::vector<GammaOp>> gammaOpsMap;
277
278 // Map of texture operations. Key value is VHAL property.
279 std::map<uint64_t, std::vector<TextureOp>> textureOpsMap;
280
281 // Map of rotation operations. Key value is VHAL property.
282 // Multiple rotation ops are supported and will be simultaneously animated in
283 // order if their rotation axis are different and rotation points are the
284 // same.
285 std::map<uint64_t, std::vector<RotationOp>> rotationOpsMap;
286
287 // Map of translation operations. Key value is VHAL property.
288 std::map<uint64_t, std::vector<TranslationOp>> translationOpsMap;
289};
290
291// Main struct in which surround view car model config is parsed into.
292struct AnimationConfig {
293 std::string version;
294
295 std::vector<AnimationInfo> animations;
296};
297
298// Car model.
299struct CarModel {
300 // Car model parts map.
301 std::map<std::string, android_auto::surround_view::CarPart> partsMap;
302
303 // Car testures map.
304 std::map<std::string, android_auto::surround_view::CarTexture> texturesMap;
305};
306
307struct CarModelConfig {
308 CarModel carModel;
309
310 AnimationConfig animationConfig;
311};
312
313struct IOModuleConfig {
314 // Camera config.
315 CameraConfig cameraConfig;
316
317 // Surround view 2d config.
318 SvConfig2d sv2dConfig;
319
320 // Surround view 3d config.
321 SvConfig3d sv3dConfig;
322
323 // Car model config.
324 CarModelConfig carModelConfig;
325};
326
327enum IOStatus : uint8_t {
328 // OK ststus. ALL fields read and parsed.
329 OK = 0,
330
331 // Error status. Cannot read the config file (config file missing or not
332 // accessible)
333 ERROR_READ_CONFIG_FILE = 1,
334
335 // Error ststus. Config file format doesn't match.
336 ERROR_CONFIG_FILE_FORMAT = 2,
337
338 // Warning status. Read car model (obj, mtl) error. Either the files are
339 // missing or wrong format.
340 ERROR_READ_CAR_MODEL = 3,
341
342 // Warning status. Read animation config file error. Either the file is
343 // missing or wrong format.
344 ERROR_READ_ANIMATION = 4,
345};
346
347} // namespace implementation
348} // namespace V1_0
349} // namespace sv
350} // namespace automotive
351} // namespace hardware
352} // namespace android
353
354#endif // SURROUND_VIEW_SERVICE_IMPL_IOMODULECOMMON_H_