const float LogicSegment::LogMipMapScaleFactor = logf(MipMapScaleFactor);
const uint64_t LogicSegment::MipMapDataUnit = 64 * 1024; // bytes
-LogicSegment::LogicSegment(pv::data::Logic& owner, unsigned int unit_size,
- uint64_t samplerate) :
- Segment(samplerate, unit_size),
+LogicSegment::LogicSegment(pv::data::Logic& owner, uint32_t segment_id,
+ unsigned int unit_size, uint64_t samplerate) :
+ Segment(segment_id, samplerate, unit_size),
owner_(owner),
last_append_sample_(0)
{
{
assert(index < sample_count_);
- uint8_t* data = new uint8_t[unit_size_];
+ assert(unit_size_ <= 8); // 8 * 8 = 64 channels
+ uint8_t data[8];
+
get_raw_samples(index, 1, data);
uint64_t sample = unpack_sample(data);
- delete[] data;
return sample;
}
bool last_sample;
bool fast_forward;
- assert(end <= get_sample_count());
assert(start <= end);
assert(min_length > 0);
assert(sig_index >= 0);
lock_guard<recursive_mutex> lock(mutex_);
+ // Make sure we only process as many samples as we have
+ if (end > get_sample_count())
+ end = get_sample_count();
+
const uint64_t block_length = (uint64_t)max(min_length, 1.0f);
const unsigned int min_level = max((int)floorf(logf(min_length) /
LogMipMapScaleFactor) - 1, 0);