Commit 172ab474ab7ac5f6f6a5c0b73e53618ca997270b
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 |