aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf
diff options
context:
space:
mode:
authorm-holger <m-holger@kubitscheck.org>2024-01-26 20:13:34 +0100
committerm-holger <m-holger@kubitscheck.org>2024-01-26 21:51:29 +0100
commitc01fc3c2ae3a6487d310f807bc25499d5d517c61 (patch)
tree46276afe33458bc906a46e4bf7658211a8b3a928 /libqpdf
parent2e8b5f290c03bd4cd67f9240cb1fff3122e0b12c (diff)
downloadqpdf-c01fc3c2ae3a6487d310f807bc25499d5d517c61.tar.zst
In Pl_TIFFPredictor::processRow avoid repeated vector allocation
Also, modernize for loop.
Diffstat (limited to 'libqpdf')
-rw-r--r--libqpdf/Pl_TIFFPredictor.cc17
-rw-r--r--libqpdf/qpdf/Pl_TIFFPredictor.hh1
2 files changed, 10 insertions, 8 deletions
diff --git a/libqpdf/Pl_TIFFPredictor.cc b/libqpdf/Pl_TIFFPredictor.cc
index 5454cfe6..8820f4bc 100644
--- a/libqpdf/Pl_TIFFPredictor.cc
+++ b/libqpdf/Pl_TIFFPredictor.cc
@@ -7,6 +7,7 @@
#include <climits>
#include <stdexcept>
#include <vector>
+#include <iostream>
Pl_TIFFPredictor::Pl_TIFFPredictor(
char const* identifier,
@@ -60,23 +61,23 @@ Pl_TIFFPredictor::processRow()
{
QTC::TC("libtests", "Pl_TIFFPredictor processRow", (action == a_decode ? 0 : 1));
BitWriter bw(p_next);
- BitStream in(this->cur_row.data(), this->bytes_per_row);
- std::vector<long long> prev;
+ BitStream in(cur_row.data(), cur_row.size());
+ previous.clear();
for (unsigned int i = 0; i < this->samples_per_pixel; ++i) {
long long sample = in.getBitsSigned(this->bits_per_sample);
bw.writeBitsSigned(sample, this->bits_per_sample);
- prev.push_back(sample);
+ previous.push_back(sample);
}
for (unsigned int col = 1; col < this->columns; ++col) {
- for (unsigned int i = 0; i < this->samples_per_pixel; ++i) {
+ for (auto& prev : previous) {
long long sample = in.getBitsSigned(this->bits_per_sample);
long long new_sample = sample;
if (action == a_encode) {
- new_sample -= prev[i];
- prev[i] = sample;
+ new_sample -= prev;
+ prev = sample;
} else {
- new_sample += prev[i];
- prev[i] = new_sample;
+ new_sample += prev;
+ prev = new_sample;
}
bw.writeBitsSigned(new_sample, this->bits_per_sample);
}
diff --git a/libqpdf/qpdf/Pl_TIFFPredictor.hh b/libqpdf/qpdf/Pl_TIFFPredictor.hh
index 6557e15c..4579ba1f 100644
--- a/libqpdf/qpdf/Pl_TIFFPredictor.hh
+++ b/libqpdf/qpdf/Pl_TIFFPredictor.hh
@@ -34,6 +34,7 @@ class Pl_TIFFPredictor: public Pipeline
unsigned int samples_per_pixel;
unsigned int bits_per_sample;
std::vector<unsigned char> cur_row;
+ std::vector<long long> previous;
Pipeline* p_next;
};