summaryrefslogtreecommitdiff
path: root/libs/ardour/audioengine.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ardour/audioengine.cc')
-rw-r--r--libs/ardour/audioengine.cc109
1 files changed, 55 insertions, 54 deletions
diff --git a/libs/ardour/audioengine.cc b/libs/ardour/audioengine.cc
index 2c16c52296..b1c5527570 100644
--- a/libs/ardour/audioengine.cc
+++ b/libs/ardour/audioengine.cc
@@ -66,7 +66,6 @@ AudioEngine::AudioEngine (string client_name)
{
_instance = this; /* singleton */
- session = 0;
session_remove_pending = false;
_running = false;
_has_run = false;
@@ -158,24 +157,24 @@ AudioEngine::start ()
nframes_t blocksize = jack_get_buffer_size (_priv_jack);
- if (session) {
+ if (_session) {
BootMessage (_("Connect session to engine"));
- session->set_block_size (blocksize);
- session->set_frame_rate (jack_get_sample_rate (_priv_jack));
+ _session->set_block_size (blocksize);
+ _session->set_frame_rate (jack_get_sample_rate (_priv_jack));
/* page in as much of the session process code as we
can before we really start running.
*/
- session->process (blocksize);
- session->process (blocksize);
- session->process (blocksize);
- session->process (blocksize);
- session->process (blocksize);
- session->process (blocksize);
- session->process (blocksize);
- session->process (blocksize);
+ _session->process (blocksize);
+ _session->process (blocksize);
+ _session->process (blocksize);
+ _session->process (blocksize);
+ _session->process (blocksize);
+ _session->process (blocksize);
+ _session->process (blocksize);
+ _session->process (blocksize);
}
_processed_frames = 0;
@@ -192,7 +191,7 @@ AudioEngine::start ()
jack_set_freewheel_callback (_priv_jack, _freewheel_callback, this);
jack_set_port_registration_callback (_priv_jack, _registration_callback, this);
- if (session && session->config.get_jack_time_master()) {
+ if (_session && _session->config.get_jack_time_master()) {
jack_set_timebase_callback (_priv_jack, 0, _jack_timebase_callback, this);
}
@@ -269,8 +268,8 @@ void
AudioEngine::jack_timebase_callback (jack_transport_state_t state, nframes_t nframes,
jack_position_t* pos, int new_position)
{
- if (_jack && session && session->synced_to_jack()) {
- session->jack_timebase_callback (state, nframes, pos, new_position);
+ if (_jack && _session && _session->synced_to_jack()) {
+ _session->jack_timebase_callback (state, nframes, pos, new_position);
}
}
@@ -283,8 +282,8 @@ AudioEngine::_jack_sync_callback (jack_transport_state_t state, jack_position_t*
int
AudioEngine::jack_sync_callback (jack_transport_state_t state, jack_position_t* pos)
{
- if (_jack && session) {
- return session->jack_sync_callback (state, pos);
+ if (_jack && _session) {
+ return _session->jack_sync_callback (state, pos);
}
return true;
@@ -372,7 +371,7 @@ AudioEngine::process_callback (nframes_t nframes)
next_processed_frames = _processed_frames + nframes;
}
- if (!tm.locked() || session == 0) {
+ if (!tm.locked() || _session == 0) {
/* return having done nothing */
_processed_frames = next_processed_frames;
return 0;
@@ -380,7 +379,7 @@ AudioEngine::process_callback (nframes_t nframes)
if (session_remove_pending) {
/* perform the actual session removal */
- session = 0;
+ _session = 0;
session_remove_pending = false;
session_removed.signal();
_processed_frames = next_processed_frames;
@@ -402,14 +401,16 @@ AudioEngine::process_callback (nframes_t nframes)
}
if (_freewheeling) {
- /* emit the Freewheel signal and stop freewheeling in the event of trouble */
- if (Freewheel (nframes)) {
+ /* emit the Freewheel signal and stop freewheeling in the event of trouble
+ * the indirection is to pick up the return value of the signal.
+ */
+ if (*Freewheel (nframes)) {
jack_set_freewheel (_priv_jack, false);
}
} else {
- if (session) {
- session->process (nframes);
+ if (_session) {
+ _session->process (nframes);
}
}
@@ -442,7 +443,7 @@ AudioEngine::process_callback (nframes_t nframes)
last_monitor_check = next_processed_frames;
}
- if (session->silent()) {
+ if (_session->silent()) {
boost::shared_ptr<Ports> p = ports.reader();
@@ -483,8 +484,8 @@ AudioEngine::jack_sample_rate_callback (nframes_t nframes)
monitor_check_interval = nframes / 10;
last_monitor_check = 0;
- if (session) {
- session->set_frame_rate (nframes);
+ if (_session) {
+ _session->set_frame_rate (nframes);
}
SampleRateChanged (nframes); /* EMIT SIGNAL */
@@ -514,8 +515,8 @@ AudioEngine::jack_bufsize_callback (nframes_t nframes)
(*i)->reset();
}
- if (session) {
- session->set_block_size (_buffer_size);
+ if (_session) {
+ _session->set_block_size (_buffer_size);
}
return 0;
@@ -536,7 +537,7 @@ AudioEngine::start_metering_thread ()
{
if (m_meter_thread == 0) {
g_atomic_int_set (&m_meter_exit, 0);
- m_meter_thread = Glib::Thread::create (sigc::mem_fun(this, &AudioEngine::meter_thread),
+ m_meter_thread = Glib::Thread::create (boost::bind (&AudioEngine::meter_thread, this),
500000, true, true, Glib::THREAD_PRIORITY_NORMAL);
}
}
@@ -558,31 +559,31 @@ AudioEngine::set_session (Session *s)
{
Glib::Mutex::Lock pl (_process_lock);
- if (!session) {
-
- session = s;
+ SessionHandlePtr::set_session (s);
+ if (_session) {
+
nframes_t blocksize = jack_get_buffer_size (_jack);
-
+
/* page in as much of the session process code as we
can before we really start running.
*/
-
+
boost::shared_ptr<Ports> p = ports.reader();
-
+
for (Ports::iterator i = p->begin(); i != p->end(); ++i) {
(*i)->cycle_start (blocksize);
}
-
- s->process (blocksize);
- s->process (blocksize);
- s->process (blocksize);
- s->process (blocksize);
- s->process (blocksize);
- s->process (blocksize);
- s->process (blocksize);
- s->process (blocksize);
-
+
+ _session->process (blocksize);
+ _session->process (blocksize);
+ _session->process (blocksize);
+ _session->process (blocksize);
+ _session->process (blocksize);
+ _session->process (blocksize);
+ _session->process (blocksize);
+ _session->process (blocksize);
+
for (Ports::iterator i = p->begin(); i != p->end(); ++i) {
(*i)->cycle_end (blocksize);
}
@@ -596,13 +597,13 @@ AudioEngine::remove_session ()
if (_running) {
- if (session) {
+ if (_session) {
session_remove_pending = true;
session_removed.wait(_process_lock);
}
} else {
- session = 0;
+ SessionHandlePtr::set_session (0);
}
remove_all_ports ();
@@ -1081,8 +1082,8 @@ int
AudioEngine::reset_timebase ()
{
GET_PRIVATE_JACK_POINTER_RET (_jack, -1);
- if (session) {
- if (session->config.get_jack_time_master()) {
+ if (_session) {
+ if (_session->config.get_jack_time_master()) {
return jack_set_timebase_callback (_priv_jack, 0, _jack_timebase_callback, this);
} else {
return jack_release_timebase (_jack);
@@ -1214,11 +1215,11 @@ AudioEngine::reconnect_to_jack ()
GET_PRIVATE_JACK_POINTER_RET (_jack,-1);
- if (session) {
- session->reset_jack_connection (_priv_jack);
+ if (_session) {
+ _session->reset_jack_connection (_priv_jack);
nframes_t blocksize = jack_get_buffer_size (_priv_jack);
- session->set_block_size (blocksize);
- session->set_frame_rate (jack_get_sample_rate (_priv_jack));
+ _session->set_block_size (blocksize);
+ _session->set_frame_rate (jack_get_sample_rate (_priv_jack));
_raw_buffer_sizes[DataType::AUDIO] = blocksize * sizeof(float);
cout << "FIXME: Assuming maximum MIDI buffer size " << blocksize * 4 << "bytes" << endl;
@@ -1237,7 +1238,7 @@ AudioEngine::reconnect_to_jack ()
jack_set_sync_callback (_priv_jack, _jack_sync_callback, this);
jack_set_freewheel_callback (_priv_jack, _freewheel_callback, this);
- if (session && session->config.get_jack_time_master()) {
+ if (_session && _session->config.get_jack_time_master()) {
jack_set_timebase_callback (_priv_jack, 0, _jack_timebase_callback, this);
}