X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fdata%2Flogicsnapshot.cpp;h=754a456cc8f2e6c078cfd5a46e8b1c756571f79a;hb=27d7c96b57d967edd8bcde9bb5570d573a0ef474;hp=d32274b3322cb4b02808343dad61f92afee57774;hpb=ed990f118d154cd487261d23986b7ad0ba4e24fe;p=pulseview.git diff --git a/pv/data/logicsnapshot.cpp b/pv/data/logicsnapshot.cpp index d32274b3..754a456c 100644 --- a/pv/data/logicsnapshot.cpp +++ b/pv/data/logicsnapshot.cpp @@ -29,8 +29,11 @@ #include "logicsnapshot.h" -using namespace boost; -using namespace std; +using boost::lock_guard; +using boost::recursive_mutex; +using std::max; +using std::min; +using std::pair; namespace pv { namespace data { @@ -40,10 +43,13 @@ const int LogicSnapshot::MipMapScaleFactor = 1 << MipMapScalePower; const float LogicSnapshot::LogMipMapScaleFactor = logf(MipMapScaleFactor); const uint64_t LogicSnapshot::MipMapDataUnit = 64*1024; // bytes -LogicSnapshot::LogicSnapshot(const sr_datafeed_logic &logic) : +LogicSnapshot::LogicSnapshot(const sr_datafeed_logic &logic, + const uint64_t expected_num_samples) : Snapshot(logic.unitsize), _last_append_sample(0) { + set_capacity(expected_num_samples); + lock_guard lock(_mutex); memset(_mip_map, 0, sizeof(_mip_map)); append_payload(logic); @@ -75,9 +81,9 @@ void LogicSnapshot::get_samples(uint8_t *const data, { assert(data); assert(start_sample >= 0); - assert(start_sample < (int64_t)_sample_count); + assert(start_sample <= (int64_t)_sample_count); assert(end_sample >= 0); - assert(end_sample < (int64_t)_sample_count); + assert(end_sample <= (int64_t)_sample_count); assert(start_sample <= end_sample); lock_guard lock(_mutex); @@ -363,8 +369,10 @@ void LogicSnapshot::get_subsampled_edges( } // Add the final state - edges.push_back(pair(end, - get_sample(end) & sig_mask)); + const bool end_sample = get_sample(end) & sig_mask; + if (last_sample != end_sample) + edges.push_back(pair(end, end_sample)); + edges.push_back(pair(end + 1, end_sample)); } uint64_t LogicSnapshot::get_subsample(int level, uint64_t offset) const