Release 1.7.2 - 19.02.2026

BUG FIXES

- CMake: fix RPATH on MacOS, fixes issue #410.
- fmt: fix compatibility with fmt 12 and newer due to fmt::localtime being dropped.

Release 1.7.1 - 21.07.2025

INCOMPATIBLE CHANGES

- dv-sdk/log.hpp: dv::Logger together with DV_MODULE_MULTI_THREAD_SAFE was not working correctly on all platforms. An
  alternative approach for thread-safety has been implemented, by simply disallowing log-append operations if the
  DV_MODULE_MULTI_THREAD_SAFE define is set to 1. This was only used internally and should have no user impact.

BUG FIXES

- Cameras: fix usb control transfer in notification (from dv-processing).
- Cameras: adapt to logger changes (from dv-processing).

Release 1.7.0 - 15.07.2025

INCOMPATIBLE CHANGES

- **Compatibility with version 2.0 of the dv-processing library requires recompilation of any custom modules. This is
  automatically enforced, old modules will not load.**
- CMake: renamed options with DVR\_ prefix to prevent collisions, ie. DVR_ENABLE_TCMALLOC.
- Build: raised minimum compiler versions to GCC 13, clang 18, XCode 16 or MSVC 19.39 (Visual Studio 2022 17.9).
- Build: raised minimum dependency versions to boost 1.80, fmt 9.1.0, dv-processing 2.0.
- **cstring/cvector: removed own re-implementations of std::string (dv::cstring) and std::vector (dv::cvector), the
  standard containers are used instead. You will need to recompile.**
- dv::runtime_assert(): changed to use functors, allowing guaranteed removal on non-debug builds.
- fmt: removed custom std::vector formatter, use the official one from fmt instead.
- Ubuntu: dropped support for Bionic 18.04.
- libcaer: removed as a dependency, no longer used.
- **dv::EventColor: GREEN component has been split into GREEN1 and GREEN2.**
- **New camera modules for DVS128, DAVIS, DVXplorer and DVXplorer Mini / Micro. Some configuration switches and names
  have changed. Field 'tsOffset' in output information has been removed as it is no longer required due to proper
  multi-camera time synchronization support, all cameras now have the same real-time offset. This extra information will
  also not be recoreded in files anymore, old files remain unchanged. Field 'colorFilter' in event output information
  has been replaced by new field 'eventsPixelArrangement', which is directly compatible with new dv::EventColor. Old
  recordings with the old name will still work. Support for eDVS, DVS132S, Samsung EVK and some old experimental DAVIS
  models has been dropped.** All of these continue to be supported by libcaer if needed, and other than the eDVS none of
  them have been commercially sold by iniVation.

NEW FEATURES

- **New camera modules for DVS128, DAVIS, DVXplorer and DVXplorer Mini / Micro. These use the new dv-processing 2.0 APIs
  for device access. Some configuration switches and names have changed, controls are often simpler to use. Support for
  eDVS, DVS132S, Samsung EVK and some old experimental DAVIS models has been dropped.** A selection of notable new
  features:
  - **synchronization of an arbitrary number of cameras supported via new 'syncWith' configuration, for details see our
    documentation:** https://docs.inivation.com/hardware/hardware-advanced-usage/external-camera-sync.html#dv
  - DVS128/DAVIS: simplified biasing with clearer names
  - DVXplorer: allow finer bias control for ON/OFF contrast thresholds
  - **For DVXplorer Mini/Micro only: a firmware upgrade (v10) is required for compatibility.**
- **Frame Color Calibration: added new module to perform color calibration for RGB frames.**
- Ubuntu: added support for Noble 24.04.
- Boost: added compatibility with latest boost::ASIO releases.
- Aravis (MVCamera): added compatibility with latest Aravis 0.9 release series.
- fmt::format: added formatters for cv::Mat, cv::Size, cv::Point and cv::Rect.

Release 1.6.2 - 25.07.2023

BUG FIXES

- Accumulator: don't use deprecated functions and APIs from dv-processing.
- Calibration: improved chessboard pattern search area calculation.
- Cameras: properly handle exceptions during camera initialization.
- fmt formatting library: compatible with fmt 10.0.
- Network Outputs: fix maxDataBacklog feature, only allow new data after last data confirmed as sent.
- Visualizer: improve error checking.
- Config: if configuration file passed via -c command-line parameter, always put it as 'saveFile' (if previously empty),
  even if the file doesn't exist yet, allowing for successful save on shutdown behavior.
- Modules: force back memory to OS on module destruction.
- Types: add missing dv-processing data types to type system.

Release 1.6.1 - 21.12.2022

BUG FIXES

- Network Outputs: fix header exported info node content.

Release 1.6.0 - 20.12.2022

INCOMPATIBLE CHANGES

- Network Output modules: network streams now start with an IOHeader at their front. Clients must update their parsing
  code to account for this.
- Visualizer: replaced the old SFML embedded visualizer with a new one based on the more modern SDL2 library. Only shows
  frames on screen, use other modules to convert your data into a dv::Frame, such as Accumulator or Event Visualizer.

NEW FEATURES

- Event Visualizer: converts events into frames without accumulation, just straight visualization as in the DV GUI.

BUG FIXES

- dv::Frame: update documentation on timestamps.
- FrameHistogram: fix generation of histogram.
- CMake: update to current best practices.

Release 1.5.3 - 05.06.2022

INCOMPATIBLE CHANGES

- dv-filestat: removed utility from dv-runtime, is now part of dv-processing repository, alongside other stand-alone
  command-line utilities.

BUG FIXES

- Fix compilation with GCC 12 and boost < 1.79.

Release 1.5.2 - 11.04.2022

NEW FEATURES

- Frames / Events: frame and event outputs will now check that the respective data has the proper size/coordinates to be
  sent out via an output. Frames will always check this, events only in DEBUG mode due to performance.
- Debug mode: use dv-processing's dv::DEBUG_ENABLED and dv::runtime_assert() debug functionality in place of NDEBUG and
  assert() macros.
- DVXplorer: add constant, high eFPS readout modes (can dismiss events).

BUG FIXES

- Depend on dv-processing 1.4.0 for latest features.
- Modules: require recompilation of all custom modules due to header changes.
- Backwards compatibility: fix issue with DV_LIBRARIES not being defined in CMake, it is now always defined to be
  'dv::sdk'.
- Backwards compatibility: fix issues with 'dv-sdk/processing/\*.hpp' includes.
- Cameras: fix reset of buttons pressed while a module is stopped (issue #406).

Release 1.5.1 - 25.02.2022

NEW FEATURES

- DVXplorer: add new control of readout speed (eFPS).
- DVXplorer: add new controls for custom fine bias adjustment.

BUG FIXES

- DV-SDK: fix several backwards compatibility issues with changes to header files due to dv-processing.
- LiveStream/VideoOutput: fix compilation with FFMPEG 5.0.
- DVXplorer: remove activity detection configuration.

Release 1.5.0 - 14.02.2022

NEW FEATURES

- DV-SDK: headers are compatible with usage together with the new dv-processing C++20 library. This will require
  recompilation of any custom modules!
- Frames: frame type has a different API, is now fully based on OpenCV Mat.
- Increased CMake requirements to 3.16, compiler to C++20, fmt to 7.1.3.
- Deprecated dv-modules.cmake and the DV_MODULE_SETUP() function, instead use FIND_PACKAGE(dv 1.5.0) to import the
  'dv::sdk' CMake target.

Release 1.4.6 - 26.08.2021

BUG FIXES

- CMake: fix reference to Boost::system in dv-modules.cmake.

Release 1.4.5 - 23.08.2021

NEW FEATURES

- Visualizer (old): fullscreen support, set background and event on/off colors.

BUG FIXES

- SDK types.hpp: fixed move assignment operator return.
- CMake: depend on newer Boost 1.73, provided by 'boost-inivation' package on Ubuntu Bionic and Focal. Remove internal
  boost-nowide.

Release 1.4.4 - 16.07.2021

NEW FEATURES

- Native MacOS ARM (M1) builds, Big Sur compatibility.
- Ubuntu 21.04 Hirsute support.
- Fedora 34 support.
- Ubuntu 16.04 Xenial is no longer supported!
- Cameras: added support for new DVXplorer Mini camera model.

BUG FIXES

- SDK types.hpp: fixed move constructor/assignment operator.
- Fixed compilation with Boost 1.76.

Release 1.4.3 - 16.04.2021

NEW FEATURES

- SDK API TimeMat: the TimeMat (and thus TimeSurface) have gained a new method getOCVMatScaled(), this returns an OpenCV
  Mat suitable for displaying in a dv::Frame output (issue #340).
- Automated Tests: added more tests for AEDAT2 file conversion.
- File Input: support opening AEDAT4 files with no DataTable present. DataTable will be built on-the-fly, we recommend
  then re-recording the file to ensure it has a DataTable present (issue #397).

BUG FIXES

- converter: fixed AEDAT2 conversion failing due to stol() exception when long is 32bit instead of 64bit for time
  conversions (issue #398).
- Device Discovery: fix serial number being incorrectly determined on Windows for already open devices (issue
  libcaer#123).

Release 1.4.2 - 26.03.2021

NEW FEATURES

- Automated Tests: enhanced testing framework, easier to write tests, added performance tests with graphical comparison
  (issue #387).
- Modules: added cycle time (run() function execution time) and per-input throughput statistics (issue #387).
- SDK stats.hpp: new statistics class to easily add statistics about execution times and throughputs to code (issue
  #387).

BUG FIXES

- export_csv: improved performance of CSV text file output (issue #387).
- eDVS: disabled device auto-discovery on Linux/MacOS, unreliable and slow in the presence of other USB serial devices,
  was already disabled on Windows (issue #392).

Release 1.4.1 - 17.02.2021

NEW FEATURES

- Build: added support for Apple M1 systems with Homebrew (issue #391).
- dv-runtime: added CLI option --console to disable logging of messages to console (issue #390).
- CI: extended automated testing to ARM32, ARM64 and PPC64 architectures.

BUG FIXES

- Logging: do not log to console if started from GUI (managed runtime) or started as a system service, correctly set log
  buffers on every log-file opening (issue #390).
- Converter: fixed calculation of initial time offset for AEDAT 3 files, was not correctly using the timezone from the
  file, but the host's one.

Release 1.4.0 - 20.01.2021

INCOMPATIBLE CHANGES

- dv-runtime: the runtime does not have a default configuration file anymore that it will load/save the configuration to
  (issue #253). To load configuration from a file, explicitly pass the '-c \<CONFIG_FILE>' command-line option. To save,
  set the "/system/config/saveFile" attribute to the path where you want to save the current configuration and then set
  "/system/config/writeSaveFile" to "true" to write the file (issue #295). GUI users won't have to do anything. The
  SystemD/OpenRC services will take care of resuming from saved configuration automatically as before.
- dv-runtime: the command-line options for the dv-runtime binary have changed (issue #386):
  - removed -b0/1 (--background) option, runtime always executes in the foreground now.
  - removed -a0/1 (--allinterfaces) option, explicitly use '-i <IP>' option now to specify the interface to listen on,
    use '-i 0.0.0.0' to get the old behavior of listening on all interfaces.
  - removed -o configuration override, edit a configuration file and use '-c \<CONFIG_FILE>' if you need to start with
    modified configuration.
  - added -i <IP> option, use this to specify the IP address where the runtime will listen for new connections (default
    '127.0.0.1').
  - added -p <PORT> option, use this to specify the port where the runtime will listen for new connections (default
    '4040').
  - added -l \<LOG_FILE> option, to specify the path where to write the log file (default '\$HOME/.dv-runtime.log').
  - added --systemservice, used for SystemD/OpenRC system service mode, should not be needed by normal users.
- TCP server output: the default IP address to listen on is now the same as the dv-runtime's IP address, while the
  default port is now '0', meaning a random free port is chosen and then published in the configuration attribute. The
  GUI will show the actual port. You can also manually put in the value '7777' to get back the old behavior.

NEW FEATURES

- ConfigServer: can be started with port value of '0' (CLI '-p 0') to select a random port for listening to new
  connections, will print this as a log message for retrieval.
- Modules: 'modulesSearchPath' is now initialized from the environment variable 'DV_MODULES_PATH'.
- Unix Socket Output: added new module 'dv_output_net_socket' for Unix socket-based data output (issue #215).

BUG FIXES

- Undistort: improved efficiency of out-of-bounds pixels lookup.
- DAVIS camera: the 'Exposure' configuration attribute is now read-only and not saved if 'AutoExposure' is enabled.
- ConfigTree: report failures in opening configuration files for reading or writing.

Release 1.3.2 - 22.12.2020

INCOMPATIBLE CHANGES

- Flip&Rotate: module renamed from 'dv_flip-rotate' to 'dv_flip_rotate' for consistent naming (issue #378).
- Crop&Scale: changed cropping configuration attributes to allow easier specification of Region-of-Interest to cut out,
  set output frames position to 0,0; same as events output.
- SDK utils.h: removed dv::findBool() and dv::findIfBool() functions that take two iterators, no significant advantages
  and no real users. Prefer std::vector variant.
- SDK utils.h: dv::findBool() and dv::findIfBool() for std::vector have been renamed to dv::vectorContains() and
  dv::vectorContainsIf() respectively, to better reflect what they do and align naming with the other vector helper
  functions present in utils.h.

NEW FEATURES

- dv-control: command-line utility now supports setting strings that contain spaces ("test str ing"), empty string can
  also be set using "" (issue #375).
- DVS Noise Filter: found hot-pixels are now saved in the string configuration attribute 'hotPixelList', from where they
  are loaded on module startup and configuration update (issue #341). Manual modification of the list is also possible.
  This keeps the list alive between restarts, such as when playing back a recording.
- SDK event.hpp: new function for event inputs 'colorForEvent(evt)', determines the Bayer filter color for an event
  based on its address, returns WHITE for no filter/mono (issue #381). Example: auto color =
  inputs.getEventInput("events").colorForEvent(evt);
- std::vector/dv::cvector/dv::cstring: added fmt::format formatter to format/log these types directly (issue #374).
- dv::cvector: added convenience methods contains(), containsIf(), sortUnique(), remove() and removeIf() (issue #374).
- SDK modules: improve thread safety for 'log' and 'config' module objects access (issue #373). Disabled by default, as
  it's only needed for modules that start extra threads of their own and access these objects from multiple of them. To
  enable, add the following define at the start of your modules' includes: #define DV_MODULE_MULTI_THREAD_SAFE 1

BUG FIXES

- SDK API frame.hpp: fixed edge-case where size of backing pixels vector could be bigger than actual X*Y*CHAN (issue
  #370).
- Device Discovery: improve log message on failure.
- File Input, dv-filestat: fix error message on FileDataTable verification failure, allow FileDataTable with more than 1
  million entries (issue #380).
- dv-filestat: stricter verification of IOHeader/FileDataTable, print number of elements in FileDataTable (issue #380).
- Windows: fix invalid UTF-8 strings being sent by runtime to clients/GUI (issue #385).
- Crop&Scale: correctly support cropping frames with ROI information present (issue #378).
- Flip&Rotate: correctly support rotating frames with ROI information present (issue #378).
- Converter: better calculation of frame pixel values, based on libcaer, for conversion of AEDAT 2.0 files.

Release 1.3.1 - 27.11.2020

INCOMPATIBLE CHANGES

- SDK API: libcaer is no longer included and linked by default for modules, nor does any part of the DV SDK API require
  it anymore. The two projects are now more separate, with libcaer being used mainly for iniVation device access in the
  appropriate modules.

NEW FEATURES

- MVCamera: added support for machine vision frame cameras from a variety of vendors such as FLIR, Basler, ... using
  libaravis (issue #328).
- Stereo Rectification: added new module to perform stereo rectification using stereo calibration results on events and
  frames (issue #367).
- VideoOutput: new, updated video output module with support for multiple codecs and encoders, custom encoding
  parameters, ROI support (issue #337).
- SDK Module API: added new function dvModuleGetHooks() to allow modules to provide optional hooks into the core system
  to add functionality, for now only 'DV_HOOK_DEVICE_DISCOVERY' is supported.
- Device Discovery: device discovery was moved to the modules providing the actual device support (issue #213).

BUG FIXES

- Visualizer: remove snprintf() calls, use fmt::format.
- ConfigTree: use fmt::format to format configuration attributes.
- dv-control: use fmt::format for auto-completion generation.
- LiveStream: fix ROI and color output support.
- Crop-Scale: fix ROI information not being added to output frames.
- Calibration: show message in image while "check images" mode is active to ensure users know of the mode change; show
  better CPU usage statistics while in "check images" mode (issue #360).

Release 1.3.0 - 28.10.2020

INCOMPATIBLE CHANGES

- SDK Logging API: the log-levels EMERGENCY, ALERT, CRITICAL and NOTICE have been removed, leaving only ERROR, WARNING,
  INFO and DEBUG, to offer a simpler and more understandable user experience. Simply substitute all mentions of
  'log.emergency', 'log.alert', 'log.critical' with 'log.error', and all mentions of 'log.notice' with 'log.info' in
  your code. The same procedure should be followed for the dv::logLevels in case you use the dv::Log() API (issue #354).
- SDK Logging API: the formatted logging API has been changed to use the fmt library (fmt::format) which uses compatible
  syntax with C++20's std::format; see https://fmt.dev/latest/syntax.html for details. The log.level.format(...) API as
  well as the dv::Log(level, ...) one are affected. A new dv:Log() API with no format string has also been added,
  allowing the direct printing of messages (issue #358).
- Cross API: portable_clock_localtime() has been removed. Use fmt::localtime.

NEW FEATURES

- Packaging: support for Ubuntu 20.10 (Groovy) added.
- Calibration: introduced new configuration option "useDefaultFilename" (defaults to false), to use a simpler file name
  for calibration results with no ID or date (issue #364).

BUG FIXES

- Core: verify all uses of malloc/free to ensure correct object initialization and destruction, move ConfigTree to use
  new/delete (issue #356).
- Systemd service: use absolute paths for all binaries, fixes service on older systemd versions that require this.
- TCP Output: first data packet was not sent out to clients (issue #361).

Release 1.2.5 - 28.08.2020

BUG FIXES

- Config: fix configuration file being wiped on restart (issue #352).

Release 1.2.4 - 28.08.2020

NEW FEATURES

- Windows: support Unicode file paths in core and I/O (issue #335). This allows dv-runtime to run, save and load files
  on Windows when non-ASCII characters are present in file paths. Some modules are currently not able to handle Unicode
  file paths, see issue #351.
- Calibration: improved usability, added buttons to directly control calibration actions, checking candidate patterns
  before calibration is now mandatory (issue #297).
- Accumulator: add event-number driven image reconstruction (issue #327).
- SDK ConfigTree API: low-level C API is const-correct now (issue #350).
- ConfigServer: add receivedID to PUSH messages.
- CMake: drop support for boost < 1.56.

BUG FIXES

- dv-filestat: fix crash on usage related to type discovery (issue #342).
- dv-filestat: fix executable missing from Ubuntu packages (issue #342).
- Converter AEDAT 3.X: fix setting of Frame's StartOfFrame and EndOfFrame timestamps (issue #350).
- SDK wrappers.hpp: ensure failures to allocate memory on commit() are properly handled (issue #350).
- SDK wrappers.hpp: copying from an empty/null input to an output cannot work and now throws an exception (issue #350).
- SDK Modules: dv::ModuleBase not copyable/movable anymore (issue #350).
- Calibration: ensure module can be stopped at any moment, even during calibration pattern review (issue #344).
- Calibration: warn that loaded calibration files only apply after a restart of the module (issue #344).
- Calibration: removed homography calculation and drawing of reprojected points on stereo calibratio (issue #345). Use
  the epipolar lines to verify the quality of stereo calibration.
- Modules: fix deadlock on module shutdown if a commit() is being done in another thread started from that module (issue
  #348).
- Modules: fix possible crash if module is waiting on child to start and child gets removed first (issue #349).
- SDK ConfigTree: reported range for booleans is now 0-1.

Release 1.2.3 - 20.06.2020

NEW FEATURES

- Livestream: added new module for RTP live-streaming (H.264 encoded), allows to stream live video from frames with some
  delay (issue #288).
- Testing/CI: improved internal testing capabilities and Continuous Integration infrastructure (issue #309).

BUG FIXES

- SDK API EventStore: add slice(size_t) to be more consistent with other parts of the API (issue #333).
- File Input: discard data if a decompression error happens (issue #334).
- File Input: fix reading files with custom types in them (issue #280).
- Undistort: fix startup failure if only a frame input was connected (issue #332).
- Ubuntu packages: do not auto-enable systemd service (issue #329).
- System Service: block shutdown of runtime from clients if the runtime was started as a system service (issue #313).
- Core: show username the runtime is running under in ConfigTree, available at /system/ 'user' string (issue #306).

Release 1.2.1 - 08.05.2020

NEW FEATURES

- Modules: added new 'cpuTime' statistic to show total CPU time consumed by the current/last run of a module (issues
  #311, #325).
- CSV Export: added new module export_csv to write events to a text file in Comma-Separated-Values format (issue #312).
- SDK API Modules: allow any generic inputs to initialize any generic outputs using output.setup(input) (issue #321).
- YNoise, KNoise: added new noise filtering modules (issue #308).

BUG FIXES

- MacOS X: handle edge-case error code returned on network write() correctly in TCP Output Module and ConfigServer
  (issue #300).
- ArchLinux AUR: fixed symlink related installation failure (issue #322).
- File Input: shutting down while paused will now reset pause (issue #302).
- Accumulator: color demosaicing option will not be auto-enabled on every module start, respecting the users' choice
  (issue #305).
- File Input: fix possible crash due to incorrectly accessing cached elements past the end of a vector (issue #323).

Release 1.2.0 - 20.04.2020

NEW FEATURES

- Calibration: added new camera calibration module, with better UI and support for stereo calibration.
- Cameras: originDescription in data streams now more concise and unique.
- eDVS: added 'cameraID' configuration attribute to specify a custom serial number, to allow the user to disambiguate
  multiple cameras.
- MacOS X: set default CMake destination to /usr/local on Apple systems.
- File/Netork Output: implement 'timeout' parameter to stop recording after a certain time has passed (issue #292).
- Core: added support for Google Perftool's head and CPU profilers. Please see the relevant NOTE in README.md.
- Services: added OpenRC init script, improved systemd install script, used more standard paths for systemd init script,
  added sysusers support.
- Ubuntu: support for release 20.04 LTS 'Focal Fossa'.
- dv-runtime CLI: -a 0/1 and -b 0/1 command-line options to dv-runtime are now only valid for that particular dv-runtime
  invocation and are not saved as part of the permanent XML configuration, nor do they modify it (issue #240).
- ConfigServer: various improvements, all GET\* requests now return the full attribute information, type specification
  is not needed anymore.
- dv-control: new get_type command, type specification not needed anymore.
- SDK API Portable IO: added C++ variants of portable IO functions.

BUG FIXES

- MacOS X: fix duplicate-symbol linker error with Apple Clang compiler and TLS \_\_getDefaultConfig() function variable
  when including \<dv-sdk/module.hpp> into multiple compilation units within the same module.
- File Input: fix reset of 'seekEnd' configuration attribute if manually removed.
- SDK API Types: add missing const to TimeElementExtractor argument.
- SDK API portable_get_user_home_directory(): correctly handle getenv() and getpwuid_r() failures.
- Config / Log: write temporary configuration and log files to global temporary directory to avoid permission issues,
  original system directories might not allow writing to dv-runtime user.
- ConfigTree: ensure attribute updaters are removed when their corresponding attributes or nodes are, to avoid dangling
  references (issue #212).
- Modules / Log: per-module log-level now only applies to messages originating from user functions within a module, all
  other messages use the system log-level (issues #226 and #246).

Release 1.1.3 - 12.03.2020

BUG FIXES

- DVS132S: fix support for DVS132S camera.
- Config: write configuration to separate file, rename only on success.
- Config: load values with whitespace from XML configuration correctly.

Release 1.1.2 - 04.03.2020

NEW FEATURES

- DVXplorer: added controls for IMU, ExternalInput, USB features.
- Cameras: added support for DVXplorer Lite camera.
- Services: added systemd script for dv-runtime service, see manual install under service/.

BUG FIXES

- Cameras: fixed crash on exceptional camera disconnect/shutdown.
- Cameras: fixed statistics updates.

Release 1.1.1 - 11.02.2020

INCOMPATIBLE CHANGES

- C++ API, Modules: renamed one more function for consistency (issue #272):
  - addTypes() -> initTypes()

BUG FIXES

- C++ API, Frames: add missing assignment operator and \<<commit operators.
- Accumulator, Lens Calibration modules: fix frame commit.

Release 1.1.0 - 10.02.2020

INCOMPATIBLE CHANGES

- C++ API, data wrappers: the C++ data types for Event, Frame, IMU, Trigger and BoundingBox have been renamed to not
  include the T suffix anymore (ie. FrameT -> Frame). The underlying Flatbuffer types have been renamed to include the
  Flatbuffer suffix for clarity (ie. Frame -> FrameFlatbuffer). See issue #214 for more details.
- DAVIS camera: changed the names of several configuration nodes and attributes.
- C++ API, Modules: renamed several functions for consistency (issue #272):
  - getDescription() -> initDescription()
  - getConfigOptions() -> initConfigOptions()
  - addInputs() -> initInputs()
  - addOutputs() -> initOutputs()
- C++ API, Frames: removed commitMat() function, replaced by setMat(). Use setMat() followed by commit() to get old
  behavior (issue #273).

NEW FEATURES

- C++ API, config: added new RuntimeConfig.get()/set() methods that take the value as second argument and figure the
  type out by themselves, checking at runtime that it is correct (issue #269).
- File Input: added new configuration attributes 'seekStart' and 'seekEnd' to set custom start and end points for
  playback in a file (issue #260).
- Cameras: updated camera modules to use new C++ API (issue #276), DVS240 module now only allows either events or frames
  to be enabled at a time (issue #257). 'tsOffset' is now added to all data streams to allow offline time alignment.
- VideoOutput: added new VideoOutput module, writes frames to a video file.
- ImageOutput: added new ImageOutput module, writes frames to PNG image files.
- CropScale: added new CropScale module to allow cropping and scaling of both events and frames (issue #277). Replaces
  the old Scaling module.
- Config API: added dv::ConfigOption::stringOption() with min/max string length parameters.
- Config API: setPriorityOptions() now supports sub-nodes, same as get() and set(), by using node names in the key, for
  example: 'node1/node2/attrName'.
- ConfigTree API: existsRelativeNode() and getRelativeNode() now support './' notation to refer to the same node, and
  '../' to refer to the parent node.

BUG FIXES

- File Input: updates to the 'seek' configuration attribute are limited to four per second now, to not overload slow
  clients (dv-gui #106).
- File Input: fixed seeking forwards/backwards while being paused (dv-gui #115).
- Cameras: do not throw parsing exception if timestamp reset packet arrives.
- Modules: isConnected() returns correct, consistent value during constructor, run and destructor phases (issue #254).

Release 1.0.10 - 24.01.2020

NEW FEATURES

- Windows: executables now carry metadata to ease debugging and are signed (issue #202).
- Network Output: new configuration attributes 'maxConnectionsBacklog' and 'maxConcurrentConnections' enable enforcing
  of TCP connection limits. New attribute 'maxDataBacklog' limits outbound data queue size, preventing unbounded memory
  growth and delays if the TCP receiver is slow (issue #263).
- DVXplorer/Samsung EVK: busNumber/devAddress/serialNumber restrictions are now supported. 'tsOffset' added to stream
  infoNodes.
- Samsung EVK: add more information to SourceInfo/ node.
- libcaer 3.3.2 is now required, includes fixes for DVXplorer and Samsung EVK.

Release 1.0.9 - 17.01.2020

NEW FEATURES

- Cameras: added support for new DVXplorer and Samsung EVK devices.

BUG FIXES

- eDVS camera: on Windows, default serial port setting to COM0.
- Processing API: fixed slicing of events from back of EventStore using negative notation (issue #267).
- Accumulator module: frame timestamps are now correctly set. Neutral potential considered in exponential mode.

Release 1.0.8 - 20.12.2019

NEW FEATURES

- Input module: only show slow-down warning once if it happens multiple times back-to-back (issue #256).
- dv-control: exit automatically if setting system-running to false (issue #249).

BUG FIXES

- Camera modules: fix memory leak on AEDAT 3 to 4 conversion.
- Modules: optional input connections were not always properly regenerated on removing/re-adding modules with the same
  name.

Release 1.0.7 - 03.12.2019

NEW FEATURES

- log.hpp: added missing log-level mappings (issue #245).
- LensCalibration and Undistort modules: various improvements.

BUG FIXES

- cvector.hpp: fixed error in append() and +/+= operators that could result in element not being copied correctly.
- module.cpp: ignore updates to cpuUsage attribute to determine configUpdate() calls.
- ConfigTree/Server: very small float/double attributes could be reset to zero due to limited precision of string
  representation used in storage/network communication.

Release 1.0.6 - 15.11.2019

NEW FEATURES

- raspbian release present in https://inivation.gitlab.io/dv/dv-docs/docs/getting-started.html#raspbian-buster
- added cache of decompressed packets in file input (most used when slow time is set)

BUG FIXES

- conversion bug with aedat2 files
- initialization of log message attribute
- initialization of 20MB of initial maximum size for log file
- fixed data drop with slow startup of modules
- optimization of the accumulator module

Release 1.0.5 - 24.10.2019

NEW FEATURES

- dv-control: added 'get_children' command. Improved script mode by not printing command names again, just content.

BUG FIXES

- File Input: prevent commit of empty packets to processing network.

Release 1.0.4 - 09.10.2019

NEW FEATURES

- Modules Discovery: now shows any module candidates that were viable but not loaded due to being a duplicate in the
  'alternativePaths' string attribute of that modules' information under /system/modules/.
- File Input: support seeking in the file while paused.
- Logger: support setting a maximum log file size (attribute long 'limitLogSize' in '/system/logger/') for the system
  log file (issue #62).

BUG FIXES

- Core: prevent possible deadlock in signal handling code due to config-XML-dump.
- Modules: correctly cleanup module if an exception is thrown on construction.
- File Input: reset seek to beginning of file on module shutdown/stop (issue #234).
- File Input: fix error about 'fileSize' attribute not existing.
- Converter: fix wrong IMU temperature in converted AEDAT2 files.
- SDK Processing API: fix wrong warning in EventStore (issue #237).

Release 1.0.3 - 27.09.2019

BUG FIXES

- Modules: reset CPU usage on shutdown to zero (issue #236).
- Ubuntu: fix automatic release.
- Windows: disable eDVS device discovery. Use edvs module directly.
- dv::cvector: support working with empty vectors.

Release 1.0.2 - 25.09.2019

NEW FEATURES

- File Input: default connectivity on module creation now includes the four standard camera outputs: events, frames, imu
  and triggers. This allows structure to be defined right away, without first having to select a file. Also file outputs
  are now more stable, only being added/removed as needed.
- dv-runtime: runtime now reports per-module (thread) CPU usage statistics, and per-system (process) memory usage
  statistics (issue #155).
- Processing API: various improvements.

BUG FIXES

- Modules: fix possible drop of first packet(s) on blocked modules. When an upstream module starts and sends data, it
  was possible for a blocked downstream module to miss the first few packets. This is now fixed, and all packets are
  guaranteed to be delivered to blocked/waiting downstream modules.
- Modules: fix possible memory corruption due to inputGet() and inputDismiss() not being paired correctly.
- Flip-Rotate / Undistort: remove outputs that are not possible while running, due to their optional input not being
  connected in the first place.
- Device Discovery: fix naming of eDVS node on Linux, this prevented the GUI from getting the information needed to
  start the module.

Release 1.0.1 - 13.09.2019

NEW FEATURES

- TCP Network Output: uses same data format as File Output now, with 8-byte IOHeader added in front of each data packet.
  dv-gui and dv-python have been updated to use this.
- File Output: default compression is now LZ4.
- dv-runtime: added --version/-v option to print the version of the runtime.
- SDK API: config.set() now has a second, optional argument 'force' to force updating of a configuration variable,
  allowing to bypass the rate-limiter for statistics.
- Scaling: new module to scale event data streams.
- Decimation: new module to reduce the event rate.
- Flip-Rotate: degrees of rotation are floating point now.

BUG FIXES

- dv-filestat: fixed --verbose/-v option to not need 0/1 values.
- Converter: fixed header parsing in some AEDAT2 files, could block conversion.
- File Output: writtenDataSize statistic now correctly reflects the full size of the written file.
  writtenPacketsElements statistic is now updated properly.
- SDK library: better exception messages for errors arising from the core library.
- dv-runtime: catch SIGILL, ensure stacktrace is flushed to stderr.
- SDK API: fix bug in TimeElementExtractor() failing with empty packets as input.
- SDK Processing API: fix bug in addEventPacket() failing with empty packets as input.
- File Input: do not commit/send empty packets to outputs. Improves efficiency.
- File Input: fix ranges of timeDelay and timeInterval configuration options.

Release 1.0.0 - 05.09.2019

NEW FEATURES

- Added new FlipRotate module, to allow flipping and rotating events and frames.
- File Input: playback now is properly synchronized across streams, timeInterval and timeDelay are respected (can be
  used for slowdown/speedup) and seeking works (issue #218).

BUG FIXES

- FrameEnhancer module renamed to FrameContrast, fixed color frame support (issue #189).
- FrameStatistics module renamed to FrameHistogram, fixed color frame support (issue #189).
- File Input: only loop if end-of-file was reached, do not loop on stop.
- Undistort: mark outputs as unused if input not connected, allowing module to run.
- Modules: fix per-input statistics counters, aggregate count was erroneously reported.
- Modules: call run() function also if only unconnected optional inputs are present (issue #228).
- Modules: fix user types support (issue #224).
- Modules: automatic retry log message is now DEBUG level (issue #226).
- SDK API: getOutput(), infoNode() and isConnected() now verify that the name of the given input or output is valid
  (issue #220).

Release 0.9.6 - 02.09.2019

NEW FEATURES

- dv-runtime: added --allinterfaces/-a option to enable listening on all network interfaces for the configuration
  server.
- TCP Output: if configuration server is listening on all network interfaces, do the same.
- SDK API: ensure output frames backing pixels array is properly sized if the user forgot to do so explicitly via
  setSize() or setROI().
- SDK API: fix checking I/O wrappers for validity, conversion operator bool() works again, and empty inputs are NULL
  shared pointers again (issue #222).
- Config: added runtime "version" string to /system/ configuration node.

BUG FIXES

- Config: ensure XML configuration file is written always on signal receipt/shutdown.
- SDK LIB: ensure visibility of library symbols is restricted as much as possible, to avoid libraries remaining loaded
  after closing them (eg. due to UNIQUE symbols).
- Type System: fix user type lookup support (custom Flatbuffers, issue #223).

Release 0.9.5 - 23.08.2019

NEW FEATURES

- Utils: added new dv-filestat utility to examine AEADT 4 files.
- File Output: extension for AEDAT 4 files is now '.aedat4'.

BUG FIXES

- Modules Discovery: do not exit/crash if no modules were found on modules search path.
- Modules Discovery: more robust ordering, always examine default modules search path.

Release 0.9.4 - 21.08.2019

BUG FIXES

- Modules: do not drop data on module shutdown, ensure all processing queues are flushed.
- Modules: ensure the moduleRun() function is always defined (cannot be NULL).
- TCP Output: if port was set to 0 for auto-select, automatically reset it to 0 on shutdown.
- File Input: default range for 'seek' attribute is now 0-int64max, so that in the case a file is not set or missing,
  any value can be set (issue #216).

Release 0.9.3 - 20.08.2019

NEW FEATURES

- SDK API utils.h: add vector convenience functions for find and remove. Remove vectorDetectDuplicates(), not used
  anywhere.
- SDK API outputs: added size/X/Y() methods to outputs with size, getOriginDescription() to all outputs. Outputs can now
  access the same information as inputs.
- SDK API outputs: setup() now copies all information present in the info node.
- Modules: outputs now block if they cannot deliver data to their downstream inputs, guaranteeing no data is lost inside
  the processing network.
- Modules: all inputs now have multiple informational attributes: 'queueLength', 'queueCapacity' for input data queue
  load, and 'readPacketsNumber' and 'readPacketsSize' for input packet traffic information.
- Modules: per-module 'logLevel' attribute is now a string-list type.
- Cameras: color DAVIS cameras now report the color filter presence and type for events in their info node, attribute
  int 'colorFilter' (issue #194).
- Accumulator: auto-set 'doDemosaicing' if a color camera is connected.
- ConfigTree: allow attribute type changes on first create() call after import.

BUG FIXES

- SDK API: fixed compilation of \<< operator in OutputVectorDataWrapper.
- SDK API: exceptions thrown by user modules are now properly caught before passing the library boundary in all cases.
- Docs: deleted old documentation, please use 'https://inivation.gitlab.io/dv/dv-docs/'.
- ConfigServer: better error message on address already in use, don't terminate with an uncaught exception (issue #203).
- Main: faster system shutdown sequence (issue #211).

Release 0.9.2 - 09.08.2019

NEW FEATURES

- I/O: added support for Zstd compression in input and output modules, available via ZSTD and ZSTD_HIGH flags.
- dv-runtime binary: new command line option --background (-b) added, to force the runtime to enter background mode or
  prevent it.
- SDK API: new low-level function dvModuleInputAdvance() to get the next data object from an input.
- SDK API: changed button API, removed button types, allow for using button label instead. Renamed ButtonReset()
  function to BooleanReset().
- SDK API: removed config.changed() method due to inconsistent results, checking for specific changes in configuration
  inside configUpdate() is left to the user.
- SDK API: added ConfigOption::listOption() constructor which allows default value to be specified as a string.
- SDK API: added RuntimeConfig::set\*() convenience functions for data types.

BUG FIXES

- Cameras: fix issue dv-gui#38, spurious caerEventPacketContainerGetEventPacket() offset error on module or camera
  restart.
- Modules discovery: allow the '-' (dash) character to be used in module file names (cannot be the first character!)
  (issue #204).
- SDK API: multiple calls to data() (or events() for Event inputs, frame() for Frame inputs) on any inputs inside the
  same run() function could lead to corrupted data being returned if no more new data was available on that input. New
  data is now only polled between run() calls, so multiple calls to data() inside the same run() function yield the same
  result. If no data is available at all, an empty object is returned now. It is possible to manually advance to the
  next data object by calling the low-level function dvModuleInputAdvance().
- Config: do not export ListOptions modifiers to XML config file (issue #201).
- ConfigServer: improved debug logging.
- Modules: fix possible deadlock when removing a module that's trying to start up.

Release 0.9.0 - 30.07.2019

LICENSE CHANGED TO AGPLv3. FOR COMMERCIAL DUAL-LICENSING CONTACT sales@inivation.com.

NEW FEATURES

- API: small improvements to dv::Frame API, internal cleanup.
- Modules: on changes to the "from" attribute of a module's input specification, the module will shut itself down, to
  signal to the user it needs to be restarted to take on the newly changed configuration.
- Output: new file output module, supports new AEDAT 4.0 format and LZ4 data compression.
- Input: new file input module, supports reading AEDAT 4.0 format with LZ4 data compression. Basic play/pause
  implemented. Advanced features such as slowdown or seek deferred to next release.
- BoundingBox: new data type to represent bounding boxes.
- ConfigTree: new dvConfigTreeDelete() function (not for use with global tree).
- ConfigTree: new functions to import/export XML configuration from/to string, with option to force export of all
  configuration (bypassing NO_EXPORT).
- Accumulator: added color demosaicing option.

BUG FIXES

- CMake: drop required version to 3.10 (Ubuntu Bionic).
- LensCalibration: fixed typo in configuration name.
- FrameStatistics: fixed typo in output stream name.
- ConfigServer: handle client connection shutdown more gracefully.
- Windows packaging: use ntldd for dependency discovery.
- Camera modules: ensure all data types are converted only once to AEDAT 4.0.

Release 0.8.0 - 23.05.2019

Initial release. cAER successor/replacement. Better, simplified API and first-class GUI. See online documentation for
more details on getting started:

https://inivation.gitlab.io/dv/dv-docs/
