diff --git a/ChangeLog b/ChangeLog index 96fdacd4..65b62352 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,21 @@ +2017-12-25 Jay Berkenbilt + + * Implement remaining PNG filters for decode. Prior versions could + decode only the "up" filter. Now all PNG filters (sub, up, + average, Paeth, optimal) are supported for decoding. Thanks to + Tobias Hoffmann for providing a test PDF file that has images with + all PNG filters along with different numbers of bits per sample + and samples per pixel, and thanks to Casey Rojas for providing + implementations of the remaining PNG filters. + + The implementation of the remaining PNG filters changed the + interface to the private Pl_PNGFilter class, but this class's + header file is not in the installation, and there is no public + interface to the class. Within the library, the class is never + allocated on the stack; it is only ever dynamically allocated. As + such, this does not actually break binary compatibility of the + library. + 2017-09-15 Jay Berkenbilt * 7.0.0: release diff --git a/TODO b/TODO index b2180762..eb89388c 100644 --- a/TODO +++ b/TODO @@ -53,8 +53,6 @@ I find it useful to make reference to them in this list filtering doesn't ever try to do this. QPDFWriter should be checked carefully too. See also bugs/private/from-email-663916/ - * Implement remaining PNG filters. See https://github.com/qpdf/qpdf/pull/166 - * Form flattening: ~/tmp/qtmp/form-flattening-email/. Distill this into notes along with stuff in qpdf email box. @@ -236,12 +234,6 @@ Index: QPDFWriter.cc viewing software silently ignores objects of this type, so this is probably not a big deal. - * Pl_PNGFilter is only partially implemented. If we ever decoded - images, we'd have to finish implementing it along with the other - filter decode parameters and types. For just handling xref - streams, there's really no need as it wouldn't make sense to use - any kind of predictor other than 12 (PNG UP filter). - * If we ever want to have check mode check the integrity of the free list, this can be done by looking at the code from prior to the object stream support of 4/5/2008. It's in an if (0) block and