Commit c01fc3c2ae3a6487d310f807bc25499d5d517c61

Authored by m-holger
1 parent 2e8b5f29

In Pl_TIFFPredictor::processRow avoid repeated vector allocation

Also, modernize for loop.
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
... ... @@ -34,6 +34,7 @@ class Pl_TIFFPredictor: public Pipeline
34 34 unsigned int samples_per_pixel;
35 35 unsigned int bits_per_sample;
36 36 std::vector<unsigned char> cur_row;
  37 + std::vector<long long> previous;
37 38 Pipeline* p_next;
38 39 };
39 40  
... ...