summaryrefslogtreecommitdiff
path: root/libs/ardour/auditioner.cc
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2006-08-29 21:21:48 +0000
committerDavid Robillard <d@drobilla.net>2006-08-29 21:21:48 +0000
commit82232f06ba3eea4a2b4342ad91fab552f4044402 (patch)
treed517cb47c017f51e2ecd9450624b86eb70d9f97b /libs/ardour/auditioner.cc
parent25d1670a61d19e795227b939a98be9cf5a050c67 (diff)
Merged with trunk R861
Possible new bugs - not very thoroughly tested, but at least functional at first glance git-svn-id: svn://localhost/ardour2/branches/midi@870 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/auditioner.cc')
-rw-r--r--libs/ardour/auditioner.cc25
1 files changed, 19 insertions, 6 deletions
diff --git a/libs/ardour/auditioner.cc b/libs/ardour/auditioner.cc
index 3109323acd..29ae3b4d2b 100644
--- a/libs/ardour/auditioner.cc
+++ b/libs/ardour/auditioner.cc
@@ -20,6 +20,8 @@
#include <glibmm/thread.h>
+#include <pbd/error.h>
+
#include <ardour/audio_diskstream.h>
#include <ardour/audioregion.h>
#include <ardour/route.h>
@@ -28,9 +30,13 @@
#include <ardour/audioplaylist.h>
#include <ardour/panner.h>
#include <ardour/data_type.h>
+#include <ardour/region_factory.h>
using namespace std;
using namespace ARDOUR;
+using namespace PBD;
+
+#include "i18n.h"
Auditioner::Auditioner (Session& s)
: AudioTrack (s, "auditioner", Route::Hidden)
@@ -59,7 +65,7 @@ Auditioner::Auditioner (Session& s)
IO::output_changed.connect (mem_fun (*this, &Auditioner::output_changed));
- the_region = 0;
+ the_region.reset ((AudioRegion*) 0);
g_atomic_int_set (&_active, 0);
}
@@ -74,7 +80,7 @@ Auditioner::prepare_playlist ()
AudioPlaylist* const apl = dynamic_cast<AudioPlaylist*>(_diskstream->playlist());
assert(apl);
- apl->clear (false, false);
+ apl->clear (false);
return *apl;
}
@@ -101,7 +107,7 @@ Auditioner::audition_current_playlist ()
}
void
-Auditioner::audition_region (AudioRegion& region)
+Auditioner::audition_region (boost::shared_ptr<Region> region)
{
if (g_atomic_int_get (&_active)) {
/* don't go via session for this, because we are going
@@ -110,13 +116,20 @@ Auditioner::audition_region (AudioRegion& region)
cancel_audition ();
}
+ if (boost::dynamic_pointer_cast<AudioRegion>(region) == 0) {
+ error << _("Auditioning of non-audio regions not yet supported") << endmsg;
+ return;
+ }
+
Glib::Mutex::Lock lm (lock);
- the_region = new AudioRegion (region);
+ /* copy it */
+
+ boost::shared_ptr<AudioRegion> the_region (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (region)));
the_region->set_position (0, this);
- _diskstream->playlist()->clear (true, false);
- _diskstream->playlist()->add_region (*the_region, 0, 1, false);
+ _diskstream->playlist()->clear (false);
+ _diskstream->playlist()->add_region (the_region, 0, 1, false);
while (_diskstream->n_channels().get(DataType::AUDIO) < the_region->n_channels()) {
audio_diskstream()->add_channel ();