diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2006-06-20 18:50:38 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2006-06-20 18:50:38 +0000 |
commit | be362ae53c1d191e23d8a084d0327044bce4544c (patch) | |
tree | fb64f8276c64a495a0fdcf99e772d983af7725c0 /gtk2_ardour/canvas-waveview.c | |
parent | c03dbd7568322d553ff681cb7f0bbd3452abd6cf (diff) |
fixes for libsndfile conversion issues, tape track waveform display and overloaded virtual functions
git-svn-id: svn://localhost/ardour2/trunk@624 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/canvas-waveview.c')
-rw-r--r-- | gtk2_ardour/canvas-waveview.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/gtk2_ardour/canvas-waveview.c b/gtk2_ardour/canvas-waveview.c index 34b64770a6..3e4a14d86a 100644 --- a/gtk2_ardour/canvas-waveview.c +++ b/gtk2_ardour/canvas-waveview.c @@ -389,7 +389,11 @@ gnome_canvas_waveview_ensure_cache (GnomeCanvasWaveView *waveview, gulong start_ /* but make sure it doesn't extend beyond the end of the source material */ rf3 = (gulong) (waveview->sourcefile_length_function (waveview->data_src, waveview->samples_per_unit)) + 1; - rf3 -= new_cache_start; + if (rf3 < new_cache_start) { + rf3 = 0; + } else { + rf3 -= new_cache_start; + } #if DEBUG_CACHE fprintf (stderr, "\n\nAVAILABLE FRAMES = %lu of %lu, start = %lu, sstart = %lu, cstart = %lu\n", @@ -405,8 +409,8 @@ gnome_canvas_waveview_ensure_cache (GnomeCanvasWaveView *waveview, gulong start_ #if DEBUG_CACHE fprintf (stderr, "new cache = %lu - %lu\n", new_cache_start, new_cache_end); - fprintf(stderr,"required_cach_entries = %lu, samples_per_unit = %f\n", - required_cache_entries,waveview->samples_per_unit); + fprintf(stderr,"required_cach_entries = %lu, samples_per_unit = %f req frames = %lu\n", + required_cache_entries,waveview->samples_per_unit, required_frames); #endif if (required_cache_entries > cache->allocated) { @@ -514,8 +518,8 @@ gnome_canvas_waveview_ensure_cache (GnomeCanvasWaveView *waveview, gulong start_ // fprintf(stderr,"length == %lu\n",waveview->length_function (waveview->data_src)); // required_frames = MIN (waveview->length_function (waveview->data_src) - new_cache_start, required_frames); + npeaks = (gulong) floor (required_frames / waveview->samples_per_unit); - npeaks = MAX (1, npeaks); required_frames = npeaks * waveview->samples_per_unit; #if DEBUG_CACHE @@ -532,11 +536,15 @@ gnome_canvas_waveview_ensure_cache (GnomeCanvasWaveView *waveview, gulong start_ // start_sample, end_sample); #endif - waveview->peak_function (waveview->data_src, npeaks, new_cache_start, required_frames, cache->data + offset, waveview->channel,waveview->samples_per_unit); - - /* take into account any copied peaks */ + if (required_frames) { + waveview->peak_function (waveview->data_src, npeaks, new_cache_start, required_frames, cache->data + offset, waveview->channel,waveview->samples_per_unit); - npeaks += copied; + /* take into account any copied peaks */ + + npeaks += copied; + } else { + npeaks = copied; + } if (npeaks < cache->allocated) { #if DEBUG_CACHE |