X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fdata%2Flogicsnapshot.cpp;h=af6ac0e8c367a097372aeea376cef6c101785e8b;hb=d37583678256450d7eb646213d0b9e170a427933;hp=9b3eedd107ad31f33eab0f0ef45950cb06a0cae0;hpb=3f96c34aa5735b72a8c2a48d24ad38b1d9898933;p=pulseview.git diff --git a/pv/data/logicsnapshot.cpp b/pv/data/logicsnapshot.cpp index 9b3eedd1..af6ac0e8 100644 --- a/pv/data/logicsnapshot.cpp +++ b/pv/data/logicsnapshot.cpp @@ -60,10 +60,11 @@ void LogicSnapshot::append_payload( const sr_datafeed_logic &logic) { assert(_unit_size == logic.unitsize); + assert((logic.length % _unit_size) == 0); lock_guard lock(_mutex); - append_data(logic.data, logic.length); + append_data(logic.data, logic.length / _unit_size); // Generate the first mip-map from the data append_payload_to_mipmap(); @@ -76,7 +77,10 @@ void LogicSnapshot::reallocate_mip_map(MipMapLevel &m) if (new_data_length > m.data_length) { m.data_length = new_data_length; - m.data = realloc(m.data, new_data_length * _unit_size); + + // Padding is added to allow for the uint64_t write word + m.data = realloc(m.data, new_data_length * _unit_size + + sizeof(uint64_t)); } } @@ -203,7 +207,10 @@ void LogicSnapshot::get_subsampled_edges( { //----- Continue to search -----// level = min_level; - fast_forward = true; + + // We cannot fast-forward if there is no mip-map data at + // at the minimum level. + fast_forward = (_mip_map[level].data != NULL); if (min_length < MipMapScaleFactor) { @@ -240,7 +247,8 @@ void LogicSnapshot::get_subsampled_edges( // We can fast forward only if there was no change const bool sample = (get_sample(index) & sig_mask) != 0; - fast_forward = last_sample == sample; + if (last_sample != sample) + fast_forward = false; } if (fast_forward) {