summaryrefslogtreecommitdiff
path: root/libs/ardour/audioengine.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2013-08-01 14:43:12 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2013-08-01 14:43:12 -0400
commit682ebad62bdc85df151ad0b81dc27cc9f3e71cec (patch)
tree3e283d18fa8609a1f98502a038b9388f8404285a /libs/ardour/audioengine.cc
parent18c68bfd12130b8a3e95c99d3c0472c8b7f377bc (diff)
full compilation and linking (coding not finished, will not run)
Diffstat (limited to 'libs/ardour/audioengine.cc')
-rw-r--r--libs/ardour/audioengine.cc178
1 files changed, 145 insertions, 33 deletions
diff --git a/libs/ardour/audioengine.cc b/libs/ardour/audioengine.cc
index 3d1bf6e77e..05f59707a8 100644
--- a/libs/ardour/audioengine.cc
+++ b/libs/ardour/audioengine.cc
@@ -104,39 +104,6 @@ AudioEngine::create (const std::string& bcn, const std::string& bsu)
}
void
-AudioEngine::drop_backend ()
-{
- if (_backend) {
- _backend->stop ();
- _backend.reset ();
- }
-}
-
-int
-AudioEngine::set_backend (const std::string& name)
-{
- BackendMap::iterator b = _backends.find (name);
-
- if (b == _backends.end()) {
- return -1;
- }
-
- drop_backend ();
-
- try {
-
- _backend = b->second->backend_factory (*this);
- _impl = b->second->portengine_factory (*this);
-
- } catch (...) {
- error << string_compose (_("Could not create backend for %1"), name) << endmsg;
- return -1;
- }
-
- return 0;
-}
-
-void
_thread_init_callback (void * /*arg*/)
{
/* make sure that anybody who needs to know about this thread
@@ -570,6 +537,60 @@ AudioEngine::backend_discover (const string& path)
return info;
}
+vector<string>
+AudioEngine::available_backends() const
+{
+ vector<string> r;
+
+ for (BackendMap::const_iterator i = _backends.begin(); i != _backends.end(); ++i) {
+ r.push_back (i->first);
+ }
+
+ return r;
+}
+
+string
+AudioEngine::current_backend_name() const
+{
+ if (_backend) {
+ return _backend->name();
+ }
+ return string();
+}
+
+void
+AudioEngine::drop_backend ()
+{
+ if (_backend) {
+ _backend->stop ();
+ _backend.reset ();
+ }
+}
+
+int
+AudioEngine::set_backend (const std::string& name)
+{
+ BackendMap::iterator b = _backends.find (name);
+
+ if (b == _backends.end()) {
+ return -1;
+ }
+
+ drop_backend ();
+
+ try {
+
+ _backend = b->second->backend_factory (*this);
+ _impl = b->second->portengine_factory (*this);
+
+ } catch (...) {
+ error << string_compose (_("Could not create backend for %1"), name) << endmsg;
+ return -1;
+ }
+
+ return 0;
+}
+
/* BACKEND PROXY WRAPPERS */
int
@@ -812,6 +833,89 @@ AudioEngine::create_process_thread (boost::function<void()> func, pthread_t* thr
}
+int
+AudioEngine::set_device_name (const std::string& name)
+{
+ if (!_backend) {
+ return -1;
+ }
+ return _backend->set_device_name (name);
+}
+
+int
+AudioEngine::set_sample_rate (float sr)
+{
+ if (!_backend) {
+ return -1;
+ }
+ return _backend->set_sample_rate (sr);
+}
+
+int
+AudioEngine::set_buffer_size (uint32_t bufsiz)
+{
+ if (!_backend) {
+ return -1;
+ }
+ 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)
+{
+ if (!_backend) {
+ return -1;
+ }
+ return _backend->set_interleaved (yn);
+}
+
+int
+AudioEngine::set_input_channels (uint32_t ic)
+{
+ if (!_backend) {
+ return -1;
+ }
+ return _backend->set_input_channels (ic);
+}
+
+int
+AudioEngine::set_output_channels (uint32_t oc)
+{
+ if (!_backend) {
+ return -1;
+ }
+ return _backend->set_output_channels (oc);
+}
+
+int
+AudioEngine::set_systemic_input_latency (uint32_t il)
+{
+ if (!_backend) {
+ return -1;
+ }
+ return _backend->set_systemic_input_latency (il);
+}
+
+int
+AudioEngine::set_systemic_output_latency (uint32_t ol)
+{
+ if (!_backend) {
+ return -1;
+ }
+ return _backend->set_systemic_output_latency (ol);
+}
+
+/* END OF BACKEND PROXY API */
+
void
AudioEngine::thread_init_callback (void* arg)
{
@@ -874,6 +978,14 @@ AudioEngine::latency_callback (bool for_playback)
}
void
+AudioEngine::update_latencies ()
+{
+ if (_backend) {
+ _backend->update_latencies ();
+ }
+}
+
+void
AudioEngine::halted_callback (const char* why)
{
stop_metering_thread ();