Commit c01fc3c2ae3a6487d310f807bc25499d5d517c61
1 parent
2e8b5f29
In Pl_TIFFPredictor::processRow avoid repeated vector allocation
Also, modernize for loop.
Showing
2 changed files
with
10 additions
and
8 deletions
libqpdf/Pl_TIFFPredictor.cc
| ... | ... | @@ -7,6 +7,7 @@ |
| 7 | 7 | #include <climits> |
| 8 | 8 | #include <stdexcept> |
| 9 | 9 | #include <vector> |
| 10 | +#include <iostream> | |
| 10 | 11 | |
| 11 | 12 | Pl_TIFFPredictor::Pl_TIFFPredictor( |
| 12 | 13 | char const* identifier, |
| ... | ... | @@ -60,23 +61,23 @@ Pl_TIFFPredictor::processRow() |
| 60 | 61 | { |
| 61 | 62 | QTC::TC("libtests", "Pl_TIFFPredictor processRow", (action == a_decode ? 0 : 1)); |
| 62 | 63 | BitWriter bw(p_next); |
| 63 | - BitStream in(this->cur_row.data(), this->bytes_per_row); | |
| 64 | - std::vector<long long> prev; | |
| 64 | + BitStream in(cur_row.data(), cur_row.size()); | |
| 65 | + previous.clear(); | |
| 65 | 66 | for (unsigned int i = 0; i < this->samples_per_pixel; ++i) { |
| 66 | 67 | long long sample = in.getBitsSigned(this->bits_per_sample); |
| 67 | 68 | bw.writeBitsSigned(sample, this->bits_per_sample); |
| 68 | - prev.push_back(sample); | |
| 69 | + previous.push_back(sample); | |
| 69 | 70 | } |
| 70 | 71 | for (unsigned int col = 1; col < this->columns; ++col) { |
| 71 | - for (unsigned int i = 0; i < this->samples_per_pixel; ++i) { | |
| 72 | + for (auto& prev : previous) { | |
| 72 | 73 | long long sample = in.getBitsSigned(this->bits_per_sample); |
| 73 | 74 | long long new_sample = sample; |
| 74 | 75 | if (action == a_encode) { |
| 75 | - new_sample -= prev[i]; | |
| 76 | - prev[i] = sample; | |
| 76 | + new_sample -= prev; | |
| 77 | + prev = sample; | |
| 77 | 78 | } else { |
| 78 | - new_sample += prev[i]; | |
| 79 | - prev[i] = new_sample; | |
| 79 | + new_sample += prev; | |
| 80 | + prev = new_sample; | |
| 80 | 81 | } |
| 81 | 82 | bw.writeBitsSigned(new_sample, this->bits_per_sample); |
| 82 | 83 | } | ... | ... |
libqpdf/qpdf/Pl_TIFFPredictor.hh