const float AnalogSegment::LogEnvelopeScaleFactor = logf(EnvelopeScaleFactor);
const uint64_t AnalogSegment::EnvelopeDataUnit = 64 * 1024; // bytes
-AnalogSegment::AnalogSegment(Analog& owner, uint64_t samplerate) :
- Segment(samplerate, sizeof(float)),
+AnalogSegment::AnalogSegment(Analog& owner, uint32_t segment_id, uint64_t samplerate) :
+ Segment(segment_id, samplerate, sizeof(float)),
owner_(owner),
min_value_(0),
max_value_(0)
uint64_t prev_sample_count = sample_count_;
// Deinterleave the samples and add them
- unique_ptr<float> deint_data(new float[sample_count]);
+ unique_ptr<float[]> deint_data(new float[sample_count]);
float *deint_data_ptr = deint_data.get();
for (uint32_t i = 0; i < sample_count; i++) {
*deint_data_ptr = (float)(*data);
e0.length = sample_count_ / EnvelopeScaleFactor;
// Calculate min/max values in case we have too few samples for an envelope
+ const float old_min_value = min_value_, old_max_value = max_value_;
if (sample_count_ < EnvelopeScaleFactor) {
it = begin_raw_sample_iteration(0);
for (uint64_t i = 0; i < sample_count_; i++) {
*dest_ptr = sub_sample;
}
}
+
+ // Notify if the min or max value changed
+ if ((old_min_value != min_value_) || (old_max_value != max_value_))
+ owner_.min_max_changed(min_value_, max_value_);
}
} // namespace data