summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_audio_import.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour/editor_audio_import.cc')
-rw-r--r--gtk2_ardour/editor_audio_import.cc35
1 files changed, 17 insertions, 18 deletions
diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc
index 71e28c9a1d..ebff933514 100644
--- a/gtk2_ardour/editor_audio_import.cc
+++ b/gtk2_ardour/editor_audio_import.cc
@@ -31,6 +31,7 @@
#include <ardour/audio_track.h>
#include <ardour/audioplaylist.h>
#include <ardour/audiofilesource.h>
+#include <ardour/region_factory.h>
#include <pbd/memento_command.h>
#include "ardour_ui.h"
@@ -176,8 +177,8 @@ Editor::import_sndfile (Glib::ustring path, ImportMode mode, AudioTrack* track,
/* import thread finished - see if we should build a new track */
if (!import_status.new_regions.empty()) {
- AudioRegion& region (*import_status.new_regions.front());
- finish_bringing_in_audio (region, region.n_channels(), region.n_channels(), track, pos, mode);
+ boost::shared_ptr<AudioRegion> region (import_status.new_regions.front());
+ finish_bringing_in_audio (region, region->n_channels(), region->n_channels(), track, pos, mode);
}
track_canvas.get_window()->set_cursor (*current_canvas_cursor);
@@ -189,8 +190,8 @@ Editor::embed_sndfile (Glib::ustring path, bool split, bool multiple_files, bool
AudioTrack* track, jack_nframes_t& pos, bool prompt)
{
AudioFileSource *source = 0; /* keep g++ quiet */
- AudioRegion::SourceList sources;
- AudioRegion* region;
+ SourceList sources;
+ boost::shared_ptr<AudioRegion> region;
string idspec;
string linked_path;
SoundFileInfo finfo;
@@ -287,18 +288,18 @@ Editor::embed_sndfile (Glib::ustring path, bool split, bool multiple_files, bool
region_name = PBD::basename_nosuffix (path);
region_name += "-0";
- region = new AudioRegion (sources, 0, sources[0]->length(), region_name, 0,
- Region::Flag (Region::DefaultFlags|Region::WholeFile|Region::External));
+ region = boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (sources, 0, sources[0]->length(), region_name, 0,
+ Region::Flag (Region::DefaultFlags|Region::WholeFile|Region::External)));
input_chan = finfo.channels;
-
+
if (session->get_output_auto_connect() & Session::AutoConnectMaster) {
output_chan = (session->master_out() ? session->master_out()->n_inputs() : input_chan);
} else {
output_chan = input_chan;
}
- finish_bringing_in_audio (*region, input_chan, output_chan, track, pos, mode);
+ finish_bringing_in_audio (region, input_chan, output_chan, track, pos, mode);
out:
track_canvas.get_window()->set_cursor (*current_canvas_cursor);
@@ -306,10 +307,8 @@ Editor::embed_sndfile (Glib::ustring path, bool split, bool multiple_files, bool
}
int
-Editor::finish_bringing_in_audio (AudioRegion& region, uint32_t in_chans, uint32_t out_chans, AudioTrack* track, jack_nframes_t& pos, ImportMode mode)
+Editor::finish_bringing_in_audio (boost::shared_ptr<AudioRegion> region, uint32_t in_chans, uint32_t out_chans, AudioTrack* track, jack_nframes_t& pos, ImportMode mode)
{
- AudioRegion* copy;
-
switch (mode) {
case ImportAsRegion:
/* relax, its been done */
@@ -319,14 +318,14 @@ Editor::finish_bringing_in_audio (AudioRegion& region, uint32_t in_chans, uint32
if (track) {
Playlist* playlist = track->diskstream()->playlist();
- AudioRegion* copy = new AudioRegion (region);
+ boost::shared_ptr<AudioRegion> copy (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (region)));
begin_reversible_command (_("insert sndfile"));
XMLNode &before = playlist->get_state();
- playlist->add_region (*copy, pos);
+ playlist->add_region (copy, pos);
session->add_command (new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
commit_reversible_command ();
- pos += region.length();
+ pos += region->length();
}
break;
@@ -334,8 +333,8 @@ Editor::finish_bringing_in_audio (AudioRegion& region, uint32_t in_chans, uint32
{
list<boost::shared_ptr<AudioTrack> > at (session->new_audio_track (in_chans, out_chans, Normal, 1));
if (!at.empty()) {
- copy = new AudioRegion (region);
- at.front()->diskstream()->playlist()->add_region (*copy, pos);
+ boost::shared_ptr<AudioRegion> copy (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (region)));
+ at.front()->diskstream()->playlist()->add_region (copy, pos);
}
break;
}
@@ -344,8 +343,8 @@ Editor::finish_bringing_in_audio (AudioRegion& region, uint32_t in_chans, uint32
{
list<boost::shared_ptr<AudioTrack> > at (session->new_audio_track (in_chans, out_chans, Destructive));
if (!at.empty()) {
- copy = new AudioRegion (region);
- at.front()->diskstream()->playlist()->add_region (*copy, pos);
+ boost::shared_ptr<AudioRegion> copy (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (region)));
+ at.front()->diskstream()->playlist()->add_region (copy, pos);
}
break;
}