From 025adbe920013e2f8d34569a2e5edf20dc7163af Mon Sep 17 00:00:00 2001 From: Tim Mayberry Date: Fri, 11 Oct 2013 12:01:15 +1000 Subject: Add AudioEngine::set_default_backend --- libs/ardour/audioengine.cc | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'libs/ardour/audioengine.cc') diff --git a/libs/ardour/audioengine.cc b/libs/ardour/audioengine.cc index f79c90feea..a9956666d8 100644 --- a/libs/ardour/audioengine.cc +++ b/libs/ardour/audioengine.cc @@ -557,6 +557,16 @@ AudioEngine::drop_backend () } } +boost::shared_ptr +AudioEngine::set_default_backend () +{ + if (_backends.empty()) { + return boost::shared_ptr(); + } + + return set_backend (_backends.begin()->first, "", ""); +} + boost::shared_ptr AudioEngine::set_backend (const std::string& name, const std::string& arg1, const std::string& arg2) { -- cgit v1.2.3 From fdda8127eff8daad24a64ff9173d5ce4dc1e3f21 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Sat, 12 Oct 2013 10:03:50 -0400 Subject: adapt AudioEngine to new AudioBackend API --- libs/ardour/ardour/audioengine.h | 7 +++-- libs/ardour/audioengine.cc | 67 ++++++++++++++++++++++++++-------------- 2 files changed, 48 insertions(+), 26 deletions(-) (limited to 'libs/ardour/audioengine.cc') diff --git a/libs/ardour/ardour/audioengine.h b/libs/ardour/ardour/audioengine.h index 45257d8129..d5dcbffe2b 100644 --- a/libs/ardour/ardour/audioengine.h +++ b/libs/ardour/ardour/audioengine.h @@ -83,8 +83,8 @@ public: * just forward to a backend implementation. */ - int start (); - int stop (); + int start (bool for_latency_measurement=false); + int stop (bool for_latency_measurement=false); int pause (); int freewheel (bool start_stop); float get_cpu_load() const ; @@ -194,7 +194,7 @@ public: MTDM* mtdm(); int prepare_for_latency_measurement (); - void start_latency_detection (); + int start_latency_detection (); void stop_latency_detection (); void set_latency_input_port (const std::string&); void set_latency_output_port (const std::string&); @@ -229,6 +229,7 @@ public: std::string _latency_input_name; std::string _latency_output_name; framecnt_t _latency_signal_latency; + bool _stopped_for_latency; bool _started_for_latency; bool _in_destructor; diff --git a/libs/ardour/audioengine.cc b/libs/ardour/audioengine.cc index a9956666d8..c2224a8b5e 100644 --- a/libs/ardour/audioengine.cc +++ b/libs/ardour/audioengine.cc @@ -80,7 +80,7 @@ AudioEngine::AudioEngine () , _latency_output_port (0) , _latency_flush_frames (0) , _latency_signal_latency (0) - , _started_for_latency (false) + , _stopped_for_latency (false) , _in_destructor (false) { g_atomic_int_set (&m_meter_exit, 0); @@ -596,7 +596,7 @@ AudioEngine::set_backend (const std::string& name, const std::string& arg1, cons /* BACKEND PROXY WRAPPERS */ int -AudioEngine::start () +AudioEngine::start (bool for_latency) { if (!_backend) { return -1; @@ -609,7 +609,7 @@ AudioEngine::start () _processed_frames = 0; last_monitor_check = 0; - if (_backend->start()) { + if (_backend->start (for_latency)) { return -1; } @@ -625,7 +625,7 @@ AudioEngine::start () start_metering_thread (); - if (!_started_for_latency) { + if (!for_latency) { Running(); /* EMIT SIGNAL */ } @@ -633,7 +633,7 @@ AudioEngine::start () } int -AudioEngine::stop () +AudioEngine::stop (bool for_latency) { if (!_backend) { return 0; @@ -654,7 +654,10 @@ AudioEngine::stop () stop_metering_thread (); Port::PortDrop (); - Stopped (); /* EMIT SIGNAL */ + + if (!for_latency) { + Stopped (); /* EMIT SIGNAL */ + } return 0; } @@ -1018,7 +1021,10 @@ AudioEngine::halted_callback (const char* why) _running = false; Port::PortDrop (); /* EMIT SIGNAL */ - Halted (why); /* EMIT SIGNAL */ + + if (!_started_for_latency) { + Halted (why); /* EMIT SIGNAL */ + } } bool @@ -1047,23 +1053,26 @@ AudioEngine::mtdm() int AudioEngine::prepare_for_latency_measurement () { - if (!running()) { - _started_for_latency = true; + if (running()) { + _stopped_for_latency = true; + stop (true); + } - if (start()) { - _started_for_latency = false; - return -1; - } + if (start (true)) { + _started_for_latency = true; + return -1; } return 0; } -void +int AudioEngine::start_latency_detection () { - if (prepare_for_latency_measurement ()) { - return; + if (!running()) { + if (prepare_for_latency_measurement ()) { + return -1; + } } PortEngine& pe (port_engine()); @@ -1077,27 +1086,32 @@ AudioEngine::start_latency_detection () PortEngine::PortHandle* in = pe.get_port_by_name (_latency_input_name); if (!out || !in) { - return; + stop (true); + return -1; } /* create the ports we will use to read/write data */ if ((_latency_output_port = pe.register_port ("latency_out", DataType::AUDIO, IsOutput)) == 0) { - return; + stop (true); + return -1; } if (pe.connect (_latency_output_port, _latency_output_name)) { pe.unregister_port (_latency_output_port); - return; + stop (true); + return -1; } const string portname ("latency_in"); if ((_latency_input_port = pe.register_port (portname, DataType::AUDIO, IsInput)) == 0) { pe.unregister_port (_latency_output_port); - return; + stop (true); + return -1; } if (pe.connect (_latency_input_name, make_port_name_non_relative (portname))) { pe.unregister_port (_latency_output_port); - return; + stop (true); + return -1; } LatencyRange lr; @@ -1113,6 +1127,7 @@ AudioEngine::start_latency_detection () _measuring_latency = true; _latency_flush_frames = samples_per_cycle(); + return 0; } void @@ -1128,9 +1143,15 @@ AudioEngine::stop_latency_detection () port_engine().unregister_port (_latency_input_port); _latency_input_port = 0; } - if (_started_for_latency) { - stop (); + + stop (true); + + if (_stopped_for_latency) { + start (); } + + _stopped_for_latency = false; + _started_for_latency = false; } void -- cgit v1.2.3