summaryrefslogtreecommitdiffstats
path: root/src/engine/JackAudioDriver.hpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2010-01-05 21:32:55 +0000
committerDavid Robillard <d@drobilla.net>2010-01-05 21:32:55 +0000
commit534b3d2248884d5a8352c2239c668e632ab16b41 (patch)
tree1307d53d6c62d3ab51b1ad0f3056d387fba9a682 /src/engine/JackAudioDriver.hpp
parentf4800095303dbcdec079d9c96b921f169696903c (diff)
downloadingen-534b3d2248884d5a8352c2239c668e632ab16b41.tar.gz
ingen-534b3d2248884d5a8352c2239c668e632ab16b41.tar.bz2
ingen-534b3d2248884d5a8352c2239c668e632ab16b41.zip
Merge JackMidiDriver and JackAudioDriver.
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@2343 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/engine/JackAudioDriver.hpp')
-rw-r--r--src/engine/JackAudioDriver.hpp73
1 files changed, 26 insertions, 47 deletions
diff --git a/src/engine/JackAudioDriver.hpp b/src/engine/JackAudioDriver.hpp
index 02a60601..5ff6bf64 100644
--- a/src/engine/JackAudioDriver.hpp
+++ b/src/engine/JackAudioDriver.hpp
@@ -24,7 +24,7 @@
#include "raul/List.hpp"
#include "raul/Semaphore.hpp"
#include "raul/Thread.hpp"
-#include "AudioDriver.hpp"
+#include "Driver.hpp"
#include "Buffer.hpp"
#include "ProcessContext.hpp"
@@ -55,8 +55,8 @@ public:
void move(const Raul::Path& path);
- void pre_process(jack_nframes_t nframes);
- void post_process(jack_nframes_t nframes);
+ void pre_process(ProcessContext& context);
+ void post_process(ProcessContext& context);
jack_port_t* jack_port() const { return _jack_port; }
@@ -67,7 +67,7 @@ private:
-/** The Jack AudioDriver.
+/** The Jack Driver.
*
* The process callback here drives the entire audio thread by "pulling"
* events from queues, processing them, running the patches, and passing
@@ -75,12 +75,14 @@ private:
*
* \ingroup engine
*/
-class JackAudioDriver : public AudioDriver
+class JackAudioDriver : public Driver
{
public:
JackAudioDriver(Engine& engine);
~JackAudioDriver();
+ bool supports(Shared::PortType port_type, Shared::EventType event_type);
+
bool attach(const std::string& server_name,
const std::string& client_name,
void* jack_client);
@@ -122,15 +124,24 @@ public:
private:
friend class JackAudioPort;
- // These are the static versions of the callbacks, they call
- // the non-static ones below
- inline static void thread_init_cb(void* const jack_driver);
- inline static void shutdown_cb(void* const jack_driver);
- inline static int process_cb(jack_nframes_t nframes, void* const jack_driver);
- inline static int buffer_size_cb(jack_nframes_t nframes, void* const jack_driver);
- inline static int sample_rate_cb(jack_nframes_t nframes, void* const jack_driver);
-
- // Non static callbacks
+ // Static JACK callbacks which call the non-static callbacks (methods)
+ inline static void thread_init_cb(void* const jack_driver) {
+ return ((JackAudioDriver*)jack_driver)->_thread_init_cb();
+ }
+ inline static void shutdown_cb(void* const jack_driver) {
+ return ((JackAudioDriver*)jack_driver)->_shutdown_cb();
+ }
+ inline static int process_cb(jack_nframes_t nframes, void* const jack_driver) {
+ return ((JackAudioDriver*)jack_driver)->_process_cb(nframes);
+ }
+ inline static int buffer_size_cb(jack_nframes_t nframes, void* const jack_driver) {
+ return ((JackAudioDriver*)jack_driver)->_buffer_size_cb(nframes);
+ }
+ inline static int sample_rate_cb(jack_nframes_t nframes, void* const jack_driver) {
+ return ((JackAudioDriver*)jack_driver)->_sample_rate_cb(nframes);
+ }
+
+ // Non static callbacks (methods)
void _thread_init_cb();
void _shutdown_cb();
int _process_cb(jack_nframes_t nframes);
@@ -144,6 +155,7 @@ private:
jack_client_t* _client;
jack_nframes_t _buffer_size;
jack_nframes_t _sample_rate;
+ uint32_t _midi_event_type;
bool _is_activated;
bool _local_client; ///< Whether _client should be closed on destruction
jack_position_t _position;
@@ -156,39 +168,6 @@ private:
};
-inline int JackAudioDriver::process_cb(jack_nframes_t nframes, void* jack_driver)
-{
- assert(jack_driver);
- return ((JackAudioDriver*)jack_driver)->_process_cb(nframes);
-}
-
-inline void JackAudioDriver::thread_init_cb(void* jack_driver)
-{
- assert(jack_driver);
- return ((JackAudioDriver*)jack_driver)->_thread_init_cb();
-}
-
-inline void JackAudioDriver::shutdown_cb(void* jack_driver)
-{
- assert(jack_driver);
- return ((JackAudioDriver*)jack_driver)->_shutdown_cb();
-}
-
-
-inline int JackAudioDriver::buffer_size_cb(jack_nframes_t nframes, void* jack_driver)
-{
- assert(jack_driver);
- return ((JackAudioDriver*)jack_driver)->_buffer_size_cb(nframes);
-}
-
-
-inline int JackAudioDriver::sample_rate_cb(jack_nframes_t nframes, void* jack_driver)
-{
- assert(jack_driver);
- return ((JackAudioDriver*)jack_driver)->_sample_rate_cb(nframes);
-}
-
-
} // namespace Ingen
#endif // JACKAUDIODRIVER_H