Add support for jack2 rename callback (not yet optional)
git-svn-id: file:///home/vcs/svn/jsweeper/trunk@20 6611ac79-6612-48ef-a1e9-b906f853523emaster
parent
363d5ae27c
commit
c422a5d50c
23
src/jack.cpp
23
src/jack.cpp
|
@ -37,6 +37,9 @@ void JackDriver::Connect()
|
|||
jack_on_shutdown(m_client, &ShutdownCallbackHandler, this);
|
||||
jack_set_port_registration_callback(m_client, &PortRegistrationCallbackHandler, this);
|
||||
jack_set_port_connect_callback(m_client, &PortConnectCallbackHandler, this);
|
||||
if (jack_set_port_rename_callback) {
|
||||
jack_set_port_rename_callback(m_client, &PortRenameCallbackHandler, this);
|
||||
}
|
||||
|
||||
jack_activate(m_client);
|
||||
|
||||
|
@ -96,6 +99,21 @@ void JackDriver::PortConnectCallback(jack_port_id_t port_id_a, jack_port_id_t po
|
|||
}
|
||||
}
|
||||
|
||||
int JackDriver::PortRenameCallback(jack_port_id_t port_id, const char * /*name*/)
|
||||
{
|
||||
PortEvent pe;
|
||||
pe.type = PET_RENAME;
|
||||
pe.port_id_a = port_id;
|
||||
|
||||
if (jack_ringbuffer_write_space(m_buffer) < sizeof pe) {
|
||||
std::cerr << "Ringbuffer full!" << std::endl;
|
||||
} else {
|
||||
jack_ringbuffer_write(m_buffer, (const char *)&pe, sizeof pe);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool JackDriver::ProcessEvents()
|
||||
{
|
||||
bool ret = false;
|
||||
|
@ -125,6 +143,11 @@ bool JackDriver::ProcessEvents()
|
|||
pm.Disconnect(jack_port_by_id(m_client, pe.port_id_a), jack_port_by_id(m_client, pe.port_id_b));
|
||||
ret = true;
|
||||
break;
|
||||
|
||||
case PET_RENAME:
|
||||
pm.Rename(jack_port_by_id(m_client, pe.port_id_a));
|
||||
ret = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -10,7 +10,8 @@ enum PortEventType
|
|||
PET_REGISTER,
|
||||
PET_UNREGISTER,
|
||||
PET_CONNECT,
|
||||
PET_DISCONNECT
|
||||
PET_DISCONNECT,
|
||||
PET_RENAME
|
||||
};
|
||||
|
||||
struct PortEvent
|
||||
|
@ -42,9 +43,15 @@ private:
|
|||
((JackDriver *)arg)->PortConnectCallback(port_id_a, port_id_b, connect);
|
||||
}
|
||||
|
||||
static int PortRenameCallbackHandler(jack_port_id_t port_id, const char *name, void *arg)
|
||||
{
|
||||
return ((JackDriver *)arg)->PortRenameCallback(port_id, name);
|
||||
}
|
||||
|
||||
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, const char *name);
|
||||
|
||||
public:
|
||||
JackDriver();
|
||||
|
|
|
@ -192,6 +192,12 @@ void PortManager::Disconnect(jack_port_t *port_a, jack_port_t *port_b)
|
|||
//std::clog << "Disconnecting '" << jack_port_name(port_a) << "' from '" << jack_port_name(port_b) << "'" << std::endl;
|
||||
}
|
||||
|
||||
void PortManager::Rename(jack_port_t *port)
|
||||
{
|
||||
Delete(port);
|
||||
Add(port);
|
||||
}
|
||||
|
||||
Client *PortManager::FindOrMakeClient(std::string name, bool is_input, bool is_midi)
|
||||
{
|
||||
ClientList::iterator it;
|
||||
|
|
|
@ -31,6 +31,8 @@ public:
|
|||
void Connect(jack_port_t *port_a, jack_port_t *port_b);
|
||||
void Disconnect(jack_port_t *port_a, jack_port_t *port_b);
|
||||
|
||||
void Rename(jack_port_t *port);
|
||||
|
||||
Client *FindOrMakeClient(std::string name, bool is_input, bool is_midi);
|
||||
PortGroup *FindOrMakeGroup(Client *client, JackPortFlags flags, std::string name);
|
||||
Port *FindPort(jack_port_t *port);
|
||||
|
|
Loading…
Reference in New Issue