What's New
==========

v1.0.0 (unreleased)
-------------------

Breaking changes
~~~~~~~~~~~~~~~~

* :py:class:`.CircleDetector` and :py:class:`.CircleTracker`: removed ``detection_method``, ``marker_size``, ``threshold_window_size``, ``min_area``, ``max_area``, ``circularity``, ``convexity``, and ``inertia`` arguments.
* :py:class:`.VideoDisplay`: removed ``overlay_pupil``, ``overlay_gaze``, ``overlay_circle_marker`` and ``overlay_circle_grid`` arguments.
* :py:class:`.BaseConfigurable`: removed ``get_params`` and ``get_constructor_args`` methods (now private methods with the same name).
* :py:class:`.Packet`: removed ``get`` method.

New features
~~~~~~~~~~~~

* New :py:func:`.get_test_recording`, :py:func:`.load_gaze`, :py:func:`.load_pupils`, :py:func:`.load_markers`, :py:func:`.load_motion`, :py:func:`.merge_pupils` functions.
* New :py:class:`.PupilReader` and :py:class:`.MarkerReader` classes.
* New :py:meth:`.Calibration.batch_run`, :py:meth:`.CircleDetector.batch_run`, :py:meth:`.GazeMapper.batch_run` and :py:meth:`.PupilDetector.batch_run` methods.
* :py:class:`.CamParamEstimator`: new ``grid_scale`` argument.
* :py:class:`.VideoReader`: new ``undistort`` argument.
* :py:class:`.PupilDetector`: new ``resolution`` and ``focal_length`` arguments.
* :py:class:`.Pipeline`: can now be used as a context manager.
* :py:meth:`.VideoReader.read_frames`: New ``raw``, ``return_timestamp`` and ``return_index`` arguments


v0.5.0 (June 23rd, 2021)
------------------------

Breaking changes
~~~~~~~~~~~~~~~~
* The test recording in the examples is not part of the package anymore but
  instead downloaded and cached through the ``pooch`` library.
  This means that ``TEST_RECORDING`` is not working anymore and is replaced
  by ``get_test_recording``.

Bug fixes & improvements
~~~~~~~~~~~~~~~~~~~~~~~~
* Updated the default test recording to contain post-hoc gaze mapped by
  Pupil Player v3.


v0.4.1 (February 22nd, 2021)
----------------------------

Bug fixes & improvements
~~~~~~~~~~~~~~~~~~~~~~~~
* Fixed ``exposure_mode="auto"`` not working in ``VideoDeviceUVC``.
* Fixed extrinsics not being saved by ``CamParamEstimator``.
* Added ``available_controls`` attribute to ``VideoDeviceUVC`` that returns
  legal values for UVC controls and ``controls`` can be set by assigning
  a mapping from control names to new values.


v0.4.0 (January 28th, 2021)
---------------------------

New features
~~~~~~~~~~~~

* Package is now available via conda from our own channel.
* Devices, streams and processes can now be used as context managers which
  starts and stops them automatically. This makes the ``Session`` context
  manager obsolete, which is being deprecated.
* New ``VideoFileSyncer`` process for syncing video streamed from files.

Bug fixes & improvements
~~~~~~~~~~~~~~~~~~~~~~~~
* Fixed ``VideoDeviceUVC.get_frame_and_timestamp`` not working in Jupyter
  notebook.
* Fixed bug in ``load_dataset`` for accelerometer and gyroscope streams.


v0.3.0 (December 8th, 2020)
---------------------------

New features
~~~~~~~~~~~~

* Key presses from ``VideoDisplay`` windows are broadcast and stored in the
  ``keypresses`` deque by the manager.
* ``CircleGridDetector`` now accepts a ``scale`` parameter to speed up
  detection at the expense of accuracy for high-resolution streams.
* ``CamParamEstimator`` now shows a persistent overlay of previously detected
  circle patterns for the stream it is attached to.
* Processes and pipelines have access to their parent stream via the
  ``context`` attribute, if applicable.
* Processes can add display hooks to the packet that are picked up by
  ``VideoDisplay``.
* New ``load_pldata`` and ``save_pldata`` top-level methods.

Bug fixes & improvements
~~~~~~~~~~~~~~~~~~~~~~~~

* Fixed several bugs in ``CamParamEstimator`` regarding extrinsics estimation.
* Additionally save ``info.player.json`` at the start of the recording.
* Support loading source timestamps from .pldata files for video streams.
* Don't reopen ``VideoDisplay`` windows closed by user.


v0.2.1 (October 23rd, 2020)
---------------------------

Bug fixes & improvements
~~~~~~~~~~~~~~~~~~~~~~~~

* Set default exposure mode of ``VideoDeviceUVC`` to ``"auto"``.
* Added ``max_width`` parameter to ``VideoDisplay``.
* Disabled showing plots in Validation class.
* Fixed loading of broken recordings (with missing timestamps or corrupt
  pldata files).
* Fixed bug when loading 3D gaze with only binocular data.
* Fixed support for configs with ``device_uid=None``.


v0.2.0 (October 6th, 2020)
--------------------------

New features
~~~~~~~~~~~~

* Loaded gaze now contains the eye data that produced the mapping (left, right,
  both eyes) as well as the 3D eye centers and gaze normals.
* The ``load_raw_frame``, ``load_frame``, ``read_frames`` and ``load_dataset``
  methods of ``VideoReader`` and ``OpticalFlowReader`` now accept both
  timestamps and indexes as parameters.
* Streams can be started even when the underlying devices aren't connected
  with ``allow_failure=True``.
* Added ``scale``, ``detection_method`` and ``marker_size`` parameters to
  ``CircleDetector`` to allow more fine-grained control over detection.
  ``detection_method="vedb"`` is a new detection method that is less stable
  but significantly faster than the default.
* Added a ``Validation`` process that extends ``Calibration``, adding plots
  showing the coverage of the world camera FOV by the calibration marker and
  of the eye camera FOV by the pupils.
* Added a new example ``validate.py`` that demonstrates usage of the new
  circle detection method and the validation.
* Added experimental support for a ``PyAV``-based video encoder
  (``VideoEncoderAV``).
* Added ``nan_format`` parameter to ``StreamManager.format_status``.

Bug fixes
~~~~~~~~~

* Fixed devices not being able to shut down when in restart loop.
* Fixed blank window opening when starting a ``VideoDisplay`` process with
  ``paused=True``.


v0.1.0 (June 3rd, 2020)
-----------------------

Mostly feature-complete release that supports streaming, recording and
processing of Pupil Core streams as well as reading of recordings.