, port_remove_in_progress (false)
, m_meter_thread (0)
, _main_thread (0)
- , _ltc_input ()
- , _ltc_output ()
, ports (new Ports)
{
_instance = this; /* singleton */
}
Port::set_engine (this);
-
-#ifdef HAVE_LTC
- _ltc_input = register_port (DataType::AUDIO, _("LTC in"), true);
-
- /* register_port() would allocate buffers and pass a shadow copy
- * which is subject to ardour's route buffering behavioud and
- * not suitable for generating LTC independent of transport state.
- */
- _ltc_output.reset(new AudioPort ("LTC out", Port::IsOutput));
-
- /* As of October 2012, the LTC source port is the only thing that needs
- * to care about Config parameters, so don't bother to listen if we're
- * not doing LTC stuff. This might change if other parameters show up
- * in the future that we need to care about with or without LTC.
- */
-
- Config->ParameterChanged.connect_same_thread (config_connection, boost::bind (&AudioEngine::parameter_changed, this, _1));
-#endif
}
AudioEngine::~AudioEngine ()
{
config_connection.disconnect ();
-#ifdef HAVE_LTC
- if (_ltc_output && _ltc_output->jack_port()) {
- jack_port_disconnect (_jack, _ltc_output->jack_port());
- }
-#endif
{
Glib::Threads::Mutex::Lock tm (_process_lock);
_running = true;
_has_run = true;
Running(); /* EMIT SIGNAL */
-
- reconnect_ltc ();
-
} else {
// error << _("cannot activate JACK client") << endmsg;
}
disconnect_from_jack ();
} else {
jack_deactivate (_priv_jack);
- Stopped(); /* EMIT SIGNAL */
MIDI::JackMIDIPort::JackHalted (); /* EMIT SIGNAL */
+ Stopped(); /* EMIT SIGNAL */
}
}
}
if (_session == 0) {
-#ifdef HAVE_LTC
- // silence LTC
- jack_default_audio_sample_t *out;
- boost::shared_ptr<Port> ltcport = ltc_output_port();
- if (ltcport && ltcport->jack_port()) {
- out = (jack_default_audio_sample_t*) jack_port_get_buffer (ltcport->jack_port(), nframes);
- if (out) memset(out, 0, nframes * sizeof(jack_default_audio_sample_t));
- }
-#endif
if (!_freewheeling) {
MIDI::Manager::instance()->cycle_start(nframes);
}
/* test if we are freewheeling and there are freewheel signals connected.
- ardour should act normally even when freewheeling unless /it/ is exporting */
-
+ ardour should act normally even when freewheeling unless /it/ is
+ exporting
+ */
if (_freewheeling && !Freewheel.empty()) {
- /* emit the Freewheel signal and stop freewheeling in the event of trouble
- */
- boost::optional<int> r = Freewheel (nframes);
- if (r.get_value_or (0)) {
- jack_set_freewheel (_priv_jack, false);
- }
+
+ Freewheel (nframes);
} else {
MIDI::Manager::instance()->cycle_start(nframes);
AudioEngine::meter_thread ()
{
pthread_set_name (X_("meter"));
-
while (true) {
- Glib::usleep (10000); /* 1/100th sec interval */
+ Glib::usleep (10000);
if (g_atomic_int_get(&m_meter_exit)) {
break;
}
ae->_jack = 0;
if (was_running) {
+ MIDI::JackMIDIPort::JackHalted (); /* EMIT SIGNAL */
#ifdef HAVE_JACK_ON_INFO_SHUTDOWN
switch (code) {
case JackBackendError:
ae->_jack = 0;
if (was_running) {
- ae->Halted(""); /* EMIT SIGNAL */
MIDI::JackMIDIPort::JackHalted (); /* EMIT SIGNAL */
+ ae->Halted(""); /* EMIT SIGNAL */
}
}
if (_running) {
_running = false;
- Stopped(); /* EMIT SIGNAL */
MIDI::JackMIDIPort::JackHalted (); /* EMIT SIGNAL */
+ Stopped(); /* EMIT SIGNAL */
}
return 0;
MIDI::Manager::instance()->reconnect ();
- reconnect_ltc ();
-
Running (); /* EMIT SIGNAL*/
start_metering_thread ();
_instance = 0;
}
-void
-AudioEngine::parameter_changed (const std::string& s)
-{
- if (s == "ltc-source-port") {
- reconnect_ltc ();
- }
- else if (s == "ltc-sink-port") {
- // TODO
- }
-
-}
-
-void
-AudioEngine::reconnect_ltc ()
-{
- if (_ltc_input) {
-
- string src = Config->get_ltc_source_port();
-
- _ltc_input->disconnect_all ();
-
- if (src != _("None") && !src.empty()) {
- _ltc_input->connect (src);
- }
- }
-}