X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fdata%2Flogicsnapshot.cpp;h=a00a22ede0cd33ee5aa3b43042f51b59c37d8376;hp=3bd43c9208182e92bed8d46b8bea108d1e1af4c5;hb=e8d009288de28cb194bc7964f96677c2baf900c9;hpb=3b68d03ddae96edb38a80f31bf6a990bde21cd1d diff --git a/pv/data/logicsnapshot.cpp b/pv/data/logicsnapshot.cpp index 3bd43c92..a00a22ed 100644 --- a/pv/data/logicsnapshot.cpp +++ b/pv/data/logicsnapshot.cpp @@ -28,11 +28,16 @@ #include "config.h" #include "logicsnapshot.h" +#include + using std::lock_guard; using std::recursive_mutex; using std::max; using std::min; using std::pair; +using std::shared_ptr; + +using sigrok::Logic; namespace pv { namespace data { @@ -42,9 +47,9 @@ 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(shared_ptr logic, const uint64_t expected_num_samples) : - Snapshot(logic.unitsize), + Snapshot(logic->unit_size()), _last_append_sample(0) { set_capacity(expected_num_samples); @@ -135,15 +140,15 @@ void LogicSnapshot::pack_sample(uint8_t *ptr, uint64_t value) #endif } -void LogicSnapshot::append_payload( - const sr_datafeed_logic &logic) +void LogicSnapshot::append_payload(shared_ptr logic) { - assert(_unit_size == logic.unitsize); - assert((logic.length % _unit_size) == 0); + assert(_unit_size == logic->unit_size()); + assert((logic->data_length() % _unit_size) == 0); lock_guard lock(_mutex); - append_data(logic.data, logic.length / _unit_size); + append_data(logic->data_pointer(), + logic->data_length() / _unit_size); // Generate the first mip-map from the data append_payload_to_mipmap(); @@ -162,7 +167,7 @@ void LogicSnapshot::get_samples(uint8_t *const data, lock_guard lock(_mutex); const size_t size = (end_sample - start_sample) * _unit_size; - memcpy(data, (const uint8_t*)_data + start_sample * _unit_size, size); + memcpy(data, (const uint8_t*)_data.data() + start_sample * _unit_size, size); } void LogicSnapshot::reallocate_mipmap_level(MipMapLevel &m) @@ -201,9 +206,9 @@ void LogicSnapshot::append_payload_to_mipmap() dest_ptr = (uint8_t*)m0.data + prev_length * _unit_size; // Iterate through the samples to populate the first level mipmap - const uint8_t *const end_src_ptr = (uint8_t*)_data + + const uint8_t *const end_src_ptr = (uint8_t*)_data.data() + m0.length * _unit_size * MipMapScaleFactor; - for (src_ptr = (uint8_t*)_data + + for (src_ptr = (uint8_t*)_data.data() + prev_length * _unit_size * MipMapScaleFactor; src_ptr < end_src_ptr;) { @@ -263,10 +268,9 @@ void LogicSnapshot::append_payload_to_mipmap() uint64_t LogicSnapshot::get_sample(uint64_t index) const { - assert(_data); assert(index < _sample_count); - return unpack_sample((uint8_t*)_data + index * _unit_size); + return unpack_sample((uint8_t*)_data.data() + index * _unit_size); } void LogicSnapshot::get_subsampled_edges(