| /* |
| * data_types.h - data types in interface |
| * |
| * Copyright (c) 2017 Intel Corporation |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| * Author: Wind Yuan <feng.yuan@intel.com> |
| * Author: Yinhang Liu <yinhangx.liu@intel.com> |
| */ |
| |
| #ifndef XCAM_INTERFACE_DATA_TYPES_H |
| #define XCAM_INTERFACE_DATA_TYPES_H |
| |
| #include <xcam_std.h> |
| |
| namespace XCam { |
| |
| enum SurroundMode { |
| SphereView = 0, |
| BowlView = 1 |
| }; |
| |
| struct Rect { |
| int32_t pos_x, pos_y; |
| int32_t width, height; |
| |
| Rect () : pos_x (0), pos_y (0), width (0), height (0) {} |
| Rect (int32_t x, int32_t y, int32_t w, int32_t h) : pos_x (x), pos_y (y), width (w), height (h) {} |
| }; |
| |
| struct ImageCropInfo { |
| uint32_t left; |
| uint32_t right; |
| uint32_t top; |
| uint32_t bottom; |
| |
| ImageCropInfo () : left (0), right (0), top (0), bottom (0) {} |
| }; |
| |
| struct FisheyeInfo { |
| float center_x; |
| float center_y; |
| float wide_angle; |
| float radius; |
| float rotate_angle; // clockwise |
| |
| FisheyeInfo () |
| : center_x (0.0f), center_y (0.0f), wide_angle (0.0f) |
| , radius (0.0f), rotate_angle (0.0f) |
| {} |
| bool is_valid () const { |
| return wide_angle >= 1.0f && radius >= 1.0f; |
| } |
| }; |
| |
| #define XCAM_INTRINSIC_MAX_POLY_SIZE 16 |
| |
| // current intrinsic parameters definition from Scaramuzza's approach |
| struct IntrinsicParameter { |
| float xc; |
| float yc; |
| float c; |
| float d; |
| float e; |
| uint32_t poly_length; |
| |
| float poly_coeff[XCAM_INTRINSIC_MAX_POLY_SIZE]; |
| |
| IntrinsicParameter () |
| : xc (0.0f), yc (0.0f), c(0.0f), d (0.0f), e (0.0f), poly_length (0) |
| { |
| xcam_mem_clear (poly_coeff); |
| } |
| }; |
| |
| struct ExtrinsicParameter { |
| float trans_x; |
| float trans_y; |
| float trans_z; |
| |
| // angle degree |
| float roll; |
| float pitch; |
| float yaw; |
| |
| ExtrinsicParameter () |
| : trans_x (0.0f), trans_y (0.0f), trans_z (0.0f) |
| , roll (0.0f), pitch (0.0f), yaw (0.0f) |
| {} |
| }; |
| |
| template <typename T> |
| struct Point2DT { |
| T x, y; |
| Point2DT () : x (0), y(0) {} |
| Point2DT (const T px, const T py) : x (px), y(py) {} |
| }; |
| |
| template <typename T> |
| struct Point3DT { |
| T x, y, z; |
| Point3DT () : x (0), y(0), z(0) {} |
| Point3DT (const T px, const T py, const T pz) : x (px), y(py), z(pz) {} |
| }; |
| |
| typedef Point2DT<int32_t> PointInt2; |
| typedef Point2DT<float> PointFloat2; |
| |
| typedef Point3DT<int32_t> PointInt3; |
| typedef Point3DT<float> PointFloat3; |
| |
| /* |
| * Ellipsoid model |
| * x^2 / a^2 + y^2 / b^2 + (z-center_z)^2 / c^2 = 1 |
| * ground : z = 0 |
| * x_axis : front direction |
| * y_axis : left direction |
| * z_axis : up direction |
| * wall_height : bowl height inside of view |
| * ground_length: left direction distance from ellipsoid bottom edge to nearest side of the car in the view |
| */ |
| struct BowlDataConfig { |
| float a, b, c; |
| float angle_start, angle_end; // angle degree |
| |
| // unit mm |
| float center_z; |
| float wall_height; |
| float ground_length; |
| |
| BowlDataConfig () |
| : a (6060.0f), b (4388.0f), c (3003.4f) |
| , angle_start (90.0f), angle_end (270.0f) |
| , center_z (1500.0f) |
| , wall_height (3000.0f) |
| , ground_length (2801.0f) |
| { |
| XCAM_ASSERT (fabs(center_z) <= c); |
| XCAM_ASSERT (a > 0.0f && b > 0.0f && c > 0.0f); |
| XCAM_ASSERT (wall_height >= 0.0f && ground_length >= 0.0f); |
| XCAM_ASSERT (ground_length <= b * sqrt(1.0f - center_z * center_z / (c * c))); |
| XCAM_ASSERT (wall_height <= center_z + c); |
| } |
| }; |
| |
| } |
| |
| #endif //XCAM_INTERFACE_DATA_TYPES_H |