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 1519 std::tuple<const bool, const bool, const bool>
1520 1520 QPDFWriter::Members::will_filter_stream(QPDFObjectHandle stream, std::string* stream_data)
1521 1521 {
1522   - bool compress_stream = false;
1523 1522 const bool is_root_metadata = stream.isRootMetadata();
1524   -
1525   - Dictionary stream_dict = stream.getDict();
1526   -
1527 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 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 1530 if (compress_streams) {
1534 1531 // Don't filter if the stream is already compressed with FlateDecode. This way we don't
1535 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 1540 }
1544 1541 if (is_root_metadata && (!encryption || !encryption->getEncryptMetadata())) {
1545 1542 filter = true;
1546   - compress_stream = false;
1547   - uncompress = true;
  1543 + decode_level = qpdf_dl_all;
1548 1544 } else if (normalize_content && normalized_streams.contains(stream)) {
1549   - normalize = true;
  1545 + encode_flags = qpdf_ef_normalize;
1550 1546 filter = true;
1551 1547 } else if (filter && compress_streams) {
1552   - compress_stream = true;
  1548 + encode_flags = qpdf_ef_compress;
1553 1549 }
1554 1550 }
1555 1551  
1556 1552 // Disable compression for empty streams to improve compatibility
1557 1553 if (Integer(stream_dict["/Length"]) == 0) {
1558 1554 filter = true;
1559   - compress_stream = false;
  1555 + encode_flags = 0;
1560 1556 }
1561 1557  
1562 1558 bool filtered = false;
... ... @@ -1567,10 +1563,8 @@ QPDFWriter::Members::will_filter_stream(QPDFObjectHandle stream, std::string* st
1567 1563 try {
1568 1564 filtered = stream.pipeStreamData(
1569 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 1568 false,
1575 1569 first_attempt);
1576 1570 if (filter && !filtered) {
... ... @@ -1598,7 +1592,7 @@ QPDFWriter::Members::will_filter_stream(QPDFObjectHandle stream, std::string* st
1598 1592 if (!filtered) {
1599 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 1598 void
... ...