+double DecodeTrace::get_pixels_offset() const
+{
+ assert(_view);
+ assert(_decoder_stack);
+
+ const double scale = _view->scale();
+ assert(scale > 0);
+
+ return (_view->offset() - _decoder_stack->get_start_time()) / scale;
+}
+
+double DecodeTrace::get_samples_per_pixel() const
+{
+ assert(_view);
+ assert(_decoder_stack);
+
+ const double scale = _view->scale();
+ assert(scale > 0);
+
+ double samplerate = _decoder_stack->samplerate();
+
+ // Show sample rate as 1Hz when it is unknown
+ if (samplerate == 0.0)
+ samplerate = 1.0;
+
+ return samplerate * scale;
+}
+
+pair<uint64_t, uint64_t> DecodeTrace::get_sample_range(int x_start, int x_end) const
+{
+ assert(_view);
+ assert(_decoder_stack);
+
+ const double samples_per_pixel = get_samples_per_pixel();
+ const double pixels_offset = get_pixels_offset();
+
+ uint64_t start, end;
+
+ start = (uint64_t)max((x_start + pixels_offset) * samples_per_pixel, 0.0);
+ end = (uint64_t)max((x_end + pixels_offset) * samples_per_pixel, 0.0);
+
+ return make_pair(start, end);
+}
+