Commit 99f3a7b5a33a31f4d519918b6ad2ca0b5034334f
1 parent
634d9249
In QPDFWriter::writeLinearized remember whether streams are filtered
Showing
1 changed file
with
13 additions
and
7 deletions
libqpdf/QPDFWriter.cc
| @@ -2544,14 +2544,20 @@ QPDFWriter::writeLinearized() | @@ -2544,14 +2544,20 @@ QPDFWriter::writeLinearized() | ||
| 2544 | { | 2544 | { |
| 2545 | // Optimize file and enqueue objects in order | 2545 | // Optimize file and enqueue objects in order |
| 2546 | 2546 | ||
| 2547 | - auto skip_stream_parameters = [this](QPDFObjectHandle& stream) { | ||
| 2548 | - bool compress_stream; | ||
| 2549 | - bool is_metadata; | ||
| 2550 | - if (willFilterStream(stream, compress_stream, is_metadata, nullptr)) { | ||
| 2551 | - return 2; | ||
| 2552 | - } else { | ||
| 2553 | - return 1; | 2547 | + std::map<int, int> stream_cache; |
| 2548 | + | ||
| 2549 | + auto skip_stream_parameters = [this, &stream_cache](QPDFObjectHandle& stream) { | ||
| 2550 | + auto& result = stream_cache[stream.getObjectID()]; | ||
| 2551 | + if (result == 0) { | ||
| 2552 | + bool compress_stream; | ||
| 2553 | + bool is_metadata; | ||
| 2554 | + if (willFilterStream(stream, compress_stream, is_metadata, nullptr)) { | ||
| 2555 | + result = 2; | ||
| 2556 | + } else { | ||
| 2557 | + result = 1; | ||
| 2558 | + } | ||
| 2554 | } | 2559 | } |
| 2560 | + return result; | ||
| 2555 | }; | 2561 | }; |
| 2556 | 2562 | ||
| 2557 | QPDF::Writer::optimize(m->pdf, m->obj, skip_stream_parameters); | 2563 | QPDF::Writer::optimize(m->pdf, m->obj, skip_stream_parameters); |