X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Finternal_return.cc;h=279472e02d18cda39eef14d6236aed6f56303eeb;hb=325671e20afa56f5c796d14ce9bb76146a232f0b;hp=f3ab1dd901a4bf63091e62c6cee38834ee993f22;hpb=0d6515a24349be9add8d3919d4c6c4d509bac687;p=ardour.git diff --git a/libs/ardour/internal_return.cc b/libs/ardour/internal_return.cc index f3ab1dd901..279472e02d 100644 --- a/libs/ardour/internal_return.cc +++ b/libs/ardour/internal_return.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2009 Paul Davis + Copyright (C) 2009 Paul Davis This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -27,26 +27,30 @@ using namespace std; using namespace ARDOUR; -sigc::signal InternalReturn::CycleStart; +PBD::Signal1 InternalReturn::CycleStart; InternalReturn::InternalReturn (Session& s) : Return (s, true) , user_count (0) { - CycleStart.connect (mem_fun (*this, &InternalReturn::cycle_start)); + CycleStart.connect_same_thread (*this, boost::bind (&InternalReturn::cycle_start, this, _1)); } InternalReturn::InternalReturn (Session& s, const XMLNode& node) : Return (s, node, true) , user_count (0) { - CycleStart.connect (mem_fun (*this, &InternalReturn::cycle_start)); + CycleStart.connect_same_thread (*this, boost::bind (&InternalReturn::cycle_start, this, _1)); } void -InternalReturn::run (BufferSet& bufs, sframes_t start_frame, sframes_t end_frame, nframes_t nframes) +InternalReturn::run (BufferSet& bufs, sframes_t /*start_frame*/, sframes_t /*end_frame*/, nframes_t nframes, bool) { - /* XXX no lock here, just atomic fetch */ + if (!_active && !_pending_active) { + return; + } + + /* no lock here, just atomic fetch */ if (g_atomic_int_get(&user_count) == 0) { /* nothing to do - nobody is feeding us anything */ @@ -54,6 +58,7 @@ InternalReturn::run (BufferSet& bufs, sframes_t start_frame, sframes_t end_frame } bufs.merge_from (buffers, nframes); + _active = _pending_active; } bool @@ -64,7 +69,7 @@ InternalReturn::configure_io (ChanCount in, ChanCount out) return true; } -void +void InternalReturn::set_block_size (nframes_t nframes) { allocate_buffers (nframes); @@ -126,17 +131,20 @@ InternalReturn::get_state() } int -InternalReturn::set_state (const XMLNode& node) +InternalReturn::set_state (const XMLNode& node, int version) { - return Return::set_state (node); + return Return::set_state (node, version); } -bool +bool InternalReturn::can_support_io_configuration (const ChanCount& in, ChanCount& out) const { out = in; return true; } - - +bool +InternalReturn::visible () const +{ + return false; +}