Browse Source

sns: filter resize should reset internal state

dev
Maxim Prokhorov 3 months ago
parent
commit
97921403d0
5 changed files with 49 additions and 16 deletions
  1. +9
    -1
      code/espurna/filters/LastFilter.h
  2. +9
    -1
      code/espurna/filters/MaxFilter.h
  3. +12
    -11
      code/espurna/filters/MedianFilter.h
  4. +10
    -2
      code/espurna/filters/MovingAverageFilter.h
  5. +9
    -1
      code/espurna/filters/SumFilter.h

+ 9
- 1
code/espurna/filters/LastFilter.h View File

@ -18,7 +18,11 @@ public:
}
void reset() override {
_value = 0;
_reset();
}
void resize(size_t) override {
_reset();
}
double value() const override {
@ -26,6 +30,10 @@ public:
}
private:
void _reset() {
_value = 0;
}
double _value = 0;
bool _status = false;
};

+ 9
- 1
code/espurna/filters/MaxFilter.h View File

@ -19,8 +19,12 @@ public:
return 1;
}
void resize(size_t) override {
_reset();
}
void reset() override {
_value = 0;
_reset();
}
double value() const {
@ -28,5 +32,9 @@ public:
}
private:
void _reset() {
_value = 0;
}
double _value = 0;
};

+ 12
- 11
code/espurna/filters/MedianFilter.h View File

@ -19,12 +19,7 @@ public:
}
void reset() override {
if (_values.size() > 2) {
_values[0] = _values.back();
_values.resize(1);
} else {
_values.clear();
}
_reset();
}
double value() const override {
@ -66,14 +61,20 @@ public:
}
void resize(size_t capacity) override {
if (_capacity != capacity) {
_capacity = capacity;
_values.clear();
_values.reserve(_capacity + 1);
}
_values.reserve(capacity + 1);
_reset();
}
private:
void _reset() {
auto previous = _values.size()
? _values.back()
: 0.0;
_values.clear();
_values.push_back(previous);
}
std::vector<double> _values;
size_t _capacity = 0;
};

+ 10
- 2
code/espurna/filters/MovingAverageFilter.h View File

@ -36,14 +36,22 @@ public:
}
void resize(size_t size) override {
_values.clear();
_values.reserve(size);
_reset();
}
void reset() override {
_values.clear();
_reset();
}
private:
void _reset() {
if (_values.size()) {
_values.erase(_values.begin(), _values.end() - 1);
} else {
_values.clear();
}
}
std::vector<double> _values{};
};

+ 9
- 1
code/espurna/filters/SumFilter.h View File

@ -17,8 +17,12 @@ public:
return 1;
}
void resize(size_t) override {
_reset();
}
void reset() override {
_value = 0.0;
_reset();
}
double value() const override {
@ -26,5 +30,9 @@ public:
}
private:
void _reset() {
_value = 0.0;
}
double _value = 0.0;
};

Loading…
Cancel
Save