This release contains several major improvements, as follows:
- The core codestream machinery has been augmented with the ability to schedule tile opening and closing operations to be performed as background tasks. This complements the existing background parsing and creation of J2K packet data (containers of code-block bit-streams) so that both tiled and untiled codestreams can now be processed without any (or many, depending on the structure) critical section locks. This substantially enhances processing throughput for tiled workloads in multi-threaded applications. The “kdu_buffered_compress” and “kdu_buffered_expand” demo apps provide the most efficient demonstrations of tiled codestream processing, exploiting these newly introduced features — for comrpession, be sure to use incremental flushing (-flush_period) to realize maximum throughput.
- The `kdu_stripe_compressor’ and `kdu_stripe_decompressor’ high level API’s and their internal implementation have been improved to yield dramatically higher throughput for tiled compression/decompression workloads in multi-threaded environments. These interfaces are now by far the preferred way to perform compression/decompression tasks (apart from interactive rendering) unless you really know what you are doing with the lower level API’s such as `kdu_multi_analysis’ and `kdu_multi_synthesis’.
- A new `ORGtpart_interrupts’ coding parameter attribute has been added to the core system, which is very useful when compressing tiled imagery with incremental codestream flushing. In multi-threaded settings, this type of application used to cause uncertain numbers of tile-parts to be generated which could prove problematic when generating tile-length markers for random access (ORGgen_tlm). Now the system can provide hard guarantees on the number of tile-parts generated, even when flushing the data in an uncertain order due to the interaction between background incremental flushing and heavily multi-threaded content generation. This new parameter attribute allows you to control these guarantees and their potential impact on delayed flushing of content. If your application involves tiled compression, definitely read the description of these attribute and see the relevant usage examples for “kdu_buffered_compress” in “Usage_Examples.txt”.
- The JPIP client now issues cache model manipulation statements (where necessary) in such a way that there is no risk of very long requests being dumped by a server that may be protecting itself against DOS attacks by limiting the request length.
- Major changes have been introduced into the JPIP client’s internal flow regulation machinery that is used for HTTP-only transported requests as well as timed requests that are generated when browsing video and other animated content. This second application is the one that is particularly sensitive to the flow regulation algorithm since timing is everything where an animation is to be browsed without losing responsiveness in the interactive experience. The changes have been tested on long distance high latency channels with very good results. Changes have also been introduced into the `kdu_region_animator’ object’s implementation, again to improve the performance of interactive video/animation browsing via JPIP.
- There have been a number of key bug fixes and security fixes that should be of interest to all licensees. The core multi-threaded sub-system previously had a weakness that could see deteriorating performance over time that has now been fixed. Java applications that provided their own compressed data source in Java could have suffered from a local reference growth problem that has been fixed. For a full list of bug fixes and improvements, licensees should consult the usual “Updates.txt” file. We have our very large base of licensees to thank for uncovering many of the issues that have been fixed here, through a great diversity of applications. We are not aware of any bugs or vulnerabilities that have been reported and not fixed by this release.