diff options
author | Tim Mayberry <mojofunk@gmail.com> | 2007-11-15 02:31:09 +0000 |
---|---|---|
committer | Tim Mayberry <mojofunk@gmail.com> | 2007-11-15 02:31:09 +0000 |
commit | 1c70e4393e5231a17cc83b8ef2d9801021e09d3d (patch) | |
tree | 536ff95201e34d0de157669f7bed4b2513832cda /libs/ardour/import.cc | |
parent | 108e924ad59f097debfc0575f4e5801427de0ba8 (diff) |
Use boost::shared_ptr for RAII with a SNDFILE handle in Session::import_audiofile
A scoped_ptr would be more suitable and efficient but scoped_ptr doesn't support
a custom deleter function(sf_close in this case), there are ways around that
limitation but I don't think it is worth doing at this point as it requires more
code etc.
git-svn-id: svn://localhost/ardour2/trunk@2656 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/import.cc')
-rw-r--r-- | libs/ardour/import.cc | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/libs/ardour/import.cc b/libs/ardour/import.cc index bd6351cf05..aaf0057b84 100644 --- a/libs/ardour/import.cc +++ b/libs/ardour/import.cc @@ -53,7 +53,6 @@ using namespace PBD; int Session::import_audiofile (import_status& status) { - SNDFILE *in; vector<boost::shared_ptr<AudioFileSource> > newfiles; SF_INFO info; float *data = 0; @@ -74,7 +73,9 @@ Session::import_audiofile (import_status& status) for (vector<Glib::ustring>::iterator p = status.paths.begin(); p != status.paths.end(); ++p, ++cnt) { - if ((in = sf_open ((*p).c_str(), SFM_READ, &info)) == 0) { + boost::shared_ptr<SNDFILE> in (sf_open (p->c_str(), SFM_READ, &info), sf_close); + + if (!in) { error << string_compose(_("Import: cannot open input sound file \"%1\""), (*p)) << endmsg; status.done = 1; status.cancel = 1; @@ -82,9 +83,9 @@ Session::import_audiofile (import_status& status) } if ((nframes_t) info.samplerate != frame_rate()) { - importable = new ResampledImportableSource (in, &info, frame_rate(), status.quality); + importable = new ResampledImportableSource (in.get(), &info, frame_rate(), status.quality); } else { - importable = new ImportableSource (in, &info); + importable = new ImportableSource (in.get(), &info); } newfiles.clear (); @@ -261,7 +262,6 @@ Session::import_audiofile (import_status& status) delete importable; } - sf_close (in); status.done = true; return ret; |