X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fdata%2Fsegment.cpp;h=cfe9aafa0385b7935e9e67fda9d026bedf4256f3;hp=f635fc387a59dc4156273ca0dd4d88602ca35a27;hb=dd3f9a41a6b4debf5ad7aa8226bebd13504f2295;hpb=26a883ede0bcf68d087eda5dd2082890d36c7aef diff --git a/pv/data/segment.cpp b/pv/data/segment.cpp index f635fc38..cfe9aafa 100644 --- a/pv/data/segment.cpp +++ b/pv/data/segment.cpp @@ -33,6 +33,8 @@ using std::vector; namespace pv { namespace data { +const uint64_t Segment::MaxChunkSize = 10*1024*1024; /* 10MiB */ + Segment::Segment(uint64_t samplerate, unsigned int unit_size) : sample_count_(0), start_time_(0), @@ -88,6 +90,21 @@ unsigned int Segment::unit_size() const return unit_size_; } +void Segment::free_unused_memory() +{ + lock_guard lock(mutex_); + + // No more data will come in, so re-create the last chunk accordingly + uint8_t* resized_chunk = new uint8_t[used_samples_ * unit_size_]; + memcpy(resized_chunk, current_chunk_, used_samples_ * unit_size_); + + delete[] current_chunk_; + current_chunk_ = resized_chunk; + + data_chunks_.pop_back(); + data_chunks_.push_back(resized_chunk); +} + void Segment::append_single_sample(void *data) { lock_guard lock(mutex_);