Release version 1.2.2 - Release

New:
	- Support for thermal raw data header v2


Release version 1.2.1 - Release

Changes:
	- Fixes Certificate verification depth. Make use of the default depth.
	- Fixed linkage against the provided openssl library (version 1.1.1k)
	- Updated the readme file 
	- Fixed stream parser in MxPEG splitter module
	- Makefiles: Set SHELL explicitly to bash
	- Updated the ssl documentation for connecting to the camera using encrypted communication
	- Added some examples of configurations for creating root certificates, certificates or private keys


Release version 1.2.0 - Release

New:
	- Added support for SSL/HTTPS protected streaming
		- TLS relevant settings can be passed as JSON string to the library
		- Added a sample config file for TLS encryption (doc/tls-config-file.json)
		- Added openssl pre-compiled library in Linux and Windows based release packages
		- Please also see doc/LICENSE_OPENSSL
	- Added export (fast download) support
		- Added a new library function to activate stream export from the camera
		- Added output format MxPEG in the client library (avoids client side decoding)
		- Added a new sample application to demonstrate export mode
	- Added support to store and retrieve data in/from the cameras eventrecoder database
		- Added eventrecorder() low level command to read and write json data to/from 
		  the eventrecoder database
		- Added a documentation for the new Eventrecorder API (doc/ReadMe_Eventrecorder_Database.txt)
		- Limitation: A new camera firmware is required to use these functions. The
		  feature will be part of one of the next firmware releases (7.3.1.x or 7.3.2.x,
		  please check the release notes of the firmware)
	- Added MxPEG splitter library function and sample application
	  The splitter allows an application to split an existing (local) mxg file into
	  separate frames. These can be passed to the MxPEG Decoder that is also included
	  in the package.
	  Note: On Windows the splitter sample shows some errors when used in "Debug" mode. For
	  now please use the splitter sample only in "Release" build mode.
	- Added nlohmann json library (MIT-License) The library can be used to (de)serialize
	  string from/into a json object structure (See https://json.nlohmann.me/)
	- Please also see doc/LICENSE_JSON

Changes:
	- Added log callback to allow custom logger modules
	- Changed API function arguments to from std::string to const char *
	- Added parameter "event_filter" to alarmlist command


Release version 1.1.0-7 - Maintenance release

Changes:
	- Deprecated function play(timestamp)
	- Added function seek() to position the player on before issuing a play() command
	- Added function subscribe() to subscribe to camera events
	- Added function alarmlist() to load list of alarm events from the camera
	- Added function to ping() camera through eventstream protocol
	- Added new method variants that are based on const char * instead of std::string
	  to wour around memory corruption problems on Windows

Fixes: 
	- Dropping thermal raw data if verification check fails


Release version 1.1.0-6 - Maintenance release

Fixes:
	- No "Space left in recv buffer" issue


Release version 1.1.0-5 - Maintenance release

New:
	- Added access to thermal information (FFC counter).

Changes:
	- Renamed function gain() of class MX_ThermalRawData to resolution().
	  Returns the resolution of an advanced radiometry thermal sensor (high or low).


Release version 1.1.0-4 - Maintenance release

- Fixes:
	- Linux versions are now compiled with -fPIC


Release version 1.1.0 - Release

New:
	- Added support to request and receive thermal raw data from cameras with thermal sensor.
	  Starting with Firmware 5.2.0 cameras with thermal sensor can include the raw data of the sensor
	  into the video stream. The SDK extracts this data and passes it to the client application.
	  If a TR sensor (with advanced radiometry support) is used and "Linear Mode" is activated, the raw
	  data can also be converted to absolute temperatures. The raw data is compressed using the lz4
	  compression algorithm before transmission. The SDK automatically decompresses the data using the lz4 library.
    
Changes:
	- Removed constructors from the SDK interface
	- Added a factory class to create SDK instances. Handler classes are now always passed as shared_ptr
	  objects to the SDK. Passing raw pointers is no longer supported.
	- API updates to use unique_ptr when passing objects to the handler classes.
	- API header cleanup. Removed references to internal SDK classes and data structures.
	- Included parts of lz4-1-8.2 (https://github.com/lz4/lz4) to decompress thermal raw data. See LICENSE_LZ4
	- New API to access the internal MxPEG decoder. Using this API locally available MxPEG frames can be decoded.


Release version 1.0.1 - Maintenance release

New:
	- The audio backchannel now also supports sending aLaw encoded audio data to the camera (speaker).
	  The function sendAudioStart() now takes a parameter to specify the codec of audio data that will
	  be sent to the camera. Supported encodings are:
		- PCM16 (eac_pcm), 1 channel, sample rate 16000
		- aLaw (eac_alaw), 1 channel sample rate 8000
	- The function sendAudio() also supports the two above encodings for
	  udio payload. Automatic recoding between aLaw <-> PCM16 is done as
	  required by the combination of "send format" and "payload format".
	- Countermeasures for high memory load (in asynchronous mode)
	  If the system cannot process the incoming data fast enough, the SDK will at
	  some point start dropping data to avoid memory overflows in its input queues. To do this
	  it uses a two step approach: First the SDK will start dropping whole MxPEG frames before they
	  are passed to the decoder, audio and status information will not be affected by this. If that
	  is not sufficient to cope with the incoming data stream, the SDK will also drop raw network
	  packages as they are received, without even analyzing them.
	  You can use new statistics function to get the current queue sizes and drop counters. This way
	  the application can detect if the system is not capable of processing all data that is sent
	  by the camera. This allows the application to reconfigure the streaming session and reduce
	  frame rate or image resolution.
	- Added a sample application that demonstrates the use of the sendAudio() API
	- Added show() command in SDK API. Use this command to skip through recordings frame by frame.
        
Changes:
	- Updated player sample
		- Added support for the show() command
		- Displaying camera name/ip and recording timestamp of current frame as window title
	- Added default parameters for constructor of MxPEG_AudioFormat()
	- Changed MxPEG_SDK API: Added an additional parameter to the MxPEG_SDK() constructor
	  Using this parameter, the client application can implement/provide its
	  own network layer. This way the client can control the low-level network communication.
	  Using this mechanism, it is possible to add SSL encryption. A simple example - without
	  encryption - was added to the player example.
	  By default, the SDK uses a polling approach to fetch new data each time the main loop is called.
	  Using a custom network layer, you can switch this to an asynchronous mode. The player example
	  also shows how to do this.
	- Changed SDK loop function return value: This is mainly useful if the network module operates in
	  asynchronous mode (see above). Returns true if there is more data in the input queues,
	  false if the input queues are empty. Use this to decide whether to call loop right after it
	  returns or to add a little delay before calling it again.
	- Added new API Function MxPEG_SDK::get_session_statistics() to retrieve internal statistics of the current session.
	- Added MxPEG_SDK API constructor using shared pointers
	  The objects passed to the MxPEG_SDK constructor will no longer be deleted inside
	  the SDK. The life cycle of these objects is now managed through std::shared_ptr(). See player example.
	- Added copy constructor in MxPEG_AudioFormat
	- Changed semantic of AudioSink::doGetTargetFormat()
	  If this function returns a null pointer, pass through mode will be
	  activated and all audio data from the camera will be passed to the sink without any processing.
	  The consume function of the sink needs to be able to handle mid-stream changes of the audio format.
	- Changed internal structures to support multiple instances of the SDK in one process.

Fixes:
	- Data corruption in MxPEG_StreamInfo class
	- Stream parsing error in MxPEG decoder
	- Connection problem in guest mode (connecting without credentials)
	- Fixed MxPEG_SDK_API::setAudioMode()
	- Replaced all assert statements in the SDK with std::runtime_error() exceptions
	- Broken audio packages when sending audio to the camera

Release Version 1.0.0 - Initial release
