]> sigrok.org Git - pulseview.git/blobdiff - pv/data/segment.cpp
Segment: Move definition of MaxChunkSize
[pulseview.git] / pv / data / segment.cpp
index f635fc387a59dc4156273ca0dd4d88602ca35a27..cfe9aafa0385b7935e9e67fda9d026bedf4256f3 100644 (file)
@@ -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<recursive_mutex> 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<recursive_mutex> lock(mutex_);