X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fdata%2Flogicsegment.cpp;h=38f4bf246c21a619e531be955af26075678c2569;hp=dff99c01742239665d7575029f34e7b2ab765918;hb=4d08da71e288c7b7be6c0455c0bb6834d4b318fd;hpb=b82243f74a175f621af26aabbc0f32e2ecb125fa diff --git a/pv/data/logicsegment.cpp b/pv/data/logicsegment.cpp index dff99c01..38f4bf24 100644 --- a/pv/data/logicsegment.cpp +++ b/pv/data/logicsegment.cpp @@ -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);