X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fauditioner.cc;h=0c5e8bc6a288ce5ca5fc2ec2f63b7958270f4a93;hb=1bd4c5b3a212460eed1773f6b049d18c89625565;hp=e48f103b9fb976b57e7bebd512d0ddaddea41ea0;hpb=79986643c0c904f6574bb5323e2233a43a9e622e;p=ardour.git diff --git a/libs/ardour/auditioner.cc b/libs/ardour/auditioner.cc index e48f103b9f..0c5e8bc6a2 100644 --- a/libs/ardour/auditioner.cc +++ b/libs/ardour/auditioner.cc @@ -20,6 +20,8 @@ #include +#include + #include #include #include @@ -28,9 +30,13 @@ #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) @@ -49,7 +55,7 @@ Auditioner::Auditioner (Session& s) } if (right.length()) { - audio_diskstream().add_channel(); + audio_diskstream()->add_channel(); add_output_port (right, this, DataType::AUDIO); } @@ -57,7 +63,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); } @@ -72,7 +78,7 @@ Auditioner::prepare_playlist () AudioPlaylist* const apl = dynamic_cast(_diskstream->playlist()); assert(apl); - apl->clear (false, false); + apl->clear (); return *apl; } @@ -99,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 @@ -108,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 */ @@ -135,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) {