jsweeper/src/jack.h

70 lines
1.3 KiB
C++

#ifndef JACK_H
#define JACK_H
#include <jack/jack.h>
#include <jack/ringbuffer.h>
enum PortEventType
{
PET_REGISTER,
PET_UNREGISTER,
PET_CONNECT,
PET_DISCONNECT
};
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);
}
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);
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);
};
extern JackDriver jack;
#endif // JACK_H