]> sigrok.org Git - pulseview.git/blobdiff - pv/data/analogsnapshot.h
Implemented AnalogSnapshot::get_envelope_section
[pulseview.git] / pv / data / analogsnapshot.h
index 9ca08f1e510d3d564bd5367c180a336edc2ae630..74d26763825167a41c81390c08647ba0a3b03560 100644 (file)
 #include <utility>
 #include <vector>
 
+namespace AnalogSnapshotTest {
+class Basic;
+}
+
 namespace pv {
 namespace data {
 
 class AnalogSnapshot : public Snapshot
 {
+public:
+       struct EnvelopeSample
+       {
+               float min;
+               float max;
+       };
+
+       struct EnvelopeSection
+       {
+               uint64_t start;
+               unsigned int scale;
+               uint64_t length;
+               EnvelopeSample *samples;
+       };
+
+private:
+       struct Envelope
+       {
+               uint64_t length;
+               uint64_t data_length;
+               EnvelopeSample *samples;
+       };
+
+private:
+       static const unsigned int ScaleStepCount = 10;
+       static const int EnvelopeScalePower;
+       static const int EnvelopeScaleFactor;
+       static const float LogEnvelopeScaleFactor;
+       static const uint64_t EnvelopeDataUnit;
+
 public:
        AnalogSnapshot(const sr_datafeed_analog &analog);
 
+       virtual ~AnalogSnapshot();
+
        void append_payload(const sr_datafeed_analog &analog);
 
-       const float* get_samples() const;
+       const float* get_samples(int64_t start_sample,
+               int64_t end_sample) const;
+
+       void get_envelope_section(EnvelopeSection &s,
+               uint64_t start, uint64_t end, float min_length) const;
+
+private:
+       void reallocate_envelope(Envelope &l);
+
+       void append_payload_to_envelope_levels();
+
+private:
+       struct Envelope _envelope_levels[ScaleStepCount];
+
+       friend class AnalogSnapshotTest::Basic;
 };
 
 } // namespace data