Commit 172ab474ab7ac5f6f6a5c0b73e53618ca997270b

Authored by m-holger
1 parent edefc896

Refactor `QPDFWriter::Members::will_filter_stream`: consolidate decoding and enc…

…oding flags, streamline filter logic, and simplify condition handling.
Showing 1 changed file with 11 additions and 17 deletions
libqpdf/QPDFWriter.cc
@@ -1519,17 +1519,14 @@ QPDFWriter::Members::will_filter_stream(QPDFObjectHandle stream) @@ -1519,17 +1519,14 @@ QPDFWriter::Members::will_filter_stream(QPDFObjectHandle stream)
1519 std::tuple<const bool, const bool, const bool> 1519 std::tuple<const bool, const bool, const bool>
1520 QPDFWriter::Members::will_filter_stream(QPDFObjectHandle stream, std::string* stream_data) 1520 QPDFWriter::Members::will_filter_stream(QPDFObjectHandle stream, std::string* stream_data)
1521 { 1521 {
1522 - bool compress_stream = false;  
1523 const bool is_root_metadata = stream.isRootMetadata(); 1522 const bool is_root_metadata = stream.isRootMetadata();
1524 -  
1525 - Dictionary stream_dict = stream.getDict();  
1526 -  
1527 bool filter = false; 1523 bool filter = false;
1528 - bool normalize = false;  
1529 - bool uncompress = false; 1524 + auto decode_level = stream_decode_level;
  1525 + int encode_flags = 0;
  1526 + Dictionary stream_dict = stream.getDict();
1530 1527
1531 if (stream.getFilterOnWrite()) { 1528 if (stream.getFilterOnWrite()) {
1532 - filter = stream.isDataModified() || compress_streams || stream_decode_level != qpdf_dl_none; 1529 + filter = stream.isDataModified() || compress_streams || decode_level != qpdf_dl_none;
1533 if (compress_streams) { 1530 if (compress_streams) {
1534 // Don't filter if the stream is already compressed with FlateDecode. This way we don't 1531 // Don't filter if the stream is already compressed with FlateDecode. This way we don't
1535 // make it worse if the original file used a better Flate algorithm, and we don't spend 1532 // make it worse if the original file used a better Flate algorithm, and we don't spend
@@ -1543,20 +1540,19 @@ QPDFWriter::Members::will_filter_stream(QPDFObjectHandle stream, std::string* st @@ -1543,20 +1540,19 @@ QPDFWriter::Members::will_filter_stream(QPDFObjectHandle stream, std::string* st
1543 } 1540 }
1544 if (is_root_metadata && (!encryption || !encryption->getEncryptMetadata())) { 1541 if (is_root_metadata && (!encryption || !encryption->getEncryptMetadata())) {
1545 filter = true; 1542 filter = true;
1546 - compress_stream = false;  
1547 - uncompress = true; 1543 + decode_level = qpdf_dl_all;
1548 } else if (normalize_content && normalized_streams.contains(stream)) { 1544 } else if (normalize_content && normalized_streams.contains(stream)) {
1549 - normalize = true; 1545 + encode_flags = qpdf_ef_normalize;
1550 filter = true; 1546 filter = true;
1551 } else if (filter && compress_streams) { 1547 } else if (filter && compress_streams) {
1552 - compress_stream = true; 1548 + encode_flags = qpdf_ef_compress;
1553 } 1549 }
1554 } 1550 }
1555 1551
1556 // Disable compression for empty streams to improve compatibility 1552 // Disable compression for empty streams to improve compatibility
1557 if (Integer(stream_dict["/Length"]) == 0) { 1553 if (Integer(stream_dict["/Length"]) == 0) {
1558 filter = true; 1554 filter = true;
1559 - compress_stream = false; 1555 + encode_flags = 0;
1560 } 1556 }
1561 1557
1562 bool filtered = false; 1558 bool filtered = false;
@@ -1567,10 +1563,8 @@ QPDFWriter::Members::will_filter_stream(QPDFObjectHandle stream, std::string* st @@ -1567,10 +1563,8 @@ QPDFWriter::Members::will_filter_stream(QPDFObjectHandle stream, std::string* st
1567 try { 1563 try {
1568 filtered = stream.pipeStreamData( 1564 filtered = stream.pipeStreamData(
1569 pipeline, 1565 pipeline,
1570 - !filter ? 0  
1571 - : ((normalize ? qpdf_ef_normalize : 0) |  
1572 - (compress_stream ? qpdf_ef_compress : 0)),  
1573 - !filter ? qpdf_dl_none : (uncompress ? qpdf_dl_all : stream_decode_level), 1566 + filter ? encode_flags : 0,
  1567 + filter ? decode_level : qpdf_dl_none,
1574 false, 1568 false,
1575 first_attempt); 1569 first_attempt);
1576 if (filter && !filtered) { 1570 if (filter && !filtered) {
@@ -1598,7 +1592,7 @@ QPDFWriter::Members::will_filter_stream(QPDFObjectHandle stream, std::string* st @@ -1598,7 +1592,7 @@ QPDFWriter::Members::will_filter_stream(QPDFObjectHandle stream, std::string* st
1598 if (!filtered) { 1592 if (!filtered) {
1599 return {false, false, is_root_metadata}; 1593 return {false, false, is_root_metadata};
1600 } 1594 }
1601 - return {filtered, compress_stream, is_root_metadata}; 1595 + return {filtered, encode_flags & qpdf_ef_compress, is_root_metadata};
1602 } 1596 }
1603 1597
1604 void 1598 void