-
Notifications
You must be signed in to change notification settings - Fork 20
Description
It looks possible to write completely standard PNG files that can be optionally decompressed across multiple threads:
https://twitter.com/richgel999/status/1470846966276018187
To do this, you would use multiple IDAT's, force a flush to a byte boundary at the end of each IDAT using a 0 or 1 byte uncompressed Deflate block (if necessary - 1/8th of the time it shouldn't be), and make sure the LZ matches never cross IDAT block boundaries. A special standard ancillary extension chunk (which would be ignored by existing readers) would hint to new decoders that the file can be decoded in parallel.
The filtering can also be done in parallel with decompression, using a simple pipeline.
This would significantly reduce the wall-clock time involved in reading large (8k-32k) PNG files on modern machines.