jsweeper/src/jack.h

84 lines
1.8 KiB
C
Raw Normal View History

#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