diff options
Diffstat (limited to 'libs/ardour/import.cc')
-rw-r--r-- | libs/ardour/import.cc | 27 |
1 files changed, 10 insertions, 17 deletions
diff --git a/libs/ardour/import.cc b/libs/ardour/import.cc index 6c44185fce..dc9819af8e 100644 --- a/libs/ardour/import.cc +++ b/libs/ardour/import.cc @@ -41,6 +41,8 @@ #include <ardour/sndfile_helpers.h> #include <ardour/audioregion.h> #include <ardour/region_factory.h> +#include <ardour/source_factory.h> + #include "i18n.h" @@ -53,7 +55,7 @@ int Session::import_audiofile (import_status& status) { SNDFILE *in; - AudioFileSource **newfiles = 0; + vector<boost::shared_ptr<AudioFileSource> > newfiles; SourceList sources; SF_INFO info; float *data = 0; @@ -95,11 +97,10 @@ Session::import_audiofile (import_status& status) } } - newfiles = new AudioFileSource *[info.channels]; for (n = 0; n < info.channels; ++n) { - newfiles[n] = 0; + newfiles.push_back (boost::shared_ptr<AudioFileSource>()); } - + sounds_dir = discover_best_sound_dir (); basepath = PBD::basename_nosuffix (status.pathname); @@ -136,12 +137,8 @@ Session::import_audiofile (import_status& status) } while ( !goodfile); - try { - newfiles[n] = new SndFileSource (buf, - Config->get_native_file_data_format(), - Config->get_native_file_header_format(), - frame_rate ()); + newfiles[n] = boost::dynamic_pointer_cast<AudioFileSource> (SourceFactory::createWritable (buf, false, frame_rate())); } catch (failed_constructor& err) { @@ -234,10 +231,10 @@ Session::import_audiofile (import_status& status) did not bother to create whole-file AudioRegions for them. Do it now. */ - boost::shared_ptr<AudioRegion> r (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (*newfiles[n], 0, newfiles[n]->length(), region_name_from_path (Glib::path_get_basename (newfiles[n]->name())), - 0, AudioRegion::Flag (AudioRegion::DefaultFlags | AudioRegion::WholeFile | AudioRegion::Import)))); - - status.new_regions.push_back (r); + status.new_regions.push_back (boost::dynamic_pointer_cast<AudioRegion> + (RegionFactory::create (boost::static_pointer_cast<Source> (newfiles[n]), 0, newfiles[n]->length(), + region_name_from_path (Glib::path_get_basename (newfiles[n]->name())), + 0, AudioRegion::Flag (AudioRegion::DefaultFlags | AudioRegion::WholeFile | AudioRegion::Import)))); } } @@ -271,10 +268,6 @@ Session::import_audiofile (import_status& status) } } - if (newfiles) { - delete [] newfiles; - } - if (tmp_convert_file.length()) { unlink(tmp_convert_file.c_str()); } |