X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fdata%2Fsegment.cpp;h=9b18c6499a1b32cf03362dc67e835f410acb9159;hb=784f6c75bf8d878b395b8eb7b5e92fa24d9b32ba;hp=905b79274efeb6ee5ddebd7045348c5da85d9db3;hpb=257211b829052bb5d5fade89f518df47d96923b5;p=pulseview.git diff --git a/pv/data/segment.cpp b/pv/data/segment.cpp index 905b7927..9b18c649 100644 --- a/pv/data/segment.cpp +++ b/pv/data/segment.cpp @@ -33,13 +33,15 @@ namespace data { const uint64_t Segment::MaxChunkSize = 10 * 1024 * 1024; /* 10MiB */ -Segment::Segment(uint64_t samplerate, unsigned int unit_size) : +Segment::Segment(uint32_t segment_id, uint64_t samplerate, unsigned int unit_size) : + segment_id_(segment_id), sample_count_(0), start_time_(0), samplerate_(samplerate), unit_size_(unit_size), iterator_count_(0), - mem_optimization_requested_(false) + mem_optimization_requested_(false), + is_complete_(false) { lock_guard lock(mutex_); assert(unit_size_ > 0); @@ -89,6 +91,21 @@ unsigned int Segment::unit_size() const return unit_size_; } +uint32_t Segment::segment_id() const +{ + return segment_id_; +} + +void Segment::set_complete() +{ + is_complete_ = true; +} + +bool Segment::is_complete() const +{ + return is_complete_; +} + void Segment::free_unused_memory() { lock_guard lock(mutex_); @@ -171,15 +188,16 @@ void Segment::append_samples(void* data, uint64_t samples) sample_count_ += samples; } -uint8_t* Segment::get_raw_samples(uint64_t start, uint64_t count) const +void Segment::get_raw_samples(uint64_t start, uint64_t count, + uint8_t* dest) const { assert(start < sample_count_); assert(start + count <= sample_count_); assert(count > 0); + assert(dest != nullptr); lock_guard lock(mutex_); - uint8_t* dest = new uint8_t[count * unit_size_]; uint8_t* dest_ptr = dest; uint64_t chunk_num = (start * unit_size_) / chunk_size_; @@ -199,8 +217,6 @@ uint8_t* Segment::get_raw_samples(uint64_t start, uint64_t count) const chunk_num++; chunk_offs = 0; } - - return dest; } SegmentRawDataIterator* Segment::begin_raw_sample_iteration(uint64_t start)