diff options
author | Nick Mainsbridge <beatroute@iprimus.com.au> | 2006-08-30 20:48:16 +0000 |
---|---|---|
committer | Nick Mainsbridge <beatroute@iprimus.com.au> | 2006-08-30 20:48:16 +0000 |
commit | a61f25dfe9dcf1f29852d917779529d26e762ea5 (patch) | |
tree | c4e13a95f78c22ae705234ad8deda6cea4fa1973 /libs | |
parent | 6535cd1b1dbab7cc59a356c81d92dbc2cf25333b (diff) |
** requires svn jack ** Hardware monitoring should work, some canvas scrolling speed improvement, don't disconcertingly churn the disk if jack auto-start fails, mixer visibility state is saved per session, slow down meters a bit (too much?), zoom cleanups, remove some unused variables, use rwlock for tempo state for no reason other than that it might be useful one day, fix compiler warning.
git-svn-id: svn://localhost/ardour2/trunk@873 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs')
-rw-r--r-- | libs/ardour/ardour/port.h | 5 | ||||
-rw-r--r-- | libs/ardour/ardour/tempo.h | 4 | ||||
-rw-r--r-- | libs/ardour/audio_diskstream.cc | 6 | ||||
-rw-r--r-- | libs/ardour/audioregion.cc | 4 | ||||
-rw-r--r-- | libs/ardour/route.cc | 2 | ||||
-rw-r--r-- | libs/ardour/session_state.cc | 2 | ||||
-rw-r--r-- | libs/ardour/tempo.cc | 71 | ||||
-rw-r--r-- | libs/ardour/track.cc | 8 | ||||
-rw-r--r-- | libs/gtkmm2ext/auto_spin.cc | 6 | ||||
-rw-r--r-- | libs/gtkmm2ext/popup.cc | 8 | ||||
-rw-r--r-- | libs/gtkmm2ext/selector.cc | 8 |
11 files changed, 64 insertions, 60 deletions
diff --git a/libs/ardour/ardour/port.h b/libs/ardour/ardour/port.h index 86c99cb7e3..1093450840 100644 --- a/libs/ardour/ardour/port.h +++ b/libs/ardour/ardour/port.h @@ -136,9 +136,10 @@ class Port : public sigc::trackable { } void ensure_monitor_input (bool yn) { - jack_port_request_monitor (_port, yn); + jack_port_ensure_monitor (_port, yn); } - + + /*XXX completely bloody useless imho*/ void request_monitor_input (bool yn) { jack_port_request_monitor (_port, yn); } diff --git a/libs/ardour/ardour/tempo.h b/libs/ardour/ardour/tempo.h index a365717417..9111aeba68 100644 --- a/libs/ardour/ardour/tempo.h +++ b/libs/ardour/ardour/tempo.h @@ -201,7 +201,7 @@ class TempoMap : public StateManager, public PBD::StatefulDestructible typedef vector<BBTPoint> BBTPointList; template<class T> void apply_with_metrics (T& obj, void (T::*method)(const Metrics&)) { - Glib::Mutex::Lock lm (lock); + Glib::RWLock::ReaderLock lm (lock); (obj.*method)(*metrics); } @@ -289,7 +289,7 @@ class TempoMap : public StateManager, public PBD::StatefulDestructible jack_nframes_t last_bbt_when; bool last_bbt_valid; BBT_Time last_bbt; - mutable Glib::Mutex lock; + mutable Glib::RWLock lock; void timestamp_metrics (); diff --git a/libs/ardour/audio_diskstream.cc b/libs/ardour/audio_diskstream.cc index 57271068dc..c39f6ebf20 100644 --- a/libs/ardour/audio_diskstream.cc +++ b/libs/ardour/audio_diskstream.cc @@ -1713,7 +1713,7 @@ AudioDiskstream::engage_record_enable () if (Config->get_use_hardware_monitoring()) { for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) { if ((*chan).source) { - (*chan).source->request_monitor_input (!(_session.get_auto_input() && rolling)); + (*chan).source->ensure_monitor_input (!(_session.get_auto_input() && rolling)); } capturing_sources.push_back ((*chan).write_source); } @@ -1733,7 +1733,7 @@ AudioDiskstream::disengage_record_enable () if (Config->get_use_hardware_monitoring()) { for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) { if ((*chan).source) { - (*chan).source->request_monitor_input (false); + (*chan).source->ensure_monitor_input (false); } } } @@ -2066,7 +2066,7 @@ AudioDiskstream::monitor_input (bool yn) for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) { if ((*chan).source) { - (*chan).source->request_monitor_input (yn); + (*chan).source->ensure_monitor_input (yn); } } } diff --git a/libs/ardour/audioregion.cc b/libs/ardour/audioregion.cc index 5c45fa51b2..659d638ad6 100644 --- a/libs/ardour/audioregion.cc +++ b/libs/ardour/audioregion.cc @@ -334,7 +334,7 @@ AudioRegion::restore_state (StateManager::State& sstate) if (_fade_in_disabled != state->_fade_in_disabled) { if (_fade_in_disabled == 0 && state->_fade_in_disabled) { set_fade_in_active (false); - } if (_fade_in_disabled && state->_fade_in_disabled == 0) { + } else if (_fade_in_disabled && state->_fade_in_disabled == 0) { set_fade_in_active (true); } _fade_in_disabled = state->_fade_in_disabled; @@ -343,7 +343,7 @@ AudioRegion::restore_state (StateManager::State& sstate) if (_fade_out_disabled != state->_fade_out_disabled) { if (_fade_out_disabled == 0 && state->_fade_out_disabled) { set_fade_out_active (false); - } if (_fade_out_disabled && state->_fade_out_disabled == 0) { + } else if (_fade_out_disabled && state->_fade_out_disabled == 0) { set_fade_out_active (true); } _fade_out_disabled = state->_fade_out_disabled; diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc index 107fae2585..45040750b4 100644 --- a/libs/ardour/route.cc +++ b/libs/ardour/route.cc @@ -2110,7 +2110,7 @@ void Route::toggle_monitor_input () { for (vector<Port*>::iterator i = _inputs.begin(); i != _inputs.end(); ++i) { - (*i)->request_monitor_input(!(*i)->monitoring_input()); + (*i)->ensure_monitor_input(!(*i)->monitoring_input()); } } diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc index 48f6796165..6cddfb026a 100644 --- a/libs/ardour/session_state.cc +++ b/libs/ardour/session_state.cc @@ -243,7 +243,7 @@ Session::first_stage_init (string fullpath, string snapshot_name) shuttle_speed_threshold = 5; rf_speed = 2.0; _meter_hold = 100; // XXX unknown units: number of calls to meter::set() - _meter_falloff = 1.5f; // XXX unknown units: refresh_rate + _meter_falloff = 0.375f; // XXX unknown units: refresh_rate max_level = 0; min_level = 0; diff --git a/libs/ardour/tempo.cc b/libs/ardour/tempo.cc index c0e52279e1..02884f062b 100644 --- a/libs/ardour/tempo.cc +++ b/libs/ardour/tempo.cc @@ -241,7 +241,7 @@ TempoMap::move_metric_section (MetricSection& section, const BBT_Time& when) return 1; } - Glib::Mutex::Lock lm (lock); + Glib::RWLock::WriterLock lm (lock); MetricSectionSorter cmp; BBT_Time corrected (when); @@ -284,7 +284,7 @@ TempoMap::remove_tempo (const TempoSection& tempo) bool removed = false; { - Glib::Mutex::Lock lm (lock); + Glib::RWLock::WriterLock lm (lock); Metrics::iterator i; for (i = metrics->begin(); i != metrics->end(); ++i) { @@ -311,7 +311,7 @@ TempoMap::remove_meter (const MeterSection& tempo) bool removed = false; { - Glib::Mutex::Lock lm (lock); + Glib::RWLock::WriterLock lm (lock); Metrics::iterator i; for (i = metrics->begin(); i != metrics->end(); ++i) { @@ -362,7 +362,7 @@ void TempoMap::add_tempo (const Tempo& tempo, BBT_Time where) { { - Glib::Mutex::Lock lm (lock); + Glib::RWLock::WriterLock lm (lock); /* new tempos always start on a beat */ @@ -382,7 +382,7 @@ TempoMap::replace_tempo (TempoSection& existing, const Tempo& replacement) bool replaced = false; { - Glib::Mutex::Lock lm (lock); + Glib::RWLock::WriterLock lm (lock); Metrics::iterator i; for (i = metrics->begin(); i != metrics->end(); ++i) { @@ -412,7 +412,7 @@ void TempoMap::add_meter (const Meter& meter, BBT_Time where) { { - Glib::Mutex::Lock lm (lock); + Glib::RWLock::WriterLock lm (lock); /* a new meter always starts a new bar on the first beat. so round the start time appropriately. remember that @@ -444,7 +444,7 @@ TempoMap::replace_meter (MeterSection& existing, const Meter& replacement) bool replaced = false; { - Glib::Mutex::Lock lm (lock); + Glib::RWLock::WriterLock lm (lock); Metrics::iterator i; for (i = metrics->begin(); i != metrics->end(); ++i) { @@ -612,8 +612,10 @@ TempoMap::metric_at (BBT_Time bbt) const void TempoMap::bbt_time (jack_nframes_t frame, BBT_Time& bbt) const { - Glib::Mutex::Lock lm (lock); - bbt_time_unlocked (frame, bbt); + { + Glib::RWLock::ReaderLock lm (lock); + bbt_time_unlocked (frame, bbt); + } } void @@ -760,7 +762,7 @@ TempoMap::bbt_duration_at (jack_nframes_t pos, const BBT_Time& bbt, int dir) con bbt_time(pos,when); { - Glib::Mutex::Lock lm (lock); + Glib::RWLock::ReaderLock lm (lock); frames = bbt_duration_at_unlocked (when, bbt,dir); } @@ -897,23 +899,26 @@ TempoMap::bbt_duration_at_unlocked (const BBT_Time& when, const BBT_Time& bbt, i jack_nframes_t TempoMap::round_to_bar (jack_nframes_t fr, int dir) { - Glib::Mutex::Lock lm (lock); - return round_to_type (fr, dir, Bar); + { + Glib::RWLock::ReaderLock lm (lock); + return round_to_type (fr, dir, Bar); + } } jack_nframes_t TempoMap::round_to_beat (jack_nframes_t fr, int dir) { - Glib::Mutex::Lock lm (lock); - return round_to_type (fr, dir, Beat); + { + Glib::RWLock::ReaderLock lm (lock); + return round_to_type (fr, dir, Beat); + } } jack_nframes_t TempoMap::round_to_beat_subdivision (jack_nframes_t fr, int sub_num) { - Glib::Mutex::Lock lm (lock); TempoMap::BBTPointList::iterator i; TempoMap::BBTPointList *more_zoomed_bbt_points; jack_nframes_t frame_one_beats_worth; @@ -926,9 +931,11 @@ TempoMap::round_to_beat_subdivision (jack_nframes_t fr, int sub_num) int n; frame_one_beats_worth = (jack_nframes_t) ::floor ((double) _frame_rate * 60 / 20 ); //one beat @ 20 bpm - more_zoomed_bbt_points = get_points((fr >= frame_one_beats_worth) ? + { + Glib::RWLock::ReaderLock lm (lock); + more_zoomed_bbt_points = get_points((fr >= frame_one_beats_worth) ? fr - frame_one_beats_worth : 0, fr+frame_one_beats_worth ); - + } if (more_zoomed_bbt_points == 0 || more_zoomed_bbt_points->empty()) { return fr; } @@ -1030,6 +1037,11 @@ TempoMap::get_points (jack_nframes_t lower, jack_nframes_t upper) const const TempoSection* t; uint32_t bar; uint32_t beat; + double beats_per_bar; + double beat_frame; + double beat_frames; + double frames_per_bar; + jack_nframes_t limit; meter = &first_meter (); tempo = &first_tempo (); @@ -1069,17 +1081,12 @@ TempoMap::get_points (jack_nframes_t lower, jack_nframes_t upper) const } points = new BBTPointList; + + beats_per_bar = meter->beats_per_bar (); + frames_per_bar = meter->frames_per_bar (*tempo, _frame_rate); + beat_frames = tempo->frames_per_beat (_frame_rate); do { - double beats_per_bar; - double beat_frame; - double beat_frames; - double frames_per_bar; - jack_nframes_t limit; - - beats_per_bar = meter->beats_per_bar (); - frames_per_bar = meter->frames_per_bar (*tempo, _frame_rate); - beat_frames = tempo->frames_per_beat (_frame_rate); if (i == metrics->end()) { limit = upper; @@ -1186,12 +1193,14 @@ TempoMap::meter_at (jack_nframes_t frame) XMLNode& TempoMap::get_state () { - Glib::Mutex::Lock lm (lock); Metrics::const_iterator i; XMLNode *root = new XMLNode ("TempoMap"); - for (i = metrics->begin(); i != metrics->end(); ++i) { - root->add_child_nocopy ((*i)->get_state()); + { + Glib::RWLock::ReaderLock lm (lock); + for (i = metrics->begin(); i != metrics->end(); ++i) { + root->add_child_nocopy ((*i)->get_state()); + } } return *root; @@ -1201,7 +1210,7 @@ int TempoMap::set_state (const XMLNode& node) { { - Glib::Mutex::Lock lm (lock); + Glib::RWLock::WriterLock lm (lock); XMLNodeList nlist; XMLNodeConstIterator niter; @@ -1293,7 +1302,7 @@ TempoMap::get_memento () const Change TempoMap::restore_state (StateManager::State& state) { - Glib::Mutex::Lock lm (lock); + Glib::RWLock::ReaderLock lm (lock); TempoMapState* tmstate = dynamic_cast<TempoMapState*> (&state); diff --git a/libs/ardour/track.cc b/libs/ardour/track.cc index c8633d9e52..17db545cf7 100644 --- a/libs/ardour/track.cc +++ b/libs/ardour/track.cc @@ -84,7 +84,7 @@ void Track::toggle_monitor_input () { for (vector<Port*>::iterator i = _inputs.begin(); i != _inputs.end(); ++i) { - (*i)->request_monitor_input(!(*i)->monitoring_input()); + (*i)->ensure_monitor_input(!(*i)->monitoring_input()); } } @@ -167,12 +167,6 @@ Track::set_record_enable (bool yn, void *src) return; } - // Do not set rec enabled if the track can't record. - if (yn && !can_record()) { - error << string_compose( _("Can not arm track '%1'. Check the input connections"), name() ) << endmsg; - return; - } - /* keep track of the meter point as it was before we rec-enabled */ if (!_diskstream->record_enabled()) { _saved_meter_point = _meter_point; diff --git a/libs/gtkmm2ext/auto_spin.cc b/libs/gtkmm2ext/auto_spin.cc index ba2a3cf76e..2e051b5be8 100644 --- a/libs/gtkmm2ext/auto_spin.cc +++ b/libs/gtkmm2ext/auto_spin.cc @@ -51,7 +51,7 @@ void AutoSpin::stop_timer () { if (have_timer) { - gtk_timeout_remove (timeout_tag); + g_source_remove (timeout_tag); have_timer = false; } } @@ -151,7 +151,7 @@ AutoSpin::start_spinning (bool decrement, bool page) have_timer = true; timer_calls = 0; - timeout_tag = gtk_timeout_add (initial_timer_interval, + timeout_tag = g_timeout_add (initial_timer_interval, AutoSpin::_timer, this); } @@ -216,7 +216,7 @@ AutoSpin::timer () request a much more frequent update. */ - timeout_tag = gtk_timeout_add (timer_interval, + timeout_tag = g_timeout_add (timer_interval, _timer, this); have_timer = true; diff --git a/libs/gtkmm2ext/popup.cc b/libs/gtkmm2ext/popup.cc index a8ffc4af66..0b150eefe1 100644 --- a/libs/gtkmm2ext/popup.cc +++ b/libs/gtkmm2ext/popup.cc @@ -74,7 +74,7 @@ PopUp::remove () hide (); if (popdown_time != 0 && timeout != -1) { - gtk_timeout_remove (timeout); + g_source_remove (timeout); } if (delete_on_hide) { @@ -94,7 +94,7 @@ PopUp::touch () show_all (); if (popdown_time != 0) { - timeout = gtk_timeout_add (popdown_time, + timeout = g_timeout_add (popdown_time, remove_prompt_timeout, this); } @@ -127,12 +127,12 @@ PopUp::on_delete_event (GdkEventAny* ev) hide(); if (popdown_time != 0 && timeout != -1) { - gtk_timeout_remove (timeout); + g_source_remove (timeout); } if (delete_on_hide) { std::cerr << "deleting prompter\n" << endl; - gtk_idle_add (idle_delete, this); + g_idle_add (idle_delete, this); } return true; diff --git a/libs/gtkmm2ext/selector.cc b/libs/gtkmm2ext/selector.cc index 7302de66e7..ee9a5578ba 100644 --- a/libs/gtkmm2ext/selector.cc +++ b/libs/gtkmm2ext/selector.cc @@ -220,13 +220,13 @@ TreeView_Selector::on_button_press_event(GdkEventButton* ev) if (ev && (ev->type == GDK_BUTTON_RELEASE || ev->type == GDK_2BUTTON_PRESS)) { if (ev->state & Gdk::CONTROL_MASK) { - gtk_idle_add (Selector::_control_clicked, this); + g_idle_add (Selector::_control_clicked, this); } else if (ev->state & Gdk::SHIFT_MASK) { - gtk_idle_add (Selector::_shift_clicked, this); + g_idle_add (Selector::_shift_clicked, this); } else if (ev->type == GDK_2BUTTON_PRESS) { - gtk_idle_add (Selector::_accept, this); + g_idle_add (Selector::_accept, this); } else { - gtk_idle_add (Selector::_chosen, this); + g_idle_add (Selector::_chosen, this); } } |