X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fdata%2Fsegment.cpp;h=8745e8740dc582f8a53d33ae7ed8e81d36a87398;hb=558ad6ceb934ab7406d286c1a4ae08da4aba1448;hp=905b79274efeb6ee5ddebd7045348c5da85d9db3;hpb=257211b829052bb5d5fade89f518df47d96923b5;p=pulseview.git diff --git a/pv/data/segment.cpp b/pv/data/segment.cpp index 905b792..8745e87 100644 --- a/pv/data/segment.cpp +++ b/pv/data/segment.cpp @@ -39,7 +39,8 @@ Segment::Segment(uint64_t samplerate, unsigned int unit_size) : 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 +90,16 @@ unsigned int Segment::unit_size() const return unit_size_; } +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 +182,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 +211,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)