X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fdata%2Fanalogsnapshot.h;h=9f0711f2d3e20ae3dde93df9562a7c56c9e65e7f;hb=e8d009288de28cb194bc7964f96677c2baf900c9;hp=9ca08f1e510d3d564bd5367c180a336edc2ae630;hpb=1b1ec774978b65209ce2b454cbf81da499b797d2;p=pulseview.git diff --git a/pv/data/analogsnapshot.h b/pv/data/analogsnapshot.h index 9ca08f1e..9f0711f2 100644 --- a/pv/data/analogsnapshot.h +++ b/pv/data/analogsnapshot.h @@ -26,17 +26,68 @@ #include #include +namespace AnalogSnapshotTest { +struct Basic; +} + namespace pv { namespace data { class AnalogSnapshot : public Snapshot { public: - AnalogSnapshot(const sr_datafeed_analog &analog); + 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(uint64_t expected_num_samples = 0); + + virtual ~AnalogSnapshot(); + + void append_interleaved_samples(const float *data, + size_t sample_count, size_t stride); + + 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(); - void append_payload(const sr_datafeed_analog &analog); +private: + struct Envelope _envelope_levels[ScaleStepCount]; - const float* get_samples() const; + friend struct AnalogSnapshotTest::Basic; }; } // namespace data