summaryrefslogtreecommitdiff
path: root/libs/canvas/wave_view.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2015-06-01 21:08:42 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2015-06-01 21:08:56 -0400
commit95c991ba35b55234b5ccfb63e82bd37c293fdeda (patch)
tree0b29da71c32d4f1c307062a8a5ac63bb5d3a2dd7 /libs/canvas/wave_view.cc
parente0fcd18ec65a2c5e1bbb143302ef88df452ec771 (diff)
reinstate absent image.
Then go back to bed and be ill some more.
Diffstat (limited to 'libs/canvas/wave_view.cc')
-rw-r--r--libs/canvas/wave_view.cc29
1 files changed, 15 insertions, 14 deletions
diff --git a/libs/canvas/wave_view.cc b/libs/canvas/wave_view.cc
index 15395980b4..b3bcb870ea 100644
--- a/libs/canvas/wave_view.cc
+++ b/libs/canvas/wave_view.cc
@@ -850,7 +850,6 @@ WaveView::generate_image (boost::shared_ptr<WaveViewThreadRequest> req, bool in_
framepos_t sample_start = max (_region_start, (center - image_samples));
framepos_t sample_end = min (center + image_samples, region_end());
-
const int n_peaks = llrintf ((sample_end - sample_start)/ (req->samples_per_pixel));
boost::scoped_array<ARDOUR::PeakData> peaks (new PeakData[n_peaks]);
@@ -860,27 +859,29 @@ WaveView::generate_image (boost::shared_ptr<WaveViewThreadRequest> req, bool in_
the Region itself.
*/
- _region->read_peaks (peaks.get(), n_peaks,
- sample_start, sample_end - sample_start,
- req->channel,
- req->samples_per_pixel);
+ framecnt_t peaks_read = _region->read_peaks (peaks.get(), n_peaks,
+ sample_start, sample_end - sample_start,
+ req->channel,
+ req->samples_per_pixel);
-
// apply waveform amplitude zoom multiplier
- for (int i = 0; i < n_peaks; ++i) {
- peaks[i].max *= _amplitude_above_axis;
- peaks[i].min *= _amplitude_above_axis;
- }
-
req->image = Cairo::ImageSurface::create (Cairo::FORMAT_ARGB32, n_peaks, req->height);
-
/* make sure we record the sample positions that were actually used */
-
req->start = sample_start;
req->end = sample_end;
- draw_image (req->image, peaks.get(), n_peaks, req);
+ if (peaks_read > 0) {
+
+ for (framecnt_t i = 0; i < peaks_read; ++i) {
+ peaks[i].max *= _amplitude_above_axis;
+ peaks[i].min *= _amplitude_above_axis;
+ }
+
+ draw_image (req->image, peaks.get(), n_peaks, req);
+ } else {
+ draw_absent_image (req->image, peaks.get(), n_peaks);
+ }
}
if (in_render_thread && !req->should_stop()) {