summaryrefslogtreecommitdiff
path: root/libs/ardour/import.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ardour/import.cc')
-rw-r--r--libs/ardour/import.cc40
1 files changed, 17 insertions, 23 deletions
diff --git a/libs/ardour/import.cc b/libs/ardour/import.cc
index 6d98388941..14f67245fd 100644
--- a/libs/ardour/import.cc
+++ b/libs/ardour/import.cc
@@ -35,11 +35,15 @@
#include <pbd/basename.h>
#include <ardour/ardour.h>
+#include <ardour/types.h>
#include <ardour/session.h>
#include <ardour/audio_diskstream.h>
#include <ardour/sndfilesource.h>
#include <ardour/sndfile_helpers.h>
#include <ardour/audioregion.h>
+#include <ardour/region_factory.h>
+#include <ardour/source_factory.h>
+
#include "i18n.h"
@@ -52,8 +56,8 @@ int
Session::import_audiofile (import_status& status)
{
SNDFILE *in;
- AudioFileSource **newfiles = 0;
- AudioRegion::SourceList sources;
+ vector<boost::shared_ptr<AudioFileSource> > newfiles;
+ SourceList sources;
SF_INFO info;
float *data = 0;
Sample **channel_data = 0;
@@ -94,11 +98,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);
@@ -135,12 +138,9 @@ 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 (DataType::AUDIO, buf, false, frame_rate()));
}
catch (failed_constructor& err) {
@@ -217,8 +217,8 @@ Session::import_audiofile (import_status& status)
sources.push_back(newfiles[n]);
}
- AudioRegion *r = new AudioRegion (sources, 0, newfiles[0]->length(), region_name_from_path (Glib::path_get_basename (basepath)),
- 0, AudioRegion::Flag (AudioRegion::DefaultFlags | AudioRegion::WholeFile));
+ boost::shared_ptr<AudioRegion> r (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (sources, 0, newfiles[0]->length(), region_name_from_path (Glib::path_get_basename (basepath)),
+ 0, AudioRegion::Flag (AudioRegion::DefaultFlags | AudioRegion::WholeFile))));
status.new_regions.push_back (r);
@@ -233,10 +233,10 @@ Session::import_audiofile (import_status& status)
did not bother to create whole-file AudioRegions for them. Do it now.
*/
- AudioRegion *r = new AudioRegion (*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))));
}
}
@@ -262,19 +262,13 @@ Session::import_audiofile (import_status& status)
}
if (status.cancel) {
- for (vector<Region *>::iterator i = status.new_regions.begin(); i != status.new_regions.end(); ++i) {
- delete *i;
- }
+ status.new_regions.clear ();
for (vector<string>::iterator i = new_paths.begin(); i != new_paths.end(); ++i) {
unlink ((*i).c_str());
}
}
- if (newfiles) {
- delete [] newfiles;
- }
-
if (tmp_convert_file.length()) {
unlink(tmp_convert_file.c_str());
}