From ec0087e3ce2ae7554098b3506378ca3eb9d87795 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Sat, 13 Jan 2018 14:24:09 -0500 Subject: Support TIFF Predictor (fixes #171) --- libqpdf/QPDF_Stream.cc | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) (limited to 'libqpdf') 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 #include #include +#include #include #include #include @@ -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") -- cgit v1.2.3-70-g09d2