X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fdata%2Flogicsnapshot.cpp;h=f2fa81bcdde675fa9811977a32261be129687b75;hp=af6ac0e8c367a097372aeea376cef6c101785e8b;hb=819f4c25391a9c74d3d2f528d462142d5c4aad4d;hpb=8fe602795012213fdd0ceff9efb6c6158d20f19b diff --git a/pv/data/logicsnapshot.cpp b/pv/data/logicsnapshot.cpp index af6ac0e8..f2fa81bc 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 { @@ -70,7 +73,23 @@ void LogicSnapshot::append_payload( append_payload_to_mipmap(); } -void LogicSnapshot::reallocate_mip_map(MipMapLevel &m) +void LogicSnapshot::get_samples(uint8_t *const data, + int64_t start_sample, int64_t end_sample) const +{ + assert(data); + assert(start_sample >= 0); + assert(start_sample < (int64_t)_sample_count); + assert(end_sample >= 0); + assert(end_sample < (int64_t)_sample_count); + assert(start_sample <= end_sample); + + lock_guard lock(_mutex); + + const size_t size = (end_sample - start_sample) * _unit_size; + memcpy(data, (const uint8_t*)_data + start_sample, size); +} + +void LogicSnapshot::reallocate_mipmap_level(MipMapLevel &m) { const uint64_t new_data_length = ((m.length + MipMapDataUnit - 1) / MipMapDataUnit) * MipMapDataUnit; @@ -101,14 +120,12 @@ void LogicSnapshot::append_payload_to_mipmap() if (m0.length == prev_length) return; - reallocate_mip_map(m0); + reallocate_mipmap_level(m0); dest_ptr = (uint8_t*)m0.data + prev_length * _unit_size; // Iterate through the samples to populate the first level mipmap - accumulator = 0; - diff_counter = MipMapScaleFactor; - const uint8_t *end_src_ptr = (uint8_t*)_data + + const uint8_t *const end_src_ptr = (uint8_t*)_data + m0.length * _unit_size * MipMapScaleFactor; for (src_ptr = (uint8_t*)_data + prev_length * _unit_size * MipMapScaleFactor; @@ -143,12 +160,12 @@ void LogicSnapshot::append_payload_to_mipmap() if (m.length == prev_length) break; - reallocate_mip_map(m); + reallocate_mipmap_level(m); // Subsample the level lower level src_ptr = (uint8_t*)ml.data + _unit_size * prev_length * MipMapScaleFactor; - const uint8_t *end_dest_ptr = + const uint8_t *const end_dest_ptr = (uint8_t*)m.data + _unit_size * m.length; for (dest_ptr = (uint8_t*)m.data + _unit_size * prev_length; @@ -190,7 +207,7 @@ void LogicSnapshot::get_subsampled_edges( assert(start <= end); assert(min_length > 0); assert(sig_index >= 0); - assert(sig_index < SR_MAX_NUM_PROBES); + assert(sig_index < 64); lock_guard lock(_mutex);