- const double pixels_offset = offset / scale;
- const double start_time = data_->get_start_time();
- const int64_t last_sample = snapshot->get_sample_count() - 1;
- const double samples_per_pixel = samplerate * scale;
- const double start = samplerate * (offset - start_time);
- const double end = start + samples_per_pixel * (right - left);
+ const double pixels_offset = pp.pixels_offset();
+ const pv::util::Timestamp& start_time = segment->start_time();
+ const int64_t last_sample = segment->get_sample_count() - 1;
+ const double samples_per_pixel = samplerate * pp.scale();
+ const pv::util::Timestamp start = samplerate * (pp.offset() - start_time);
+ const pv::util::Timestamp end = start + samples_per_pixel * pp.width();
+
+ const int64_t start_sample = min(max(floor(start).convert_to<int64_t>(),
+ (int64_t)0), last_sample);
+ const uint64_t end_sample = min(max(ceil(end).convert_to<int64_t>(),
+ (int64_t)0), last_sample);