From 99904735e066804358f1d0bd138a84f1e9ecda91 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 18 Mar 2007 06:07:08 +0000 Subject: Merged with trunk R1612. git-svn-id: svn://localhost/ardour2/branches/midi@1614 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/sndfilesource.cc | 72 ++++++++------------------------------------ 1 file changed, 13 insertions(+), 59 deletions(-) (limited to 'libs/ardour/sndfilesource.cc') diff --git a/libs/ardour/sndfilesource.cc b/libs/ardour/sndfilesource.cc index 2885240a51..d11afa736b 100644 --- a/libs/ardour/sndfilesource.cc +++ b/libs/ardour/sndfilesource.cc @@ -15,7 +15,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id$ */ #include @@ -36,6 +35,7 @@ using namespace std; using namespace ARDOUR; using namespace PBD; +using Glib::ustring; gain_t* SndFileSource::out_coefficient = 0; gain_t* SndFileSource::in_coefficient = 0; @@ -50,18 +50,16 @@ SndFileSource::SndFileSource (Session& s, const XMLNode& node) { init (); - cerr << "SndFileSource @ " << _path << " channel = " << channel << endl; - if (open()) { throw failed_constructor (); } } -SndFileSource::SndFileSource (Session& s, string path, int chn, Flag flags) +SndFileSource::SndFileSource (Session& s, ustring path, int chn, Flag flags) /* files created this way are never writable or removable */ : AudioFileSource (s, path, Flag (flags & ~(Writable|Removable|RemovableIfEmpty|RemoveAtDestroy))) { - channel = chn; + _channel = chn; init (); @@ -70,7 +68,7 @@ SndFileSource::SndFileSource (Session& s, string path, int chn, Flag flags) } } -SndFileSource::SndFileSource (Session& s, string path, SampleFormat sfmt, HeaderFormat hf, nframes_t rate, Flag flags) +SndFileSource::SndFileSource (Session& s, ustring path, SampleFormat sfmt, HeaderFormat hf, nframes_t rate, Flag flags) : AudioFileSource (s, path, flags, sfmt, hf) { int fmt = 0; @@ -180,7 +178,7 @@ SndFileSource::SndFileSource (Session& s, string path, SampleFormat sfmt, Header void SndFileSource::init () { - string file; + ustring file; // lets try to keep the object initalizations here at the top xfade_buf = 0; @@ -224,8 +222,8 @@ SndFileSource::open () return -1; } - if (channel >= _info.channels) { - error << string_compose(_("SndFileSource: file only contains %1 channels; %2 is invalid as a channel number"), _info.channels, channel) << endmsg; + if (_channel >= _info.channels) { + error << string_compose(_("SndFileSource: file only contains %1 channels; %2 is invalid as a channel number"), _info.channels, _channel) << endmsg; sf_close (sf); sf = 0; return -1; @@ -349,7 +347,7 @@ SndFileSource::read_unlocked (Sample *dst, nframes_t start, nframes_t cnt) const } nread = sf_read_float (sf, interleave_buf, real_cnt); - ptr = interleave_buf + channel; + ptr = interleave_buf + _channel; nread /= _info.channels; /* stride through the interleaved data */ @@ -390,7 +388,7 @@ SndFileSource::nondestructive_write_unlocked (Sample *data, nframes_t cnt) nframes_t oldlen; int32_t frame_pos = _length; - + if (write_float (data, frame_pos, cnt) != cnt) { return 0; } @@ -399,28 +397,7 @@ SndFileSource::nondestructive_write_unlocked (Sample *data, nframes_t cnt) update_length (oldlen, cnt); if (_build_peakfiles) { - PeakBuildRecord *pbr = 0; - - if (pending_peak_builds.size()) { - pbr = pending_peak_builds.back(); - } - - if (pbr && pbr->frame + pbr->cnt == oldlen) { - - /* the last PBR extended to the start of the current write, - so just extend it again. - */ - pbr->cnt += cnt; - } else { - pending_peak_builds.push_back (new PeakBuildRecord (oldlen, cnt)); - } - - _peaks_built = false; - } - - - if (_build_peakfiles) { - queue_for_peaks (shared_from_this (), false); + compute_and_write_peaks (data, frame_pos, cnt, false); } _write_data_count = cnt; @@ -510,32 +487,12 @@ SndFileSource::destructive_write_unlocked (Sample* data, nframes_t cnt) old_file_pos = file_pos; update_length (file_pos, cnt); - file_pos += cnt; if (_build_peakfiles) { - PeakBuildRecord *pbr = 0; - - if (pending_peak_builds.size()) { - pbr = pending_peak_builds.back(); - } - - if (pbr && pbr->frame + pbr->cnt == old_file_pos) { - - /* the last PBR extended to the start of the current write, - so just extend it again. - */ - - pbr->cnt += cnt; - } else { - pending_peak_builds.push_back (new PeakBuildRecord (old_file_pos, cnt)); - } - - _peaks_built = false; + compute_and_write_peaks (data, file_pos, cnt, false); } - if (_build_peakfiles) { - queue_for_peaks (shared_from_this (), true); - } + file_pos += cnt; return cnt; } @@ -630,9 +587,6 @@ SndFileSource::set_header_timeline_position () delete _broadcast_info; _broadcast_info = 0; } - - - } nframes_t @@ -888,7 +842,7 @@ SndFileSource::set_timeline_position (int64_t pos) } int -SndFileSource::get_soundfile_info (string path, SoundFileInfo& info, string& error_msg) +SndFileSource::get_soundfile_info (const ustring& path, SoundFileInfo& info, string& error_msg) { SNDFILE *sf; SF_INFO sf_info; -- cgit v1.2.3