Commit 99f3a7b5a33a31f4d519918b6ad2ca0b5034334f

Authored by m-holger
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);