diff options
Diffstat (limited to 'libs/ardour/sndfilesource.cc')
-rw-r--r-- | libs/ardour/sndfilesource.cc | 52 |
1 files changed, 9 insertions, 43 deletions
diff --git a/libs/ardour/sndfilesource.cc b/libs/ardour/sndfilesource.cc index ffd9c8c752..b6f3accd4e 100644 --- a/libs/ardour/sndfilesource.cc +++ b/libs/ardour/sndfilesource.cc @@ -25,7 +25,6 @@ #include <sys/stat.h> #include <glibmm/miscutils.h> -#include <glibmm/thread.h> #include <pbd/stacktrace.h> #include <ardour/sndfilesource.h> @@ -46,21 +45,6 @@ const AudioFileSource::Flag SndFileSource::default_writable_flags = AudioFileSou AudioFileSource::Removable| AudioFileSource::RemovableIfEmpty| AudioFileSource::CanRename); -struct SizedSampleBuffer { - nframes_t size; - Sample* buf; - - SizedSampleBuffer (nframes_t sz) : size (sz) { - buf = new Sample[size]; - } - - ~SizedSampleBuffer() { - delete [] buf; - } -}; - -Glib::StaticPrivate<SizedSampleBuffer> thread_interleave_buffer = GLIBMM_STATIC_PRIVATE_INIT; - SndFileSource::SndFileSource (Session& s, const XMLNode& node) : AudioFileSource (s, node) { @@ -96,7 +80,7 @@ SndFileSource::SndFileSource (Session& s, ustring path, SampleFormat sfmt, Heade */ file_is_new = true; - + switch (hf) { case CAF: fmt = SF_FORMAT_CAF; @@ -190,9 +174,8 @@ SndFileSource::SndFileSource (Session& s, ustring path, SampleFormat sfmt, Heade _flags = Flag (_flags & ~Broadcast); delete _broadcast_info; _broadcast_info = 0; - } - - } + } + } } void @@ -256,7 +239,7 @@ SndFileSource::open () set_timeline_position (get_timecode_info (sf, _broadcast_info, timecode_info_exists)); - if (!timecode_info_exists) { + if (_length != 0 && !timecode_info_exists) { delete _broadcast_info; _broadcast_info = 0; _flags = Flag (_flags & ~Broadcast); @@ -328,6 +311,11 @@ SndFileSource::read_unlocked (Sample *dst, nframes_t start, nframes_t cnt) const file_cnt = cnt; } + if (file_cnt != cnt) { + nframes_t delta = cnt - file_cnt; + memset (dst+file_cnt, 0, sizeof (Sample) * delta); + } + if (file_cnt) { if (sf_seek (sf, (sf_count_t) start, SEEK_SET|SFM_READ) != (sf_count_t) start) { @@ -344,11 +332,6 @@ SndFileSource::read_unlocked (Sample *dst, nframes_t start, nframes_t cnt) const } } - if (file_cnt != cnt) { - nframes_t delta = cnt - file_cnt; - memset (dst+file_cnt, 0, sizeof (Sample) * delta); - } - real_cnt = cnt * _info.channels; Sample* interleave_buf = get_interleave_buffer (real_cnt); @@ -908,20 +891,3 @@ SndFileSource::one_of_several_channels () const return _info.channels > 1; } -Sample* -SndFileSource::get_interleave_buffer (nframes_t size) -{ - SizedSampleBuffer* ssb; - - if ((ssb = thread_interleave_buffer.get()) == 0) { - ssb = new SizedSampleBuffer (size); - thread_interleave_buffer.set (ssb); - } - - if (ssb->size < size) { - ssb = new SizedSampleBuffer (size); - thread_interleave_buffer.set (ssb); - } - - return ssb->buf; -} |