Release 1.4.0 - 25.05.2022 INCOMPATIBLE CHANGES - `dv::Accumulator` now generates 8-bit integer images instead of floating point, which is easier to use and is more consistent with other classes generating images. - Data type `dv::Point2f` used in `dv::TimedKeyPoint` has been changed to a Flatbuffer struct instead of a table for performance and consistency reasons. This will not allow previous `dv::TimedKeyPointPackets` to load properly from storage. At this point we do not believe such files to exist and this change will have no to minimal impact to users. - Converted several simple enums to enum classes in all headers for better code quality, this will require users to use the fully qualified class name, eg. dv::Accumulator::Decay::EXPONENTIAL. NEW FEATURES - Native Windows (MSVC) support - Calibration: improved support for DV-SDK XML files, also supports oldest file format now. - CameraCalibration: added getCameraMatrix() method to get a standard OpenCV 3x3 camera matrix. - Concepts: new Enum concept, consistent naming for concepts, header includes cleanup. - utils.hpp: introduce and use TimestampClock and TimestampResolution. - Adding a method for device discovery. - Adding `dv::camera::StereoGeometry` class that handles rectification of stereo data streams (events and images) and depth estimation. - Adding `dv::SemiDenseStereoMatcher` class that calculates disparity on stereo synchronized event streams or images by applying accumulation into frames and disparity using a stereo block matching algorithm. - New landmark type is added with an ability to be visualized in `PoseVisualizer` class. - `dv::io::CameraCapture` introduces getPixelPitch method that can be used to lookup the pixel pitch distance. - `dv::io::CameraCapture` adds frame interval setting and exposes low level config setting functions. - Fully support Equidistant (fish-eye) lens calibration model for undistortion. BUG FIXES - Fixed a bug in `dv::Accumulator` which caused timestamps to be incorrectly generated when generating multiple frames. - CalibrationSet: const-ify several functions that do not modify the content. - Removing unnecessary asserts in `CameraGeometry::backProject` method when sub-pixel implementation is used. - CMake: improved handling of custom Boost version, will now always use custom version on systems that require it (Ubuntu LTS 18.04 Bionic and 20.04 Focal). - Dependencies increased to CMake 3.16, Eigen 3.3.9, fmt 7.1.3. - Stereo transformToC0 was loaded incorrectly, fixing the correct order of transformation matrix values. - `dv::EventStore` added missing assignment operator for dv::EventPacket as in constructor. - `dv::visualization::colors::someNeonColor` method is now inline to fix compilation errors. - `dv::io::MonoCameraWriter` was not saving resolution metadata correctly. - Fixing a bug in `dv::features::EventFeatureLKTracker` to maintain a minimum amount of events to prevent wrong behaviour when event stream contains very little amount of events. - CMake project now validates compiler version to be compatible with the project. - Adding a few missing methods in python bindings: `dv::now()`, `dv::toTimePoint()`, and `modifyTimeInterval` in `EventStreamSlicer` that accepts a `timedelta` variable type. - dv::io::SimpleFile: fixed possible race condition on creation of writeable files. - dv::(Pixel)Accumulator: consistent checking if events are within size bounds; DEBUG mode will check all events with resulting drop in performance. Release builds will not check bounds at all for maximum performance. - Use dv::runtime_assert() instead of assert() in most places for more consistent error reporting. - `dv::io::MonoCameraRecording` bugfix that caused runtime errors when built with MSVC. - `dv::StereoEventStreamSlicer` is now guaranteed to execute the callbacks only when both streams supply enough data. - Changed `dv::Accumulator` constructor to provide more reasonable default parameters. - Transformation.hpp: fix delta() function to get relative transformation. - `CameraCalibration` and `IMUCalibration` now validate transformation matrices to be strictly homogeneous. BACKPORTED BUG FIXES - FilterChain: ignore empty packets during time monotonicity check. - `dv::PixelAccumulator` now return `-1` timestamp when no events were passed into accept. - `dv::Accumulator` generates identical output when called `generateFrame` without passing data. - CameraGeometry: `undistort` method returned incorrect result if used with floating point coordinates.