84 lines
1.8 KiB
C++
84 lines
1.8 KiB
C++
|
|
#ifndef JACK_H
|
|
#define JACK_H
|
|
|
|
#include <jack/jack.h>
|
|
#include <jack/ringbuffer.h>
|
|
|
|
#ifndef HAVE_RENAME
|
|
typedef int (*JackPortRenameCallback)(jack_port_id_t port, const char* old_name, const char* new_name, void *arg);
|
|
int jack_set_port_rename_callback (jack_client_t *, JackPortRenameCallback rename_callback, void *arg) __attribute__((__weak__));
|
|
#endif
|
|
|
|
enum PortEventType
|
|
{
|
|
PET_REGISTER,
|
|
PET_UNREGISTER,
|
|
PET_CONNECT,
|
|
PET_DISCONNECT,
|
|
PET_RENAME
|
|
};
|
|
|
|
struct PortEvent
|
|
{
|
|
PortEventType type;
|
|
jack_port_id_t port_id_a;
|
|
jack_port_id_t port_id_b;
|
|
};
|
|
|
|
class JackDriver
|
|
{
|
|
private:
|
|
bool m_connected;
|
|
jack_client_t *m_client;
|
|
jack_ringbuffer_t *m_buffer;
|
|
|
|
static void ShutdownCallbackHandler(void *arg)
|
|
{
|
|
((JackDriver *)arg)->ShutdownCallback();
|
|
}
|
|
|
|
static void PortRegistrationCallbackHandler(jack_port_id_t port_id, int reg, void *arg)
|
|
{
|
|
((JackDriver *)arg)->PortRegistrationCallback(port_id, reg);
|
|
}
|
|
|
|
static void PortConnectCallbackHandler(jack_port_id_t port_id_a, jack_port_id_t port_id_b, int connect, void *arg)
|
|
{
|
|
((JackDriver *)arg)->PortConnectCallback(port_id_a, port_id_b, connect);
|
|
}
|
|
|
|
static int PortRenameCallbackHandler(jack_port_id_t port_id, const char * /*old_name*/, const char * /*new_name*/, void *arg)
|
|
{
|
|
return ((JackDriver *)arg)->PortRenameCallback(port_id);
|
|
}
|
|
|
|
void ShutdownCallback();
|
|
void PortRegistrationCallback(jack_port_id_t port, int reg);
|
|
void PortConnectCallback(jack_port_id_t a, jack_port_id_t b, int connect);
|
|
int PortRenameCallback(jack_port_id_t port_id);
|
|
|
|
public:
|
|
JackDriver();
|
|
~JackDriver();
|
|
|
|
void Connect();
|
|
void Disconnect();
|
|
|
|
bool IsConnected() const
|
|
{
|
|
return m_connected;
|
|
}
|
|
|
|
bool ProcessEvents();
|
|
|
|
void Connect(jack_port_t *a, jack_port_t *b);
|
|
void Disconnect(jack_port_t *a, jack_port_t *b);
|
|
|
|
jack_client_t *GetClient() { return m_client; }
|
|
};
|
|
|
|
extern JackDriver jack;
|
|
|
|
#endif // JACK_H
|