summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorNick Mainsbridge <beatroute@iprimus.com.au>2006-08-30 20:48:16 +0000
committerNick Mainsbridge <beatroute@iprimus.com.au>2006-08-30 20:48:16 +0000
commita61f25dfe9dcf1f29852d917779529d26e762ea5 (patch)
treec4e13a95f78c22ae705234ad8deda6cea4fa1973 /libs
parent6535cd1b1dbab7cc59a356c81d92dbc2cf25333b (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.h5
-rw-r--r--libs/ardour/ardour/tempo.h4
-rw-r--r--libs/ardour/audio_diskstream.cc6
-rw-r--r--libs/ardour/audioregion.cc4
-rw-r--r--libs/ardour/route.cc2
-rw-r--r--libs/ardour/session_state.cc2
-rw-r--r--libs/ardour/tempo.cc71
-rw-r--r--libs/ardour/track.cc8
-rw-r--r--libs/gtkmm2ext/auto_spin.cc6
-rw-r--r--libs/gtkmm2ext/popup.cc8
-rw-r--r--libs/gtkmm2ext/selector.cc8
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);
}
}