X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fauditioner.cc;h=0c5e8bc6a288ce5ca5fc2ec2f63b7958270f4a93;hb=90263f9a6dcec5de1bf6cd305d194118333a81ef;hp=81f64d26717364bb830c66317b87c002d006d354;hpb=6f4a92f740b2fd75794489ce58f9348f8adf6bf4;p=ardour.git diff --git a/libs/ardour/auditioner.cc b/libs/ardour/auditioner.cc index 81f64d2671..0c5e8bc6a2 100644 --- a/libs/ardour/auditioner.cc +++ b/libs/ardour/auditioner.cc @@ -20,6 +20,8 @@ #include +#include + #include #include #include @@ -27,9 +29,14 @@ #include #include #include +#include +#include using namespace std; using namespace ARDOUR; +using namespace PBD; + +#include "i18n.h" Auditioner::Auditioner (Session& s) : AudioTrack (s, "auditioner", Route::Hidden) @@ -44,19 +51,19 @@ Auditioner::Auditioner (Session& s) defer_pan_reset (); if (left.length()) { - add_output_port (left, this, AUDIO); + add_output_port (left, this, DataType::AUDIO); } if (right.length()) { - audio_diskstream().add_channel(); - add_output_port (right, this, AUDIO); + audio_diskstream()->add_channel(); + add_output_port (right, this, DataType::AUDIO); } allow_pan_reset (); IO::output_changed.connect (mem_fun (*this, &Auditioner::output_changed)); - the_region = 0; + the_region.reset ((AudioRegion*) 0); g_atomic_int_set (&_active, 0); } @@ -71,7 +78,7 @@ Auditioner::prepare_playlist () AudioPlaylist* const apl = dynamic_cast(_diskstream->playlist()); assert(apl); - apl->clear (false, false); + apl->clear (); return *apl; } @@ -98,7 +105,7 @@ Auditioner::audition_current_playlist () } void -Auditioner::audition_region (AudioRegion& region) +Auditioner::audition_region (boost::shared_ptr region) { if (g_atomic_int_get (&_active)) { /* don't go via session for this, because we are going @@ -107,20 +114,27 @@ Auditioner::audition_region (AudioRegion& region) cancel_audition (); } + if (boost::dynamic_pointer_cast(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 the_region (boost::dynamic_pointer_cast (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 (); + _diskstream->playlist()->add_region (the_region, 0, 1); while (_diskstream->n_channels() < the_region->n_channels()) { - audio_diskstream().add_channel (); + audio_diskstream()->add_channel (); } while (_diskstream->n_channels() > the_region->n_channels()) { - audio_diskstream().remove_channel (); + audio_diskstream()->remove_channel (); } /* force a panner reset now that we have all channels */ @@ -134,10 +148,10 @@ Auditioner::audition_region (AudioRegion& region) } int -Auditioner::play_audition (jack_nframes_t nframes) +Auditioner::play_audition (nframes_t nframes) { bool need_butler; - jack_nframes_t this_nframes; + nframes_t this_nframes; int ret; if (g_atomic_int_get (&_active) == 0) {