diff options
author | Jay Berkenbilt <ejb@ql.org> | 2018-01-13 20:24:09 +0100 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2018-01-14 01:49:42 +0100 |
commit | ec0087e3ce2ae7554098b3506378ca3eb9d87795 (patch) | |
tree | 27c7535c74371a438d924f7ca4630ec8c5668112 /libqpdf | |
parent | 53971d50be39448c980d842a1fe1f525b4cee597 (diff) | |
download | qpdf-ec0087e3ce2ae7554098b3506378ca3eb9d87795.tar.zst |
Support TIFF Predictor (fixes #171)
Diffstat (limited to 'libqpdf')
-rw-r--r-- | libqpdf/QPDF_Stream.cc | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/libqpdf/QPDF_Stream.cc b/libqpdf/QPDF_Stream.cc index 351df043..89b6b5a9 100644 --- a/libqpdf/QPDF_Stream.cc +++ b/libqpdf/QPDF_Stream.cc @@ -4,6 +4,7 @@ #include <qpdf/Pipeline.hh> #include <qpdf/Pl_Flate.hh> #include <qpdf/Pl_PNGFilter.hh> +#include <qpdf/Pl_TIFFPredictor.hh> #include <qpdf/Pl_RC4.hh> #include <qpdf/Pl_Buffer.hh> #include <qpdf/Pl_ASCII85Decoder.hh> @@ -133,7 +134,7 @@ QPDF_Stream::understandDecodeParams( if (predictor_obj.isInteger()) { predictor = predictor_obj.getIntValue(); - if (! ((predictor == 1) || + if (! ((predictor == 1) || (predictor == 2) || ((predictor >= 10) && (predictor <= 15)))) { filterable = false; @@ -459,14 +460,24 @@ QPDF_Stream::pipeStreamData(Pipeline* pipeline, { std::string const& filter = *iter; - if (((filter == "/FlateDecode") || (filter == "/LZWDecode")) && - ((predictor >= 10) && (predictor <= 15))) + if ((filter == "/FlateDecode") || (filter == "/LZWDecode")) { - QTC::TC("qpdf", "QPDF_Stream PNG filter"); - pipeline = new Pl_PNGFilter( - "png decode", pipeline, Pl_PNGFilter::a_decode, - columns, colors, bits_per_component); - to_delete.push_back(pipeline); + if ((predictor >= 10) && (predictor <= 15)) + { + QTC::TC("qpdf", "QPDF_Stream PNG filter"); + pipeline = new Pl_PNGFilter( + "png decode", pipeline, Pl_PNGFilter::a_decode, + columns, colors, bits_per_component); + to_delete.push_back(pipeline); + } + else if (predictor == 2) + { + QTC::TC("qpdf", "QPDF_Stream TIFF predictor"); + pipeline = new Pl_TIFFPredictor( + "tiff decode", pipeline, Pl_TIFFPredictor::a_decode, + columns, colors, bits_per_component); + to_delete.push_back(pipeline); + } } if (filter == "/Crypt") |