# Zivid SDK Changelog

## 2.8.1

### API

* The `ZividExperimentalHandEyeCalibration` CLI tool can now read `Zivid::Matrix4x4` YAML files saved from the Zivid
  SDK. The tool can still read the older OpenCV YAML file format used in previous SDK releases. If the
  `--transform-file` argument is provided, the tool will save the hand-eye calibration transform using the same file
  format as the input files.

### Bug fixes

* Fixed a debug assert that would occur when capturing with Zivid Two on Windows in Debug mode. This bug was
  introduced in SDK 2.8.0.
* Fixed a bug in HDR capture where the color image could contain strange artifacts when combining a very dark and a
  very bright acquisition. This bug was introduced in SDK 2.7.0.
* Fixed a bug where old log files would not be deleted even if the size of the log directory was above the
  `MaxTotalSizeMB` configuration (default 1000MB). Log files would still be deleted when they become older than the
  `HistorySize` configuration (default 30 days), and for a single process the logs would not take more than
  `MaxFileSizeMB` * (1 + `RotationCount`) MB (default 50MB*3 = 150MB). This bug was introduced in SDK 2.7.0.
* Fixed an issue where an "Unknown product number ''" error could occur when discovering Zivid Two cameras. This bug
  was introduced in SDK 2.8.0.

### Studio

* Studio: Fixed a "Cannot assign [undefined] to double" error that could occur when dragging sliders in Studio using
  a touchpad.

## 2.8.0

### API

* Improved capture speed of Zivid Two:
  * The amount of data transferred from the Zivid Two to the PC for each acquisition is reduced. This improves capture
    speed when the network link is the bottleneck, for example when using less than 10Gbps connection between the
    camera and the PC, or when capturing with several cameras simultaneously.
  * Zivid Two can now acquire all images in an HDR sequence right after each other. Previously, the camera would wait
    for all images in one acquisition to be transferred back to the PC, before the next acquisition would start. This
    improves the capture speed of HDR captures and gives shorter and more predictable acquisition time that is
    independent of the network speed. Note that when Brightness setting is above 1.0, the thermal safety mechanism can
    still cause pauses in acquisition. For more information, see:
    <https://support.zivid.com/en/latest/reference-articles/settings/acquisition-settings/projector-brightness.html>.
  * The capture speed with 1Gbps connection is improved by 1.5x to 2.5x. With 10Gbps connection, the capture speed is
    improved by 5%-50% on Windows, and 0%-15% on Linux. The biggest percentage-wise improvement can be seen when using
    HDR and/or the Stripe engine.
  * The capture speed when capturing with multiple Zivid Two cameras at the same time over a congested network link is
    improved. For example, the capture speed for 3-acquisition HDR on 3 cameras simultaneously using a 1Gbps switch
    is improved by 2.5x to 3x.
* Added support for automatic discovery of Zivid Two:
  * The SDK will now search for available Zivid Two cameras on the network using Multicast DNS protocol. The cameras
    that are discovered and are reachable will be visible via the SDK and in Zivid Studio.
  * If a `Cameras.yml` file is present in the Zivid configuration folder, then only the IPs/hostnames listed in that
    file will be visible in the SDK, and auto-discovery will not be performed.
  * The camera must be updated to the newest firmware version (FW 1.9.6, included in SDK 2.8, or newer), before it can
    be discovered.
  * See <https://support.zivid.com/en/latest/getting-started/software-installation/zivid-two-network-configuration.html>
    for more information.
* Added save and load methods to the `Matrix4x4` class.
* Added support for saving `Image` objects to JPG and BMP format.
* Added support for Ubuntu 22.04.
* Added support for Zivid Two L100.
* The `Camera::closeAperture()` method call previously had no effect on Zivid Two. This method will now throw an
  exception stating that this feature is not supported on Zivid Two.
* Updated Zivid Two firmware to version 1.9.6.

#### C++

* Added `begin`, `end`, `cbegin` and `cend` methods to the `Array2D` class.

### Windows

* Added a compilation error if using static runtime library with Visual Studio. Zivid SDK must be built with the
  dynamic runtime library, option /MD or /MDd. This can be configured under "C/C++" -> "Code Generation" ->
  "Runtime Library" in your Visual Studio project.

### Bug fixes

* Zivid Two only: Fixed an issue with incorrect color balance calculation.
  * The color balance factors was incorrectly applied in the color image.
  * This issue would only occur if you had set any color balance setting higher than the default of 1.0.
  * For more information, see the knowledge base:
    <https://support.zivid.com/en/latest/support/color-inconsistency-after-sdk-update.html>.
* Zivid Two only: Fixed an issue where a firmware update can time out and fail due to slow network upload speed.

### Studio

* Added Signal-to-noise ratio (SNR) map.
* Added Normal map.
* Added dropdown menu in the upper left corner to switch between different views.
* Added dropdown menu in the top of the 3D view to select the point size.
* Added shortcuts 1 to 5 to select between different views.
* Adjusted the design of the footer preview images to avoid occluding the text in the footer bar.

### Known issues & limitations

* See <https://support.zivid.com/latest/support/troubleshooting.html>, especially Errata, for all known issues and
  limitations.

## 2.7.0

### API

* Added new experimental Local mode of the Reflection filter:
  * A new setting `Settings::Processing::Filters::Reflection::Removal::Experimental::Mode` is added to select mode,
    which can be `local` or `global`. `global` corresponds to the old reflection filter and is the default value.
  * Local mode preserves more 3D data on thin objects, generally removes more reflection artifacts and processes
    faster than the Global mode.
  * Global mode is generally better at removing outlier points in the point cloud.
  * Local mode is experimental and can be changed in future releases.
* Added a new setting `Settings::Processing::Color::Experimental::Mode`:
  * This setting has three options: `automatic`, `toneMapping` and `useFirstAcquisition`.
  * `automatic` mode is the default and corresponds to the previous default behavior of the SDK. This mode is equal to
    `useFirstAcquisition` for single-captures and `toneMapping` for HDR captures.
  * `useFirstAcquisition` will always use the color data from only the first acquisition that was provided in Settings.
    This mode can be used for both single-acquisition and multi-acquisition HDR captures. This mode provides more
    fine-tuned control of the colors than `toneMapping`, and provides stable color output even when the contents of
    the scene changes.
  * `toneMapping` combines the color data from all the acquisitions to create one merged and normalized color image.
  * This new setting replaces the existing `Settings::Processing::Color::Experimental::ToneMapping::Enabled` setting,
    which was added in SDK 2.3.0.
  * For more information, see the documentation for `Settings::Processing::Color::Experimental::Mode`.
* Zivid Two: Added new experimental mode for keeping internal camera temperatures stable between captures.
  * This option may also be used for faster warmup of the camera.
  * For more information about how to enable this feature, see the knowledge base:
    <https://support.zivid.com/latest/reference-articles/thermal-stabilization.html>
* Zivid Two: Added support for name queries ending with the .local label using Multicast DNS.
* Added `pose` method to the `DetectionResult` class that returns the pose of the calibration board.
* Added `inverse` method to the `Matrix4x4` class that returns the inverted matrix.
* Zivid One+: Improved processing of pixels that are immediately to the left or the right of  pixels with no signal
  (for example over-saturated pixels) when using the Phase engine. These pixels could previously cause a small amount
  of floating points in regions containing no-signal pixels.
* Zivid One+: Improved filtering of pixels that cannot be reliably decoded within the Phase engine pattern. These
  pixels could previously show up as floating points if Noise and Outlier filter is turned off, mostly in regions with
  low signal. Similar filtering was already present for Zivid Two.
* Added support for newer AMD GPUs:
  * AMD cards with RDNA architecture would give an error on previous SDK versions, but are now supported.
  * AMD RDNA cards (such as RX5500 and RX5700) can be unstable on Ubuntu depending on the installed GPU driver version
    and OS version. We recommend to test stability carefully with your setup if you use these models.
* Improved capture speed when using the Stripe engine:
  * Around 3%-12% improvement measured on high-end Nvidia GPU, and 5%-15% improvement on Intel integrated GPU. Most
    percentage-wise improvement when capturing with HDR.
* Improved capture speed when using HDR captures with Phase engine:
  * Improvements from 2% to 12% measured on a high-end Nvidia. Similar improvements on low-end Intel integrated GPUs,
    while high-end integrated Intel GPUs have similar performance to SDK 2.6.
  * Highest percentage improvement on shorter HDR sequences.
* Degraded capture speed for single-acquisition capture with Phase engine when using Intel driver:
  * Capture time increased by 5% to 15% compared to SDK 2.6, depending on settings. Most percentage-wise degradation
    when enabling many filters.
  * This does not apply to Stripe engine or HDR captures, see points above.
* Improved processing time for normals by about 50%:
  * Typical processing time for calculating normals for a full resolution point cloud is now about 5-20 ms on an
    Nvidia GPU, and 15-40 ms on an integrated Intel GPU, depending on the performance of the GPU.
* Changed to using new GPU compute framework internally.
* The connection time to the camera is increased, due to initialization of the compute pipeline:
  * The first time a camera is connected to in a process can take 6-10 seconds longer than in SDK 2.6.
  * This increase in connection time will only happen once per camera model, per `Zivid::Application` object.
* Added cloud connected logging to improve product quality and customer service experience:
  * Data is collected anonymously.
  * For more information about this feature, see the knowledge base:
    <https://support.zivid.com/latest/reference-articles/zivid-cloud-logging.html>
* Added better error message if a `Zivid::Application` object is created when one already exists.
* Using multiple Zivid One+ cameras at the same time is now non-experimental:
  * For more information about how to use multiple cameras, and known limitations, visit the knowledge base:
    <https://support.zivid.com/latest/academy/camera/multiple-zivid-cameras.html>
* Updated Zivid Two firmware to version 1.7.4.
* Removed the experimental setting `Settings::Processing::Color::Experimental::ToneMapping::Enabled`:
  * This setting is replaced by `Settings::Processing::Color::Experimental::Mode` (see point above).
* Removed support for Ubuntu 16.04.

#### C++

* Added const overloads of the `begin` and `end` member functions for the `Matrix4x4` class.

#### .NET

* Added a new `Matrix4x4` class to .NET wrapper, corresponding to the class with the same name in C++ API.
  * The `Matrix4x4` constructor takes as input a 2D .NET array.
  * `Matrix4x4` provides an `Inverse` method that returns the inverted matrix.
  * `Matrix4x4` provides a `ToArray` method that returns a 2D .NET array.
* Added a `Transform` method overload to the `PointCloud` class that takes a `Matrix4x4` as argument.

### Bug fixes

* Fixed a memory leak in `Zivid::Application` destructor, which could cause out-of-memory errors when making many
  applications sequentially within the same process.
* Fixed a bug where user could get an "An OpenCL error occurred: Failed to read buffer" when using the
  `Visualizer` class with an Intel GPU on Ubuntu.
* Fixed a bug with AMD GPUs where capturing with HDR would return inconsistent results across different captures.
* Fixed a bug with AMD GPUs where the application could crash after a few number of captures.
* Fixed a bug where the `estimateIntrinsics` function in some cases would return suboptimal intrinsics parameters.
* Zivid Two: fixed a TCP/IP multicast security vulnerability where the camera responds to a TCP connection
  with an invalid source address (RFC 1122 ch. 4.2.3.10).

### Studio

* Fixed a bug where the user could get an "OpenGL error: GL_INVALID_OPERATION" when capturing when using an
  Intel GPU on Ubuntu.
* Fixed a bug on Ubuntu where the "Open Frame" file dialog could be unresponsive/frozen.
* Added a "Move to top" action under the "..." context menu under each Acquisition on the right side panel.

### Known issues & limitations

* See <https://support.zivid.com/latest/support/troubleshooting.html>, especially Errata, for all known issues and
  limitations.

## 2.6.1

### Bug fixes

* Fixed a bug on Windows where loading a .zdf file with non-ASCII characters in the file name would throw a
  "Failed to load frame from file" exception.
* Fixed an issue where the SDK used too strict limits when checking the validity of a Pose transformation matrix,
  which could cause an exception during hand-eye or multi-camera calibration.
* Fixed an unintended change in color output introduced in SDK 2.6.0 when performing a HDR capture with identical
  acquisition settings:
  * In SDK 2.5.0 and earlier, when doing a HDR capture using the same acquisition settings for all the
    acquisitions in the HDR, the output color image would not be tone mapped. In SDK 2.6.0 an unintended change
    in behavior caused the color image to be tone mapped in this scenario. In SDK 2.6.1 this change is reverted,
    to be consistent with the behavior in SDK 2.5.0 and earlier.
  * Note that tone mapping can be turned on explicitly, by setting
    `Settings::Processing::Color::Experimental::ToneMapping::Enabled` to `always`.

## 2.6.0

### API

* Added Diagnostics::Enabled to Settings:
  * When Diagnostics is enabled, extra diagnostics and debugging information is collected during capture. This
    information will be saved in the `.zdf` file, and can be used by Zivid's support team to troubleshoot issues
    and provide better assistance.
  * Enabling Diagnostics increases the capture time and the RAM usage, and the size of the `.zdf` file.
  * It is recommended to enable Diagnostics only when reporting issues to Zivid's support team.
* Zivid One+ only: Important product lifetime improvement: Fixed an issue where a Zivid One+ camera can end up
  with a damaged projector if powered on for weeks before the first capture is triggered from the application.
* Zivid One+ only: Removed time penalty when switching between 3D capture and 2D capture if the 2D capture
  uses brightness 0.
* Improved capture speed with Stripe engine:
  * 5% to 15% capture speed improvement measured using NVIDIA GPUs.
  * Using a fast CPU and a slow GPU (for example Intel integrated GPU) will have about the same or slightly
    worse performance (1%-5% worse) compared to 2.5.
* Added CPU Model, ComputeDevice Model, ComputeDevice Vendor and OperatingSystem to the FrameInfo class.
* Added support for rotation of the calibration board for in-field correction/verification. The board can now
  be oriented 0, 90, 180 or 270 degrees (+/- 15 degrees) from the perspective of the camera.
* Improved robustness of the checkerboard detection algorithm, used for calibration and in-field
  correction/verification, in cases of significant reflections or glare from the calibration board.
* Improved the command line experience when verifying in-field correction with `ZividInfieldCorrection`:
  * Verification can now be repeated without having to reconnect to the camera.
  * Verification also provides a statistical summary of dimension trueness measurements.
* Improved the exception message when trying to save files to nonexistent directories.
* Constructing a `Frame` object from a `.zdf` file saved using SDK 1.x and re-saving that `Frame` object to a
  `.zdf` file is no longer supported, and will throw an exception.
* The underlying format of `.zdf` files has changed in this release:
  * If a `.zdf` file from 2.6.0 or newer is opened in SDK 2.5.0 or older, the SDK will throw an exception with
    message "Failed to load frame from file".
  * Older `.zdf` files can still be loaded using the API or Zivid Studio.
* Updated Zivid One+ firmware to version 1.9.2.
* Updated Zivid Two firmware to version 1.6.0.
* Support for Ubuntu 16.04 is deprecated and will be removed from SDK 2.7.

#### C++

* The `<Zivid/Zivid.h>` header will no longer include Experimental header files. Experimental header files must
  be included explicitly.

### Studio

* Fixed a bug where the 3D point cloud could become flipped upside-down when scrolling the mouse wheel rapidly.

### Known issues and current limitations

* See <https://support.zivid.com/latest/support/troubleshooting.html>, especially Errata, for known issues and
  current limitations.

## 2.5.0

### API

* Added support for normals.
  * Normals can be calculated from the PointCloud object using `copyNormalsXYZ()`. This returns a 2D array of unit
    normal vectors for each point in the point cloud.
* Added `Model` enumeration to the `CameraInfo` class. This enumeration can be used to differentiate between camera
  models; Zivid One+ Small/Medium/Large and Zivid Two.
* Added support for exporting organized point cloud to .pcd format (with correct WIDTH and HEIGHT attribute). To enable
  this fix you must opt in using the Config.yml file. Set the config value APIBreakingBugFixes / FileFormats / PCD /
  UseOrganizedFormat to `true`. For example of how to write and use a Config.yml file, see
  <https://support.zivid.com/latest/academy/getting-started/zivid-software-installation/gpu/select-specific-gpu-for-zivid-software.html>
* Performance improvement for the "Stripe" vision engine. The improvement is between 2% and 10% depending on GPU type.
* Removed support for early engineering samples (revision A) of Zivid Two.
* Updated Zivid One+ firmware to version 1.8.8.
* Updated Zivid Two firmware to version 1.5.2.
* Support for Ubuntu 16.04 is deprecated and will be removed from the SDK around April 2022.

#### C++

* Added experimental method `Zivid::Experimental::SettingsInfo::resolution()` to query the point cloud resolution given
  a Settings object and a CameraInfo object.

### Bug fixes

* Fixed a crash that could occur in the GenICam driver if the physical connection to the camera was lost in the middle
  of the GenICam camera connection process.
* Fixed a crash that could occur during shutdown of the program if the Zivid::Application was stored in a static
  variable.
* Fixed an issue where a process using Zivid SDK might be stuck forever during shutdown if it received a SIGTERM/SIGILL
  or similar signal.
* Fixed a small memory leak when calling `Camera::connect()` when using Zivid One+ cameras.

### Studio

* Added support for depth map coloring of points in the 3D point cloud view. Press "D" to toggle this mode on and off.
* Added support for opening .zdf and .yml files by dragging and dropping them onto the Zivid Studio window.
* Fixed an issue where expanding the main right panel by dragging its edge to the left would incorrectly collapse the
  Information Panel, if the Information Panel was open.

### Current limitations for Zivid Two

* Direct connection between Zivid Two and a dedicated 10Gb PCI-Express network card is recommended for optimal
  performance. A Thunderbolt 3 external network adapter connected to a Thunderbolt 3 port offers similar performance to
  a dedicated PCI-express card. USB-based network adapters can occasionally give errors when using the camera, and has
  reduced and more variable capture speeds.

### Known issues

* Zivid Two only: If the PC process is aborted non-cleanly (for example via a SIGINT, SIGABRT or similar) when
  connected to a Zivid Two, such that the TCP connection between the camera and the PC is not closed properly, the
  camera will power cycle when it detects that the network connection is down (typically within 15 seconds).
  * On rare occasions, the camera may not properly detect that the connection to the PC process has been killed. The
    camera will then continuously reject new connections from the SDK, which will make the camera not visible from the
    SDK. In this scenario the camera must be power-cycled manually.
* Zivid Two only: On very rare occasions a "Command failed: CameraImageTimeout" exception may be thrown during capture.
  This will resolve itself on the next capture.
* Zivid Two only: Capture time on Windows can occasionally be longer (more than 1 second longer than normal) due to
  Ethernet packet loss leading to data re-transmits. We recommend to increase "Receive Buffers" and "Transmit Buffers"
  in the network driver settings in Windows to reduce the occurrence of packet loss.
* Capture time can be higher on Windows compared to Linux for identical hardware. The difference is larger for low
  exposure times, and lower for higher exposure times. The relative difference between Windows and Linux on identical
  hardware is higher when using Zivid Two, compared to using Zivid One+.
* Ubuntu 20.04 only: When using Linux 5.8 kernel (released with Ubuntu 20.04.2 when using the newer HWE kernels), with
  an Intel GPU as rendering device, Zivid Studio and Visualizer can give errors like "CL_OUT_OF_RESOURCES" and "OpenGL
  error: GL_INVALID_OPERATION" when displaying the point cloud. To avoid this issue, use Linux kernel 5.4, which is the
  LTS (stable) base Linux kernel for Ubuntu 20.04.

## 2.4.2

### Bug fixes

* Fixed an issue that prevented the user from being able to replace libusb (used internally by the SDK) with their own
  version.

## 2.4.1

### Bug fixes

* Zivid Two with calibration model 2.1 only: Fixed a bug on Windows in Debug mode where capturing would throw an
  "Assertion Failed" exception.

## 2.4.0

### API

* Added support for the experimental "Stripe" vision engine for Zivid Two.
* Added support for calibration model 2.1 for Zivid Two. Calibration model 2.1 further improves the accuracy of the
  Zivid Two camera.
* Added support for using multiple Zivid Two cameras.
  * This feature has been tested using up to four Zivid Two cameras simultaneously from one PC.
  * Multiple cameras can be used simultaneously, however, each individual camera should not be used
    from several threads at the same time. Connecting to the cameras via the SDK must be done in sequence.
  * For more information about how to set up multiple cameras, visit the knowledge base:
    <https://support.zivid.com/latest/academy/camera/multiple-zivid-cameras.html>
* Added ZividNetworkCameraConfigurator CLI tool to change the network settings of a Zivid Two camera.
  * The camera can be configured in static IP mode or DHCP mode.
  * For more information about how to use this tool, and how to configure the SDK to connect to your custom IP or
    hostname, visit the knowledge base:
    <https://support.zivid.com/latest/academy/getting-started/zivid-software-installation/zivid-two-network-configuration.html#custom-ip-configuration>
* Improved point cloud accuracy when using camera outside of temperature specification. Automatically applies to any
  Zivid One+ or Zivid Two camera.
* Improved hand-eye calibration accuracy in both eye-in-hand and eye-to-hand configurations.
* Improved Zivid Two network performance in cases of network packet loss.
* Improved Zivid Two projector longevity at high operating temperatures.
* Improved Zivid Two capture time when using exposure time 10000 microseconds and above.
* Updated Zivid One+ firmware to version 1.8.7.
* Updated Zivid Two firmware to version 1.4.1.
* Removed support for the original Zivid One camera. (Note: this does not apply to Zivid One Plus cameras.)

### Studio

* Fixed an issue where switching back and forth between two or more cameras could give an error when connecting to the
  camera.

### Bug fixes

* Fixed a crash that could occur during destruction of very short-lived Zivid::Application objects.
* Fixed an issue on AMD compute devices when capturing with all filters disabled, where invalid points would be marked
  as "inf" instead of NaN.
* Fixed an issue where Stripe Engine could cause a SIGILL on Linux when run on CPUs without features such as AVX.
* Fixed an issue on Stripe Engine where the signal-to-noise ratio could contain NaN values.
* Zivid One Plus only: Fixed a bug introduced in SDK 2.2 that caused excessive current consumption during boot.
* Zivid One Plus Revision C only: Fixed an issue where the status LED on the back of the camera was red during normal
  operation.
* Zivid Two only: Fixed an issue where the first captured point cloud after a firmware upgrade could contain stripes of
  missing/wrong 3D data.
* Zivid Two only: Fixed too short timeout when using DHCP to obtain an IP address. The short timeout could cause the
  camera to fall back to a link-local IP address before the DHCP process could complete.
* Zivid Two only: Fixed a race-condition issue, particularly prominent in the presence of network delay, where the SDK
  would fail to connect to the camera.
* Zivid Two only: Fixed an issue which could cause the fans to run at excessively high RPM.
* Zivid Two only: Fixed an issue where unsent data on the camera could potentially be overwritten with new/wrong data.

### Current limitations for Zivid Two

* Direct connection between Zivid Two and a dedicated 10Gb PCI-Express network card is recommended for optimal
  performance. A Thunderbolt 3 external network adapter connected to a Thunderbolt 3 port offers similar performance to
  a dedicated PCI-express card. USB-based network adapters can occasionally give errors when using the camera, and has
  reduced and more variable capture speeds.

### Known issues

* Zivid Two only: If the PC process is aborted non-cleanly (for example via a SIGINT, SIGABRT or similar) when
  connected to a Zivid Two, such that the TCP connection between the camera and the PC is not closed properly, the
  camera will power cycle when it detects that the network connection is down (typically within 15 seconds).
  * On rare occasions, the camera may not properly detect that the connection to the PC process has been killed. The
    camera will then continuously reject new connections from the SDK, which will make the camera not visible from the
    SDK. In this scenario the camera must be power-cycled manually.
* Zivid Two only: On very rare occasions a "Command failed: CameraImageTimeout" exception may be thrown during capture.
  This will resolve itself on the next capture.
* Zivid Two only: Capture time on Windows can occasionally be longer (more than 1 second longer than normal) due to
  Ethernet packet loss leading to data re-transmits. We recommend to increase "Receive Buffers" and "Transmit Buffers"
  in the network driver settings in Windows to reduce the occurrence of packet loss.
* Capture time can be higher on Windows compared to Linux for identical hardware. The difference is larger for low
  exposure times, and lower for higher exposure times. The relative difference between Windows and Linux on identical
  hardware is higher when using Zivid Two, compared to using Zivid One+.
* Ubuntu 20.04 only: When using Linux 5.8 kernel (released with Ubuntu 20.04.2 when using the newer HWE kernels), with
  an Intel GPU as rendering device, Zivid Studio and Visualizer can give errors like "CL_OUT_OF_RESOURCES" and "OpenGL
  error: GL_INVALID_OPERATION" when displaying the point cloud. To avoid this issue, use Linux kernel 5.4, which is the
  LTS (stable) base Linux kernel for Ubuntu 20.04.

## 2.3.0

### API

* Added support for the Zivid Two camera.
* Improved speed of the experimental "Stripe" vision engine.
* Added official support for Ubuntu 20.04.
* Improved experimental In-field Correction:
  * Improved algorithm in order to yield better post-correction accuracy in some cases.
  * Fixed issue where users would get an exception with "No significant correction could be identified (noise >> signal)."
    even though the input data was actually sufficient to calculate a correction.
* Improved robustness of the checkerboard detection used in the calibration API and in-field correction.
* Increased maximum values for color balance settings from 2.0 to 8.0.
* Added experimental setting `Settings::Processing::Color::Experimental::ToneMapping::Enabled`. This setting controls if
  tone mapping is performed on all 3D captures (single and HDR captures), or only for HDR captures.
* Reduced noise in dark/underexposed regions of the color image for 3D captures, especially with tone mapping enabled
  and/or gamma below 1.
* AMD is no longer supported on Ubuntu 16.04. (AMD dropped support for Ubuntu 16.04 as of Radeon Software for Linux 18.50.)
* Support for the original Zivid One camera is deprecated, and will be removed in Zivid 2.4. (Note: This only concerns
  the Zivid One camera, Zivid One Plus is still supported.)

### Studio

* Added option to the Information panel for saving frame settings to file.
* Improved the look of file dialogs on Ubuntu.
* Fixed issue where 2D images could be flipped upside down in Zivid Studio when scrolling the mouse wheel rapidly under
  high CPU load.

### Bug fixes

* Fixed issue where one would get the error "Failed to check if block 0 in the EEPROM master table is occupied" when
  attempting to connect to a Zivid One+ camera.
* Signal-to-noise ratio (SNR) for Stripe engine has been corrected and is now comparable to SNR for the Phase engine.
  * The improved SNR calculation means that the noise filter now has a closer correspondence in behavior for the two
    engines.

### Noteworthy changes in this release

* A small performance degradation in 3D capture time compared to 2.2 may be observed when using weaker compute devices,
  such as certain weaker Intel integrated GPUs or CPUs. The performance degradation for such devices is typically from
  1% to 6% depending on the compute device and the capture settings.

### Current limitations for Zivid Two

* Experimental "Stripe" vision engine not yet supported.
* Only a single Zivid Two may be connected to a PC at a time.
* The network configuration of Zivid Two can not be customized.
* Direct connection between Zivid Two and a dedicated 10Gb PCI-Express network card is recommended for optimal performance.
  A Thunderbolt 3 external network adapter connected to a Thunderbolt 3 port offers similar performance to a dedicated
  PCI-express card. USB-based network adapters can give capture errors and limit capture speeds, and are not recommended
  for this release.

### Known issues

* Capture time can be higher on Windows compared to Linux for identical hardware. The difference is larger for low
  exposure times, and lower for higher exposure times. The relative difference between Windows and Linux on identical
  hardware is higher when using Zivid Two, compared to using Zivid One or One+.
* Zivid Two only: Occasionally, on the very first capture after a firmware upgrade is finished, the point cloud output
  can be wrong. This will be visible as lines of wrong/missing data in the point cloud. This issue will resolve itself
  on the following capture.
* Zivid Two only: Occasionally, if capturing after a firmware upgrade of the camera was completed, a "Camera not
  connected" or similar exception may be thrown. This issue will resolve itself when re-connecting to the camera.
* Zivid Two Only: Capture time on Windows can occasionally be longer (more than 1 second longer than normal) due to
  Ethernet packet loss leading to data re-transmits.
* Zivid Two only: On very rare occasions a "Command failed: CameraImageTimeout" exception may be thrown during capture.
  This will resolve itself on the next capture.
* Zivid Two only: Very rarely the network link between the camera and client might go down, resulting in a timeout.
  However, the link will be automatically restored and the user can catch the `Zivid::Exception` and reconnect to the
  camera without manual intervention.
* Ubuntu 20.04 only: When using Linux 5.8 kernel (released with Ubuntu 20.04.2 when using the newer HWE kernels), with
  an Intel GPU as rendering device, Zivid Studio and Visualizer can give errors like "CL_OUT_OF_RESOURCES" and "OpenGL
  error: GL_INVALID_OPERATION" when displaying the point cloud. To avoid this issue, use Linux kernel 5.4, which is the
  LTS (stable) base Linux kernel for Ubuntu 20.04.

## 2.2.0

### API

* New, experimental Zivid Vision Engine added, called Stripe:
  * The original and default Zivid Vision Engine is named Phase.
  * New `Settings::Experimental::Engine` added to specify which Zivid Vision Engine to use.
  * The Stripe Engine suppresses inter-reflection artifacts and improves data quality on shiny objects like cylinders and
    chrome-plated parts.
  * Additional acquisition and processing time are required for the Stripe Engine.
  * Both the Reflection Removal Filter and the Contrast Distortion Correction filter must be enabled when using the Stripe
    engine. This may change in the future.
  * Note that due to a known bug in our GenICam wrappers, if the Reflection Removal and Contrast Distortion Correction
    filters are not enabled, the call will hang instead of reporting an error.
  * The Stripe Engine is currently experimental, and may be changed and improved in the future.
  * The Stripe Engine is only supported on Zivid One Plus (not Zivid One)
* Extended the Calibration API to support the new line of official Zivid calibration boards, the first of which being the
  ZVD-CB01 (7x8 30mm). This board can now be used with the existing hand-eye and multi-camera calibration features without
  modification to client code. It can also be used with the new In-field Correction feature (see below).
* Added the new experimental In-field Correction API. Together with the new ZVD-CB01 calibration board, this allows the
  user to perform both verification and correction of a camera's dimension trueness. The API has the following functions:
  * `verifyCamera`: Based on a single calibration board capture, quantify a camera's local dimension trueness.
  * `computeCameraCorrection`: Based on one or more calibration board captures, compute a correction that may be applied
    to a camera in order to improve its dimension trueness. This function also computes a confidence interval for the
    trueness that can be expected if the correction is applied.
  * `writeCameraCorrection`: Write a correction to a camera. The correction will persist on the camera even though the
    camera is power-cycled or connected to a different PC. After calling this function, the given correction will
    automatically be used any time the capture function is called on this camera.
  * `resetCameraCorrection`: Reset a camera's correction to factory default.
  * `hasCameraCorrection`: Check if a camera has a non-default correction.
  * `cameraCorrectionTimestamp`: Check when the current correction was written to a camera.
  * See the API documentation for a more detailed description.
* Added the command-line tool `ZividExperimentalInfieldCorrection`. This tool enables users to easily perform core tasks
  from the new In-field Correction API without needing to write code. Use the command `ZividExperimentalInfieldCorrection
  --help` to see instructions for use. Note: On Linux, this tool comes as part of the `zivid-tools` package, not the core
  installer.
* Added Gamma setting. Gamma can be used to brighten or darken the colors of the point cloud using a gamma curve.
* Updated Zivid One+ firmware to version 1.8.4.

### Studio

* Added a new Information side panel:
  * This panel contains information about the current frame / point cloud, including the settings that were used, the
      resolution of the point cloud, as well as the capture time.
  * The capture time is defined as the time it takes from capture is initiated until all processing is completed and the
      point cloud data is available on the compute device.
  * When opening a .zdf file the side panel displays the camera's serial number and model name used to capture this
      frame, as well as the Zivid SDK version.
  * This new side panel can be displayed by clicking "Information" in the lower right corner, via the "View" menu, and
      via the shortcut "Shift+I".
* Added support for the new Stripe engine.
* Added option to the "View" menu to disable resetting of the point cloud view when opening a .zdf file.
* Added "M" as a shortcut for meshing.
* Added tab buttons to more easily switch between Assisted Mode and Manual Mode.
* Fixed Depth and Color image views being reset if the window size changes.
* Adjusted colors, sizes and paddings various places in the GUI.

### Bug fixes

* Linux
  * Fixed a crash that could occur after subsequent exceptions from the `capture()` function.  If one exception had
    previously been thrown from `capture()`, then if another failure occurred then the system could crash instead of
    throwing another exception. This crash would only happen when using the Ubuntu 16.04 packages.
* Windows
  * Fixed an issue that would trigger a false positive malware alert on some antivirus software.
* .NET
  * Fixed a bug where calling `.Dispose()` multiple times on the same object could cause a
    `System.AccessViolationException`.
* Firmware
  * Fixed an issue where firmware could hang after a long period of time

## 2.1.0

### API

* Added downsampling functionality to the `PointCloud` class:
  * Downsampling can be used to reduce the size of the point cloud, in order to perform computations
    on a smaller number of points.
  * Downsampling combines an NxN region of pixels in the original point cloud to one pixel in the
    downsampled point cloud. 2x2, 3x3 and 4x4 downsampling options are available.
  * Downsampling is performed in a way that reduces the noise of the points by averaging them weighted
    by SNR^2, ignoring invalid (NaN) points. Downsampling is performed on the compute device.
* `CameraInfo` is now available in the `Frame` class. `CameraInfo` contains among other things the
  serial number and model name of the camera used to capture the frame.
* Fixed an issue where connecting to a camera would throw an exception with message "Failed to set
  pixel format (CAM_API_STS_NOT_WRITABLE)."
* Updated Zivid One+ firmware to version 1.7.4:
  * Fixed a bug where the camera could potentially stop responding.

#### C++

* Numerical values in `Settings` and `Settings2D` (such as `ExposureTime`, `Aperture` etc.) can now be
  compared using `operator<` and `operator>`.

#### .NET

* `PointCloud.Transform` now returns a reference to itself, such that `Transform`, `Downsample` etc.
  can be chained together.

### Studio

* Added "mm" as unit in the Depth Image view.

## 2.0.0

### API

* New `Settings` / `Settings2D` / `Capture` API:
  * A single `Settings` object now contains all information necessary for a capture.
  * `Settings` contains one or more acquisitions, plus processing settings like filters and color balance.
    When more than one acquisition is provided HDR capture is performed, and the combined frame is returned.
  * The `Settings` object is now provided directly as an argument to the capture method on the `Camera`.
  * The separate 2D capture method on `Camera` is removed. 2D capture is now performed by passing a `Settings2D`
    to the capture method.
  * The user may specify as few or as many parts of `Settings` or `Settings2D` as desired.
    When capturing, any settings which are not explicitly specified will use camera-specific default values.
* New point-cloud API:
  * A call to the capture method returns a `Frame`, which provides a handle to a `PointCloud`. The
    `PointCloud` object is a handle to the point-cloud still stored on the GPU, and specific data may
    then be copied to CPU memory when desired through various methods of `PointCloud`.
  * The `PointCloud` allows copying of the following data-formats:
    * `PointXYZ`
    * `PointXYZW`
    * `PointZ`
    * `ColorRGBA`
    * `PointXYZColorRGBA`
    * `PointXYZColorBGRA`
    * `SNR`
  * `PointCloud` functionality replaces the old `DeviceCloud`, which no longer exists.
* New `ContrastDistortion` filter:
  * This filter has the ability to correct and/or remove points that have been distorted due to
    very strong intensity gradients. This is applicable for shiny/reflective objects as well as
    diffuse objects with e.g. sudden changes from white to black.
  * This filter is considered experimental, and may change in future releases.
* New multi-camera calibration:
  * Part of the new `Calibration` namespace, together with hand-eye calibration.
  * Multi-camera calibration is used in a multi-camera setup to find the pose of secondary cameras
    in the frame of a designated primary camera, e.g. to combine points clouds into a single frame of reference.
* GPU-accelerated point-cloud transforms:
  * Through the transform method of `PointCloud` the user may now perform in-place
    GPU-accelerated transformation of the point-cloud's 3D coordinates. Such a transform, provided in the
    form of a 4x4 matrix, may come from the functions of the `Calibration` namespace, or they could be any
    user-defined transform.
* New `Aperture` setting:
  * Introducing the `Aperture` setting, which replaces the old `Iris` setting.
  * This is a floating-point number with units of F-number. The API supports values in the range
    [1.4 - 32].
  * On capture the camera will choose the internal iris position that can most closely approximate
    the specified F-number.
  * The aperture may be completely closed by calling a method on the `Camera`.
* New color balance settings:
  * The user may now independently control gain applied to the three color channels, without any effect on
    the calculated 3D point coordinates.
  * Captures are now likely to give more valid points given the same scene, especially if the scene
    contains bright reds.
  * Added support for color-balance in 2D captures.
* New point-cloud SNR metric:
  * Introducing the Signal-to-Noise Ratio (`SNR`) metric. This replaces the old `Contrast` metric, and is
    always a non-negative non-NaN number.
  * Improved HDR-merge of 3D point coordinates based on the new SNR metric.
  * When loading a ZDF file created with API 1.X, the SNR values of the point cloud is approximated
    based on the old Contrast values.
* New default values for settings:
  * Default value of `Gain` is reduced from `2` to `1`.
  * Default value of `Brightness` for One Plus Medium cameras is increased from `1.0` to `1.5`.
  * Default value of `Brightness` for One Plus Large cameras is increased from `1.0` to `1.8`.
  * Default value of `ExposureTime` for all One Plus cameras is reduced from `8333` to `6500`.
* New `Noise` filter:
  * Filtering points based on SNR value.
  * Replaces the old Contrast filter.
* Removed old `Saturated` filter setting:
  * The saturation filter is now always enabled, and cannot be disabled via settings.
* New `Calibration` namespace:
  * The contents of the old `HandEye` namespace is moved into `Calibration` namespace.
  * All input and output transformation matrices are now in float format instead of double format,
    to better match the format of the `PointCloud` data.
* New `CameraInfo` API:
  * The member functions on `Camera` used to get serial number, model name, etc. have been removed.
  * Instead, an instance of the new class `CameraInfo` may be accessed though a method on `Camera`.
  * `CameraInfo` contains camera model name, revision, serial number, firmware version, and the maximum number of bytes of
    user data that can be stored in the camera.
* Changes to camera-intrinsics API:
  * Significant performance improvements when estimating the effective camera intrinsics based on a `Frame`.
  * Method for getting camera intrinsics is taken out of the `Camera` class and placed in the `Experimental::Calibration`
    namespace together with the function for getting intrinsics from a `Frame`.
* `Gaussian` filter moved to after HDR merge, for improved performance.
* "Live-mode" has been removed from the API.
* Bidirectional patterns have been removed from the API.
* `ZividVis3D` library has been renamed to `ZividVisualization`.
* `CloudVisualizer` class has been renamed to `Visualizer`, and moved into the `Visualization` namespace.
* File extension for file cameras has changed from .zdf to .zfc.
* `Environment` namespace has been removed from the API.
* The `Frame2D` method for accessing image data has been renamed from `colorsRGBA` to `imageRGBA`.
* Simplified Exception API to contain only a single exception: `Zivid::Exception`.
* Many adjustments to naming/terminology.

#### C++

* In the C++ API the `PointCloud` class also has the ability to copy data straight from the GPU to a
  specified user-allocated CPU data buffer through member functions such as `copyData(PointXYZ*)`.

#### C\#

* Restructured C# interface to reflect the underlying changes of the core API (see above).
* `CaptureAssistant` has been changed from a class to a namespace. This namespace holds two classes:
  * `SuggestSettingsParameters`
  * `Assistant`, which contains the method `SuggestSettings`.
* `Firmware` has been changed from a class to a namespace. This namespace holds a new class, `Updater`,
  which provides firmware-update related functionality.
* The primary image class for 2D color data is now called `ImageRGBA`. It provides two methods for
  accessing color data:
  * `ToArray()`: 2D array of the `ColorRGBA` struct.
  * `ToByteArray()`: 3D array of bytes, with the third index used for selecting image channel (RGBA).
* `Pose::ToArray()` has been removed.
* `Pose::ToArray2D` has been renamed to `Pose::ToMatrix()`.

#### GenICam

* All settings are renamed to match the new name in the core C++ API.
* `MergedMultiFrame` no longer has an `ApplyType` field.
* `MergedMultiFrame` has been renamed to `MultiAcquisitionFrame`.
* Removed duplicated settings for `MultiAcquisitionFrame` and single frame.
* `SettingsControl` contains common capture settings, like filters and color balance. `AcquisitionSettingsControl`
  contains settings for one acquisition.
* `SingleFrame` mode uses the settings under categories `SettingsControl` and `AcquisitionSettingsControl`.
  `SingleFrame` mode is used to capture with just a single acquisition.
* `MultiAcquisitionFrame` mode uses the settings under `SettingsControl`, plus all acquisition settings added via
  `MultiAcquisitionFrameControl::AddAcquisition`. `MultiAcquisitionFrame` mode is used to capture with multiple
  acquisitions (HDR).
* Continuous mode is no longer supported.

### Zivid Studio

* Option to save or load complete capture settings through File -> "Import/Export Capture Settings".
* Improved step size of the settings sliders.
* Allow changing all settings when running "Live" mode with one enabled acquisition.
* Added a notification in the UI when running "Live" mode with brightness setting above 1.0.

### Windows

* Installer no longer include samples or sample-data. This may now be found on <http://github.com/zivid>.

### Linux

* Linux installers (specifically `zivid-telicam-driver_*.deb`) now properly uninstalls the old `telicam-sdk`
  package if upgrading from older (<=1.4) versions of the Zivid SDK.
* Fixed a bug in the Linux installers (specifically `zivid-telicam-driver_*.deb`) where TelicamSDK samples
  would be written to `/root`. These samples are no longer installed.

### Bug fixes

* Fixed problem that could cause "Inconsistent frame timing detected" exception with older Zivid One cameras.
  This fixes a known limitation from release 1.8.1.
* Fixed a resource leak on the USB layer.
* Fixed bug where DetectionResult would be considered valid despite containing a NaN feature point.
* Fixed a bug where saving and loading YAML files in different locales could fail due to conflicting
  decimal point conventions. YAML serialization now always uses "." as decimal point.

## 1.8.1

### API

* Added new experimental function Zivid::Experimental::Calibration::estimateIntrinsics() to the C++
  API. This function provides more accurate camera intrinsics when projecting 3D points to 2D.
* Fixed an issue where artifacts near the edges of the projector's field-of-view would not be
  removed correctly.
* Experimental multi-Zivid support:
  * This feature is tested using up to four Zivid One Plus cameras simultaneously from one PC.
  * Multiple cameras can be used simultaneously, however, each individual camera should not be used
    from several threads at the same time. Connecting to the cameras must be done in sequence.
  * Known limitations:
    * Some USB chipsets will not perform well during high load (multiple captures at the same time).
      This can manifest itself as exceptions being thrown during capture. If you experience this,
      try to use different USB ports or a different PC.
    * Capturing during extended periods of very high load on NVIDIA GPUs can cause OpenCL
      out-of-memory related exceptions. The speed and RAM size of the GPU affects this issue.
    * If you are using Intel NEO OpenCL driver for Linux, version 20.08 or newer is required. Older
      versions of this driver can be unstable.

#### Linux

* Updated zivid-telicam-driver to version 3.0.1.1.
* Added dependency for zivid deb package on zivid-telicam-driver deb package.

### Zivid Studio

* When opening a .zdf file the filename is shown in the window's title bar.

### Known Limitations

* Users of the original Zivid One camera (not One Plus series) may experience exceptions during
  capture. We recommend users of the original Zivid One model to stay on SDK 1.8.0 or earlier.

## 1.8.0

### API

* Improved capture assistant:
  * Improved performance (about 25% shorter analysis time).
  * Improved results for capture budgets ("Max capture time") below one second.
  * Fixed an issue where the wrong outlier filter threshold was returned in case of Large cameras.
* Removal of artifacts near the edges of the projector's field-of-view.
* Fixed compatibility issues with Intel NEO OpenCL drivers for Linux on new Intel GPUs (Broadwell
  and higher).
* Improved support for GPUs without double-precision floating-point capabilities.

#### .NET

* Added support for the Capture Assistant to the .NET API, including sample.

### Zivid Studio

* Assisted Mode (Capture Assistant) is now the default mode when opening Zivid Studio.

### Tools

* Fixed issue where the HandEyeCalibration CLI tool did not work on Linux.

## 1.7.0

### API

* Improved colors for HDR frames.
* Improved capture assistant:
  * Generally improved suggestions for any scene and in particular for shiny objects.
  * Option to adapt suggestions based on ambient light frequency.
  * Improved out of focus handling.
  * Max allowed budget increased to 10 seconds.
  * Faster scene analysis.
* Fix for issue where unplugging USB or power during firmware update could result in a situation
  where next firmware update resulted in a crash or hanging software.
* Updated Zivid One+ firmware to version 1.6.7.

### Zivid Studio

* Option to adapt capture assistant suggestions based on ambient light frequency.

## 1.6.0

### API

* Added Hand-eye calibration API.
* Added 2D capture API.
* More helpful error messages when OpenCL drivers are not set up correctly.
* Support offline installation on Windows. Sample data is now embedded in the installer.
* Improved SampleCameraUserData with more explicit CLI options and made it more verbose.
* Fixed potential camera deadlock when unplugging USB during a capture.
* Capture Assistant avoids iris values above 46 to increase the depth of field.
* Use correct alpha values when exporting PCD files.
* Capture Assistant CLI tool now supports saving suggested settings.
* Removed Qt dependency from Vis3D library.
* Added SampleHandEyeCalibration samples.
* Added SampleCapture2D samples.
* Added Vis3D samples.
* Added keyboard shortcut for reset view(backspace) & colors on/off(c) for CloudVisualizer.

#### .NET

* Added missing user data functionality to keep .NET API in sync with C++ API.
* Make sample code copy release DLLs from the correct folder to avoid loading debug DLLs in release
  build.
* Improved reference documentation.
* Fixed month conversion bug.

#### GenICam

* Added support for HALCON 19 in Ubuntu.

### Zivid Studio

* Fixed issue where setting tooltips wrongly appears
* Fixed potential crash when moving the mouse in depth/color 2D views
* Fixed depth/color 2D view being reset when changing tab
* Added "Save settings to folder" to "Capture" menu in the right hand side panel

### Known defects

* Unplugging USB or power during firmware update may result in a situation where next firmware
  update results in a crash or hanging software. To recover from this situation power cycle the
  camera.

## 1.5.0

### API

* Improved semantic versioning support in CMake config files. Now newer version of Zivid SDK will
  be found when using find_package using same major version, but lower required minor or patch
  version.
* Renamed telicam-sdk deb package to zivid-telicam-driver.
* Calling combineFrames on empty vector now results in an exception, previously this would result
  in a crash.
* Windows installer will now by default add the Zivid binary directory to system PATH during
  installation.
* When installing the experimental GenICam driver Zivid will be added to GENICAM_GENTL64_PATH.
* Supported Halcon version for experimental GenICam driver is bumped to 19.
* Improvements to API documentation.
* Park projector mirrors when idle.
* Added watchdog that will reset the camera if it is connected to a PC but is not enumerated within
  a timeout.
* Minor increase to the minimum RPM for the external camera fan.
* Static link more dependencies for the Windows build, this makes it easier to use the .NET API
  from Matlab and Labview.
* Improved post install step of deb packages to make 18.04 package installable on newer Ubuntu
  versions.
* Improved USB reconnect handling when upgrading camera firmware. This fixes issues with flashing
  camera in Docker.
* Improved contrast value calculation. The new method is based on SNR and it will make the contrast
  filter and HDR work more consistent under varying ambient light conditions.
* Improvements and breaking API changes to the experimental Auto Exposure feature:
  * Re-branded to Capture Assistant.
  * Improvements to core algorithm.
  * Better support for various camera models.
  * Region of Interest feature removed.
* Updated Zivid One+ firmware to version 1.6.6.

### Zivid Studio

* New Assisted Mode for capturing.
* New Histogram feature.
* The depth view Z-range can now be configured.
* Add support for saving color/RGB image as PNG/JPG/BMP.
* Consistently show 2 decimal places in all of the UI, before 3 decimal places was used in some
  parts of the UI.
* Moved the camera disconnect button into a sub-menu.
* Automatically change to 3D view when changing color or mesh settings.
* Improved navigation in 3D view when the point cloud have huge outliers.
* Bugfix for the connect button being stuck in Connecting state.
* Button texts changed from UPPERCASE to Capitalized Case.
* Small improvements to the look & feel of the UI.

## 1.4.0

### API

* Added experimental Auto Exposure API.
* Improvements to reflection filter, remove fewer good points.
* Improvements to reflection filter in bidirectional mode.
* Fixed an issue in reflection filter resulting in black lines in scenes with shiny objects and
  bright surfaces.
* Improvements to outlier filter, remove fewer good points.
* Added test in Application class to ensure that binary files and header files are in sync.
* Fixed an issue with the camera always returning CAM_API_STS_NOT_WRITABLE, after an initial
  CAM_API_STS_TIMEOUT error.

### Zivid Studio

* Better error handling during startup, the application will now show an error dialog if the Zivid
  Core library fails to initialize.

## 1.3.0

### API

* Added gaussian filter.
* Expose camera intrinsics in OpenCV format.
* Improved HDR point merge to reduce noise by up to sqrt(images).
* Updated Zivid One+ firmware to version 1.6.3.

#### .NET

* Add save and load function for data models (Settings, FrameInfo, CameraIntrinsics and
  CameraState).

### Zivid Studio

* Added gaussian filter.
* Improvements to rendering performance.
* Show XYZ/RGB/Contrast of pixel under the mouse pointer in 2D views.
* Improve the 2D Image View behavior.

### Tools

* Renamed ZividSuggestSettings to ZividExperimentalSuggestSettings.

## 1.2.1

* Support for Zivid One Plus Small, Medium and Large, revision B.

## 1.2.0

* Ubuntu 16.04 and 18.04 support.
* GenICam/HALCON preview for Windows 10.
* Changed from DirectX to OpenCL as the GPU compute platform.
* Performance improvements.
* Re-branding from Zivid Labs to Zivid (including log and config folders).
* Support for Zivid One Plus Small, Medium and Large, engineering builds.

### API

* Functionality to flash cameras from the API added.
* Function for writing user data to cameras added.
* Boost mode, allowing brightness larger than 1.0 for Zivid One Plus.

#### C++

* CMake files changed from module mode to config mode.
* Structured bindings support for settings.

### Zivid Studio

* Rewritten from scratch:
  * Modern look and feel.
  * Removed little used functionality.

## 1.0.1

* Support for new camera revision.
* Fix discrepancies in the functionality of the iris.

## 1.0.0

Some of the following changed was introduced during the release candidate period. If upgrading from
a rc-candidate, some but not all of this will apply.

### Major changes

* New reference frame. The reference frame have changed from the projector to the camera. Any
  eye-hand calibration done using older software needs to be re-done. This changed between rc3 and
  rc4.
* From version 1.0.0 the API is stable and following the semantic versioning scheme
  from <https://semver.org/>.
* New settings API.
* HDR performance improved.
* API fully documented.
* Support multiple Zivid cameras connected to the same computer.
* Update of firmware automatically using Zivid Studio or manually using standalone application.
* Added Application class that manages resource, it needs to be the first thing created when using
  Zivid.
* Removed return codes from C++ API, API is now using exceptions exclusively for error handling.
* Removed System class and split it into more specific namespaces.

### Full change log

* Visual Studio sample projects added to installer.
* CMake sample projects added to installer.
* Setting exposure_time to 19654 no longer fails.
* Zivid Studio crashes randomly when capturing frames, fixed.
* ZividNET.dll can now be loaded from MATLAB.
* Report error when attempting to create a texture of invalid dimensions.
* Bi-directional giving corrupted output data in some cases, fixed.
* Preferences is now resizing its content properly.
* Turn off fans when shutting down Zivid Studio.
* Support for pre revision 3 cameras removed.
* New patterns for improved signal-to-noise ratio and reduced noise.
* Added version info for Zivid Studio in about dialog.
* Added CameraState.h and ImageInfo.h to the installer.
* Bugfix for mesh mode in Zivid Studio.
* Saving/loading settings to YML in Zivid Studio now works.
* Camera reconnect added in ZividStudio.
* Logging to file.
* Include "legal notice" for 3rd party libraries in Zivid Studio.
* Added nicer application icons.
* New version of the Toshiba Teli drivers.
* Digitally signing the executables.
* Clean up public C++ API.
* Install sample in Program Files\Zivid\SampleData.
* Show error dialog in Zivid Studio if camera unit info couldn't be read.
* Up to date and correct header comment in all header files.
* Make sure live pattern display is turned off on exit.
* Fixed all TODOs and FIXMEs from public API.
* Renamed public function names to be more descriptive and consistently named.
* Make Zivid Studio initialize properly without camera connected.
* Make public API C++11 conforming.
* Sign the uninstaller to avoid warnings when launching it.
* Remove old registry keys when installing new version.
* Uninstall old version as a part of running the installer.
* Build with /WX /W4 in Visual Studio, both internal code and sample code.
* Stopped using MSVC C++ extensions.
* Expose version info in .NET.
* Refuse to connect a camera if firmware version does not match.
* Added new version notification in ZividStudio.
* Remove logging API from public API.
* Remove state callback API from public API.
* CameraInfo and Camera merged.
* Reduced fan noise under normal working conditions.
* Removed usbPath and internalCameraId from public API.
* Associate Zivid Studio with .zdf files.
* Make Zivid appear in "Add/Remove programs" in Windows.
* Embed VCRedist files for Visual Studio in the setup file.
* Download and install Toshiba Teli camera drivers if needed.
* Removed std::shared_ptr from public API.
* Removed ZSetting from C++ API.
* Renamed Measurement class to Frame.
* Moved saveMeasurement from System to Frame class.
* Added separate installer for CloudViewer.
* Various bug fixes and performance improvements.

## 0.9.544

* Fixed problem with missing Boost DLLs in installation package.

## 0.9.539

* Fixed bug in reflection filter when used with perpendicular patterns.

## 0.9.537

* Fixed bug in live mode introduced in version v0.9.534.

## 0.9.534

Note that this will be one of the last releases before APIs and GUI will change name from
ShapeCrafter to Zivid (e.g., ShapeCrafterGUI will become Zivid Studio and ShapeCrafter classes will
change name to Zivid).

* Added support for perpendicular patterns (twice the amount of patterns: horizontal + vertical).
   Use enablePerpendicularPatterns() in API (or toggle it via preferences in GUI).
   IMPORTANT: Due to limitations in the current hardware, the projector exposure time must be
   increased to above approx. 33000 microseconds for this to be stable.
* Added reflection filter which can detect and remove outliers due to reflections. Note that the
   reflection filter works best when perpendicular patterns are used (see Preferences).
   Turn it on via enableReflectionFilter() in API.
* ShapeCrafterGUI: Support for LGGC (Large Gap Gray Code) error correcting pattern mode via
   Edit->Preferences, or via enableErrorCorrectingCode() in the API.
* Saturated pixels can now be detected and removed. Should improve fusion of HDR measurements.
   Enable it via Preferences in the GUI (or call enable) or call setMaskSaturated in API.
* Added function getFirmwareLabel to get firmware revision (C++ and .NET API).
* ShapeCrafterAPI: Added support for revision 2 of PCB. Note that it has a different pinning for
   e.g. the iris (hence the setProductRevision function).
* Select product revision in preferences dialog of GUI (handles differences between Rev. 0 (PoC),
   Engineering Model Rev. 1 and Engineering Model Rev. 2.
* Added setProductRevision() function to API. Please call this function before initializing
   ShapeCrafter.
* Added isConnected() functions to C++ and .NET API.
* Function initialize() now returns a boolean flag that tells whether both camera and projector
   could be successfully connected.
* Firmware update: Zivid nows starts with a 7-second splash image and then turns itself off.
   This requires a firmware update. Please download and install associated firmware:
   ZIVID_v0_9_10_ROM_v300_splash.bin.
* ShapeCrafterNET: Added Logger.setLogCallback() function. Allows clients of .NET API to receive
   log callback messages from underlying C++ API.
* ShapeCrafterNET: Improved StringSettings and StringSetting classes. Now behaves more like in C++
   (can be read/written via indexing).
* ShapeCrafterNET: Attempted to fix a bug which sometimes resulted in a crash at exit when using
   the .NET API.
* ShapeCrafterNET: Added getVersionInfoForModule() function, which returns version information
   for a given DLL.
* ShapeCrafterGUI: See version numbers of all DLLs via the Help->About dialog box.
* ShapeCrafterGUI: Support for viewing of the point cloud in monochrome color (disable RGB) via a
   button in the toolbar.
* ShapeCrafterGUI: Mesh view now updates visualization instantaneously.
* ShapeCrafterGUI: Fixed bug related to making uncalibrated measurements.
* ShapeCrafterGUI: Clicking apply in preferences dialog should now re-initialize the system (i.e.
   load new calibration files etc.).
* CloudViewer: New application for visualizing point clouds that is no longed based on PCL (not it
   is based on DirectX) Can also be associated with W3P files.
* ShapeCrafterAPI: An exception is now thrown if the camera cannot be initialized.
* Python API: Added support for controlling the iris.
* ZividCalibrationApp: New Qt-based calibration application. The application attempts to detect the
   image corners in projector/camera before images can be saved.
* Added automatic generation of package and installer from CMake.
