using namespace std;
using namespace ARDOUR;
-//using namespace sigc;
+using namespace PBD;
uint32_t Route::order_key_cnt = 0;
-Route::Route (Session& sess, string name, int input_min, int input_max, int output_min, int output_max, Flag flg)
- : IO (sess, name, input_min, input_max, output_min, output_max),
+Route::Route (Session& sess, string name, int input_min, int input_max, int output_min, int output_max, Flag flg, Buffer::Type default_type)
+ : IO (sess, name, input_min, input_max, output_min, output_max, default_type),
_flags (flg),
_midi_solo_control (*this, MIDIToggleControl::SoloControl, _session.midi_port()),
_midi_mute_control (*this, MIDIToggleControl::MuteControl, _session.midi_port())
declick = _pending_declick;
{
- TentativeLockMonitor cm (control_outs_lock, __LINE__, __FILE__);
+ Glib::Mutex::Lock cm (control_outs_lock, Glib::TRY_LOCK);
if (cm.locked()) {
co = _control_outs;
}
{
- TentativeLockMonitor dm (declick_lock, __LINE__, __FILE__);
+ Glib::Mutex::Lock dm (declick_lock, Glib::TRY_LOCK);
if (dm.locked()) {
dmg = desired_mute_gain;
-------------------------------------------------------------------------------------------------- */
if (with_redirects) {
- TentativeRWLockMonitor rm (redirect_lock, false, __LINE__, __FILE__);
+ Glib::RWLock::ReaderLock rm (redirect_lock, Glib::TRY_LOCK);
if (rm.locked()) {
if (mute_gain > 0 || !_mute_affects_pre_fader) {
for (i = _redirects.begin(); i != _redirects.end(); ++i) {
if (post_fader_work) {
- TentativeRWLockMonitor rm (redirect_lock, false, __LINE__, __FILE__);
+ Glib::RWLock::ReaderLock rm (redirect_lock, Glib::TRY_LOCK);
if (rm.locked()) {
if (mute_gain > 0 || !_mute_affects_post_fader) {
for (i = _redirects.begin(); i != _redirects.end(); ++i) {
solo_audible = solo_gain > 0;
mute_audible = dmg > 0 || !_mute_affects_control_outs;
-
+
if ( // silent anyway
(_gain == 0 && !apply_gain_automation) ||
if (_session.transport_speed() > 1.5f || _session.transport_speed() < -1.5f) {
pan (bufs, nbufs, nframes, offset, speed_quietning);
} else {
- // cerr << "panner state = " << _panner->automation_state() << endl;
+ // cerr << _name << " panner state = " << _panner->automation_state() << endl;
if (!_panner->empty() &&
(_panner->automation_state() & Play ||
((_panner->automation_state() & Touch) && !_panner->touching()))) {
void
Route::set_solo_mute (bool yn)
{
- LockMonitor lm (declick_lock, __LINE__, __FILE__);
+ Glib::Mutex::Lock lm (declick_lock);
/* Called by Session in response to another Route being soloed.
*/
_midi_mute_control.send_feedback (_muted);
}
- LockMonitor lm (declick_lock, __LINE__, __FILE__);
+ Glib::Mutex::Lock lm (declick_lock);
desired_mute_gain = (yn?0.0f:1.0f);
}
}
}
{
- RWLockMonitor lm (redirect_lock, true, __LINE__, __FILE__);
+ Glib::RWLock::WriterLock lm (redirect_lock);
PluginInsert* pi;
PortInsert* porti;
while (_peak_power.size() < potential_max_streams) {
_peak_power.push_back(0);
}
- while (_stored_peak_power.size() < potential_max_streams) {
- _stored_peak_power.push_back(0);
+ while (_visible_peak_power.size() < potential_max_streams) {
+ _visible_peak_power.push_back(0);
}
_redirects.push_back (redirect);
}
{
- RWLockMonitor lm (redirect_lock, true, __LINE__, __FILE__);
+ Glib::RWLock::WriterLock lm (redirect_lock);
RedirectList::iterator existing_end = _redirects.end();
--existing_end;
while (_peak_power.size() < potential_max_streams) {
_peak_power.push_back(0);
}
- while (_stored_peak_power.size() < potential_max_streams) {
- _stored_peak_power.push_back(0);
+ while (_visible_peak_power.size() < potential_max_streams) {
+ _visible_peak_power.push_back(0);
}
_redirects.push_back (*i);
}
{
- RWLockMonitor lm (redirect_lock, true, __LINE__, __FILE__);
+ Glib::RWLock::WriterLock lm (redirect_lock);
for (RedirectList::iterator i = _redirects.begin(); i != _redirects.end(); ++i) {
delete *i;
redirect_max_outs = 0;
{
- RWLockMonitor lm (redirect_lock, true, __LINE__, __FILE__);
+ Glib::RWLock::WriterLock lm (redirect_lock);
RedirectList::iterator i;
bool removed = false;
int
Route::reset_plugin_counts (uint32_t* lpc)
{
- RWLockMonitor lm (redirect_lock, true, __LINE__, __FILE__);
+ Glib::RWLock::WriterLock lm (redirect_lock);
return _reset_plugin_counts (lpc);
}
RedirectList to_be_deleted;
{
- RWLockMonitor lm (redirect_lock, true, __LINE__, __FILE__);
+ Glib::RWLock::WriterLock lm (redirect_lock);
RedirectList::iterator tmp;
RedirectList the_copy;
void
Route::all_redirects_flip ()
{
- RWLockMonitor lm (redirect_lock, false, __LINE__, __FILE__);
+ Glib::RWLock::ReaderLock lm (redirect_lock);
if (_redirects.empty()) {
return;
void
Route::all_redirects_active (bool state)
{
- RWLockMonitor lm (redirect_lock, false, __LINE__, __FILE__);
+ Glib::RWLock::ReaderLock lm (redirect_lock);
if (_redirects.empty()) {
return;
{
{
RedirectSorter comparator;
- RWLockMonitor lm (redirect_lock, true, __LINE__, __FILE__);
+ Glib::RWLock::WriterLock lm (redirect_lock);
uint32_t old_rmo = redirect_max_outs;
/* the sweet power of C++ ... */
}
{
- TentativeRWLockMonitor lm (redirect_lock, false, __LINE__, __FILE__);
+ Glib::RWLock::ReaderLock lm (redirect_lock, Glib::TRY_LOCK);
if (lm.locked()) {
for (RedirectList::iterator i = _redirects.begin(); i != _redirects.end(); ++i) {
int
Route::set_control_outs (const vector<string>& ports)
{
- LockMonitor lm (control_outs_lock, __LINE__, __FILE__);
+ Glib::Mutex::Lock lm (control_outs_lock);
vector<string>::const_iterator i;
if (_control_outs) {
}
void
-Route::transport_stopped (bool abort_ignored, bool did_locate, bool can_flush_redirects)
+Route::handle_transport_stopped (bool abort_ignored, bool did_locate, bool can_flush_redirects)
{
jack_nframes_t now = _session.transport_frame();
{
- RWLockMonitor lm (redirect_lock, false, __LINE__, __FILE__);
+ Glib::RWLock::ReaderLock lm (redirect_lock);
if (!did_locate) {
automation_snapshot (now);
bool can_record, bool rec_monitors_input)
{
{
- TentativeRWLockMonitor lm(redirect_lock, false, __LINE__, __FILE__);
+ Glib::RWLock::ReaderLock lm (redirect_lock, Glib::TRY_LOCK);
if (lm.locked()) {
// automation snapshot can also be called from the non-rt context
// and it uses the redirect list, so we take the lock out here
apply_gain_automation = false;
{
- TentativeLockMonitor am (automation_lock, __LINE__, __FILE__);
+ Glib::Mutex::Lock am (automation_lock, Glib::TRY_LOCK);
if (am.locked() && _session.transport_rolling()) {
if (_session.get_midi_feedback()) {
{
- RWLockMonitor lm (redirect_lock, false, __LINE__, __FILE__);
+ Glib::RWLock::ReaderLock lm (redirect_lock);
for (RedirectList::iterator i = _redirects.begin(); i != _redirects.end(); ++i) {
(*i)->send_all_midi_feedback ();
}
buf = _midi_mute_control.write_feedback (buf, bufsize, _muted);
{
- RWLockMonitor lm (redirect_lock, false, __LINE__, __FILE__);
+ Glib::RWLock::ReaderLock lm (redirect_lock);
for (RedirectList::iterator i = _redirects.begin(); i != _redirects.end(); ++i) {
buf = (*i)->write_midi_feedback (buf, bufsize);
}
this is called from the RT audio thread.
*/
- RWLockMonitor lm (redirect_lock, false, __LINE__, __FILE__);
+ Glib::RWLock::ReaderLock lm (redirect_lock);
for (RedirectList::iterator i = _redirects.begin(); i != _redirects.end(); ++i) {
(*i)->deactivate ();