Splice mode: exclude newly-added regions from being shuffled
[ardour.git] / libs / ardour / audioengine.cc
index 45b8bbf7573a1d10f59ff72dbb8296e5c658fdb1..8d4b17ebd4c607f27065bd79d66b703e4518b46a 100644 (file)
@@ -34,8 +34,6 @@
 #include "pbd/stacktrace.h"
 #include "pbd/unknown_type.h"
 
-#include <jack/weakjack.h>
-
 #include "midi++/port.h"
 #include "midi++/mmc.h"
 
@@ -43,7 +41,7 @@
 #include "ardour/audio_port.h"
 #include "ardour/audio_backend.h"
 #include "ardour/audioengine.h"
-#include "ardour/backend_search_path.h"
+#include "ardour/search_paths.h"
 #include "ardour/buffer.h"
 #include "ardour/cycle_timer.h"
 #include "ardour/internal_send.h"
@@ -474,8 +472,17 @@ AudioEngine::discover_backends ()
 
        Glib::PatternSpec so_extension_pattern("*backend.so");
        Glib::PatternSpec dylib_extension_pattern("*backend.dylib");
-       Glib::PatternSpec dll_extension_pattern("*backend.dll");
 
+#if defined(PLATFORM_WINDOWS) && defined(DEBUGGABLE_BACKENDS)
+       #if defined(DEBUG) || defined(_DEBUG)
+               Glib::PatternSpec dll_extension_pattern("*backendD.dll");
+       #else
+               Glib::PatternSpec dll_extension_pattern("*backendRDC.dll");
+       #endif
+#else
+       Glib::PatternSpec dll_extension_pattern("*backend.dll");
+#endif
+       
        find_matching_files_in_search_path (backend_search_path (),
                                            so_extension_pattern, backend_modules);
 
@@ -485,17 +492,21 @@ AudioEngine::discover_backends ()
        find_matching_files_in_search_path (backend_search_path (),
                                            dll_extension_pattern, backend_modules);
 
-       DEBUG_TRACE (DEBUG::Panning, string_compose (_("looking for backends in %1\n"), backend_search_path().to_string()));
+       DEBUG_TRACE (DEBUG::AudioEngine, string_compose ("looking for backends in %1\n", backend_search_path().to_string()));
 
        for (vector<std::string>::iterator i = backend_modules.begin(); i != backend_modules.end(); ++i) {
 
                AudioBackendInfo* info;
 
+               DEBUG_TRACE (DEBUG::AudioEngine, string_compose ("Checking possible backend in %1\n", *i));
+
                if ((info = backend_discover (*i)) != 0) {
                        _backends.insert (make_pair (info->name, info));
                }
        }
 
+       DEBUG_TRACE (DEBUG::AudioEngine, string_compose ("Found %1 backends\n", _backends.size()));
+
        return _backends.size();
 }
 
@@ -553,6 +564,7 @@ AudioEngine::drop_backend ()
 {
        if (_backend) {
                _backend->stop ();
+        _backend->drop_device();
                _backend.reset ();
        }
 }
@@ -582,7 +594,7 @@ AudioEngine::set_backend (const std::string& name, const std::string& arg1, cons
                if (b->second->instantiate (arg1, arg2)) {
                        throw failed_constructor ();
                }
-
+               
                _backend = b->second->factory (*this);
 
        } catch (exception& e) {
@@ -675,12 +687,12 @@ AudioEngine::freewheel (bool start_stop)
 }
 
 float
-AudioEngine::get_cpu_load() const 
+AudioEngine::get_dsp_load() const 
 {
        if (!_backend) {
                return 0.0;
        }
-       return _backend->cpu_load ();
+       return _backend->dsp_load ();
 }
 
 bool
@@ -883,15 +895,6 @@ AudioEngine::set_buffer_size (uint32_t bufsiz)
        return _backend->set_buffer_size  (bufsiz);
 }
 
-int
-AudioEngine::set_sample_format (SampleFormat sf)
-{
-       if (!_backend) {
-               return -1;
-       }
-       return _backend->set_sample_format  (sf);
-}
-
 int
 AudioEngine::set_interleaved (bool yn)
 {
@@ -1013,17 +1016,15 @@ AudioEngine::halted_callback (const char* why)
 bool
 AudioEngine::setup_required () const
 {
-       /* If there is only a single backend and it claims to be configured
-        * already there is no setup to be done.
-        *
-        * Primarily for a case where there is only a JACK backend and
-        * JACK is already running.
-        */
-        
-       if (_backends.size() == 1 && _backends.begin()->second->already_configured()) {
-               return false;
+       if (_backend) {
+               if (_backend->info().already_configured())
+                       return false;
+       } else {
+               if (_backends.size() == 1 && _backends.begin()->second->already_configured()) {
+                       return false;
+               }
        }
-
+       
        return true;
 }
 
@@ -1065,8 +1066,8 @@ AudioEngine::start_latency_detection ()
 
        /* find the ports we will connect to */
 
-       PortEngine::PortHandle* out = pe.get_port_by_name (_latency_output_name);
-       PortEngine::PortHandle* in = pe.get_port_by_name (_latency_input_name);
+       PortEngine::PortHandle out = pe.get_port_by_name (_latency_output_name);
+       PortEngine::PortHandle in = pe.get_port_by_name (_latency_input_name);
 
        if (!out || !in) {
                stop (true);