X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fdata%2Flogicsegment.cpp;h=4b32f38d89992a6500293d0d462489a77a9e3243;hb=784f6c75bf8d878b395b8eb7b5e92fa24d9b32ba;hp=dff99c01742239665d7575029f34e7b2ab765918;hpb=b82243f74a175f621af26aabbc0f32e2ecb125fa;p=pulseview.git diff --git a/pv/data/logicsegment.cpp b/pv/data/logicsegment.cpp index dff99c01..4b32f38d 100644 --- a/pv/data/logicsegment.cpp +++ b/pv/data/logicsegment.cpp @@ -46,9 +46,9 @@ const int LogicSegment::MipMapScaleFactor = 1 << MipMapScalePower; const float LogicSegment::LogMipMapScaleFactor = logf(MipMapScaleFactor); const uint64_t LogicSegment::MipMapDataUnit = 64 * 1024; // bytes -LogicSegment::LogicSegment(pv::data::Logic& owner, unsigned int unit_size, - uint64_t samplerate) : - Segment(samplerate, unit_size), +LogicSegment::LogicSegment(pv::data::Logic& owner, uint32_t segment_id, + unsigned int unit_size, uint64_t samplerate) : + Segment(segment_id, samplerate, unit_size), owner_(owner), last_append_sample_(0) { @@ -296,10 +296,11 @@ uint64_t LogicSegment::get_unpacked_sample(uint64_t index) const { assert(index < sample_count_); - uint8_t* data = new uint8_t[unit_size_]; + assert(unit_size_ <= 8); // 8 * 8 = 64 channels + uint8_t data[8]; + get_raw_samples(index, 1, data); uint64_t sample = unpack_sample(data); - delete[] data; return sample; } @@ -314,7 +315,6 @@ void LogicSegment::get_subsampled_edges( bool last_sample; bool fast_forward; - assert(end <= get_sample_count()); assert(start <= end); assert(min_length > 0); assert(sig_index >= 0); @@ -322,6 +322,10 @@ void LogicSegment::get_subsampled_edges( lock_guard lock(mutex_); + // Make sure we only process as many samples as we have + if (end > get_sample_count()) + end = get_sample_count(); + const uint64_t block_length = (uint64_t)max(min_length, 1.0f); const unsigned int min_level = max((int)floorf(logf(min_length) / LogMipMapScaleFactor) - 1, 0);