summaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDF_Stream.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2018-01-13 20:24:09 +0100
committerJay Berkenbilt <ejb@ql.org>2018-01-14 01:49:42 +0100
commitec0087e3ce2ae7554098b3506378ca3eb9d87795 (patch)
tree27c7535c74371a438d924f7ca4630ec8c5668112 /libqpdf/QPDF_Stream.cc
parent53971d50be39448c980d842a1fe1f525b4cee597 (diff)
downloadqpdf-ec0087e3ce2ae7554098b3506378ca3eb9d87795.tar.zst
Support TIFF Predictor (fixes #171)
Diffstat (limited to 'libqpdf/QPDF_Stream.cc')
-rw-r--r--libqpdf/QPDF_Stream.cc27
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")