{
g_atomic_int_set(&should_do_transport_work, 0);
SessionEvent::pool->set_trash (&pool_trash);
+
+ Config->ParameterChanged.connect_same_thread (*this, boost::bind (&Butler::config_changed, this, _1));
}
Butler::~Butler()
terminate_thread ();
}
+void
+Butler::config_changed (std::string p)
+{
+ if (p == "playback-buffer-seconds") {
+ /* size is in Samples, not bytes */
+ audio_dstream_playback_buffer_size = (uint32_t) floor (Config->get_audio_playback_buffer_seconds() * _session.frame_rate());
+ _session.adjust_playback_buffering ();
+ } else if (p == "capture-buffer-seconds") {
+ audio_dstream_capture_buffer_size = (uint32_t) floor (Config->get_audio_capture_buffer_seconds() * _session.frame_rate());
+ _session.adjust_capture_buffering ();
+ }
+}
+
int
Butler::start_thread()
{
if (thread) {
void* status;
const char c = Request::Quit;
- ::write (request_pipe[1], &c, 1);
+ (void) ::write (request_pipe[1], &c, 1);
pthread_join (thread, &status);
}
}
}
}
- if (transport_work_requested()) {
- _session.butler_transport_work ();
- }
- disk_work_outstanding = false;
bytes = 0;
compute_io = true;
+restart:
+ disk_work_outstanding = false;
+
+ if (transport_work_requested()) {
+ _session.butler_transport_work ();
+ }
+
begin = get_microseconds();
boost::shared_ptr<RouteList> rl = _session.get_routes();
}
if (!err && transport_work_requested()) {
- continue;
+ goto restart;
}
if (compute_io) {
}
if (!err && transport_work_requested()) {
- continue;
+ goto restart;
}
if (compute_io) {
// cerr << "AFTER " << (*i)->name() << ": pb = " << (*i)->playback_buffer_load() << " cp = " << (*i)->capture_buffer_load() << endl;
// }
- continue;
+ goto restart;
}
paused.signal();
Butler::summon ()
{
char c = Request::Run;
- ::write (request_pipe[1], &c, 1);
+ (void) ::write (request_pipe[1], &c, 1);
}
void
{
Glib::Mutex::Lock lm (request_lock);
char c = Request::Pause;
- ::write (request_pipe[1], &c, 1);
+ (void) ::write (request_pipe[1], &c, 1);
paused.wait(request_lock);
}
{
Glib::Mutex::Lock lm (request_lock);
char c = Request::Wake;
- ::write (request_pipe[1], &c, 1);
+ (void) ::write (request_pipe[1], &c, 1);
paused.wait(request_lock);
}