git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@1472 0c269be4-1314-0410-8aa9-9f06e86f4224tags/0.63
@@ -2,6 +2,10 @@ | |||||
Jackdmp changes log | Jackdmp changes log | ||||
--------------------------- | --------------------------- | ||||
2007-05-05 Stephane Letz <letz@grame.fr> | |||||
* Add jack_set_client_registration_callback API. | |||||
2007-05-04 Stephane Letz <letz@grame.fr> | 2007-05-04 Stephane Letz <letz@grame.fr> | ||||
* Steven Chamberlain patch to fix jack_port_type. Test for jack_port_type behaviour in jack_test.cpp tool. | * Steven Chamberlain patch to fix jack_port_type. Test for jack_port_type behaviour in jack_test.cpp tool. | ||||
@@ -76,6 +76,9 @@ extern "C" | |||||
EXPORT int jack_set_sample_rate_callback (jack_client_t *client, | EXPORT int jack_set_sample_rate_callback (jack_client_t *client, | ||||
JackSampleRateCallback srate_callback, | JackSampleRateCallback srate_callback, | ||||
void *arg); | void *arg); | ||||
EXPORT int jack_set_client_registration_callback (jack_client_t *, | |||||
JackClientRegistrationCallback | |||||
registration_callback, void *arg); | |||||
EXPORT int jack_set_port_registration_callback (jack_client_t *, | EXPORT int jack_set_port_registration_callback (jack_client_t *, | ||||
JackPortRegistrationCallback | JackPortRegistrationCallback | ||||
registration_callback, void *arg); | registration_callback, void *arg); | ||||
@@ -649,7 +652,6 @@ EXPORT int jack_set_sample_rate_callback(jack_client_t* ext_client, JackSampleRa | |||||
JackLibGlobals::CheckContext(); | JackLibGlobals::CheckContext(); | ||||
#endif | #endif | ||||
JackClient* client = (JackClient*)ext_client; | JackClient* client = (JackClient*)ext_client; | ||||
JackLog("jack_set_sample_rate_callback ext_client %x client %x \n", ext_client, client); | |||||
if (client == NULL) { | if (client == NULL) { | ||||
jack_error("jack_set_sample_rate_callback called with a NULL client"); | jack_error("jack_set_sample_rate_callback called with a NULL client"); | ||||
return -1; | return -1; | ||||
@@ -659,6 +661,20 @@ EXPORT int jack_set_sample_rate_callback(jack_client_t* ext_client, JackSampleRa | |||||
} | } | ||||
} | } | ||||
EXPORT int jack_set_client_registration_callback(jack_client_t* ext_client, JackClientRegistrationCallback registration_callback, void* arg) | |||||
{ | |||||
#ifdef __CLIENTDEBUG__ | |||||
JackLibGlobals::CheckContext(); | |||||
#endif | |||||
JackClient* client = (JackClient*)ext_client; | |||||
if (client == NULL) { | |||||
jack_error("jack_set_client_registration_callback called with a NULL client"); | |||||
return -1; | |||||
} else { | |||||
return client->SetClientRegistrationCallback(registration_callback, arg); | |||||
} | |||||
} | |||||
EXPORT int jack_set_port_registration_callback(jack_client_t* ext_client, JackPortRegistrationCallback registration_callback, void* arg) | EXPORT int jack_set_port_registration_callback(jack_client_t* ext_client, JackPortRegistrationCallback registration_callback, void* arg) | ||||
{ | { | ||||
#ifdef __CLIENTDEBUG__ | #ifdef __CLIENTDEBUG__ | ||||
@@ -128,9 +128,12 @@ int JackClient::ClientNotify(int refnum, const char* name, int notify, int sync, | |||||
switch (notify) { | switch (notify) { | ||||
case JackNotifyChannelInterface::kAddClient: | case JackNotifyChannelInterface::kAddClient: | ||||
case JackNotifyChannelInterface::kRemoveClient: | |||||
res = ClientNotifyImp(refnum, name, notify, sync, value); | res = ClientNotifyImp(refnum, name, notify, sync, value); | ||||
break; | |||||
break; | |||||
case JackNotifyChannelInterface::kRemoveClient: | |||||
res = ClientNotifyImp(refnum, name, notify, sync, value); | |||||
break; | |||||
case JackNotifyChannelInterface::kActivateClient: | case JackNotifyChannelInterface::kActivateClient: | ||||
JackLog("JackClient::kActivateClient name = %s ref = %ld \n", name, refnum); | JackLog("JackClient::kActivateClient name = %s ref = %ld \n", name, refnum); | ||||
@@ -145,6 +148,18 @@ int JackClient::ClientNotify(int refnum, const char* name, int notify, int sync, | |||||
if (IsActive()) { | if (IsActive()) { | ||||
switch (notify) { | switch (notify) { | ||||
case JackNotifyChannelInterface::kAddClient: | |||||
printf("ClientNotify fName = %s name = %s\n", GetClientControl()->fName, name); | |||||
if (fClientRegistration && strcmp(GetClientControl()->fName, name) != 0) // Don't call the callback for the registering client itself | |||||
fClientRegistration(name, 1, fClientRegistrationArg); | |||||
break; | |||||
case JackNotifyChannelInterface::kRemoveClient: | |||||
printf("ClientNotify fName = %s name = %s\n", GetClientControl()->fName, name); | |||||
if (fClientRegistration && strcmp(GetClientControl()->fName, name) != 0) // Don't call the callback for the registering client itself | |||||
fClientRegistration(name, 0, fClientRegistrationArg); | |||||
break; | |||||
case JackNotifyChannelInterface::kBufferSizeCallback: | case JackNotifyChannelInterface::kBufferSizeCallback: | ||||
JackLog("JackClient::kBufferSizeCallback buffer_size = %ld\n", value); | JackLog("JackClient::kBufferSizeCallback buffer_size = %ld\n", value); | ||||
@@ -759,6 +774,18 @@ int JackClient::SetBufferSizeCallback(JackBufferSizeCallback callback, void *arg | |||||
} | } | ||||
} | } | ||||
int JackClient::SetClientRegistrationCallback(JackClientRegistrationCallback callback, void* arg) | |||||
{ | |||||
if (IsActive()) { | |||||
jack_error("You cannot set callbacks on an active client"); | |||||
return -1; | |||||
} else { | |||||
fPortRegistrationArg = arg; | |||||
fClientRegistration = callback; | |||||
return 0; | |||||
} | |||||
} | |||||
int JackClient::SetFreewheelCallback(JackFreewheelCallback callback, void *arg) | int JackClient::SetFreewheelCallback(JackFreewheelCallback callback, void *arg) | ||||
{ | { | ||||
if (IsActive()) { | if (IsActive()) { | ||||
@@ -58,6 +58,7 @@ class JackClient : public JackClientInterface, public JackRunnableInterface | |||||
JackShutdownCallback fShutdown; | JackShutdownCallback fShutdown; | ||||
JackThreadInitCallback fInit; | JackThreadInitCallback fInit; | ||||
JackBufferSizeCallback fBufferSize; | JackBufferSizeCallback fBufferSize; | ||||
JackClientRegistrationCallback fClientRegistration; | |||||
JackFreewheelCallback fFreewheel; | JackFreewheelCallback fFreewheel; | ||||
JackPortRegistrationCallback fPortRegistration; | JackPortRegistrationCallback fPortRegistration; | ||||
JackTimebaseCallback fTimebase; | JackTimebaseCallback fTimebase; | ||||
@@ -68,6 +69,7 @@ class JackClient : public JackClientInterface, public JackRunnableInterface | |||||
void* fShutdownArg; | void* fShutdownArg; | ||||
void* fInitArg; | void* fInitArg; | ||||
void* fBufferSizeArg; | void* fBufferSizeArg; | ||||
void* fClientRegistrationArg; | |||||
void* fFreewheelArg; | void* fFreewheelArg; | ||||
void* fPortRegistrationArg; | void* fPortRegistrationArg; | ||||
void* fTimebaseArg; | void* fTimebaseArg; | ||||
@@ -144,6 +146,7 @@ class JackClient : public JackClientInterface, public JackRunnableInterface | |||||
virtual int SetInitCallback(JackThreadInitCallback callback, void* arg); | virtual int SetInitCallback(JackThreadInitCallback callback, void* arg); | ||||
virtual int SetGraphOrderCallback(JackGraphOrderCallback callback, void* arg); | virtual int SetGraphOrderCallback(JackGraphOrderCallback callback, void* arg); | ||||
virtual int SetBufferSizeCallback(JackBufferSizeCallback callback, void* arg); | virtual int SetBufferSizeCallback(JackBufferSizeCallback callback, void* arg); | ||||
virtual int SetClientRegistrationCallback(JackClientRegistrationCallback callback, void* arg); | |||||
virtual int SetFreewheelCallback(JackFreewheelCallback callback, void* arg); | virtual int SetFreewheelCallback(JackFreewheelCallback callback, void* arg); | ||||
virtual int SetPortRegistrationCallback(JackPortRegistrationCallback callback, void* arg); | virtual int SetPortRegistrationCallback(JackPortRegistrationCallback callback, void* arg); | ||||
@@ -309,6 +309,16 @@ extern "C" | |||||
JackSampleRateCallback srate_callback, | JackSampleRateCallback srate_callback, | ||||
void *arg); | void *arg); | ||||
/** | |||||
* Tell the JACK server to call @a registration_callback whenever a | |||||
* port is registered or unregistered, passing @a arg as a parameter. | |||||
* | |||||
* @return 0 on success, otherwise a non-zero error code | |||||
*/ | |||||
int jack_set_client_registration_callback (jack_client_t *, | |||||
JackClientRegistrationCallback | |||||
registration_callback, void *arg); | |||||
/** | /** | ||||
* Tell the JACK server to call @a registration_callback whenever a | * Tell the JACK server to call @a registration_callback whenever a | ||||
* port is registered or unregistered, passing @a arg as a parameter. | * port is registered or unregistered, passing @a arg as a parameter. | ||||
@@ -179,6 +179,17 @@ typedef int (*JackSampleRateCallback)(jack_nframes_t nframes, void *arg); | |||||
*/ | */ | ||||
typedef void (*JackPortRegistrationCallback)(jack_port_id_t port, int, void *arg); | typedef void (*JackPortRegistrationCallback)(jack_port_id_t port, int, void *arg); | ||||
/** | |||||
* Prototype for the client supplied function that is called | |||||
* whenever a client is registered or unregistered. | |||||
* | |||||
* @param name a null-terminated string containing the client name | |||||
* @param register non-zero if the client is being registered, | |||||
* zero if the client is being unregistered | |||||
* @param arg pointer to a client supplied structure | |||||
*/ | |||||
typedef void (*JackClientRegistrationCallback)(const char* name, int register, void *arg); | |||||
/** | /** | ||||
* Prototype for the client supplied function that is called | * Prototype for the client supplied function that is called | ||||
* whenever jackd starts or stops freewheeling. | * whenever jackd starts or stops freewheeling. | ||||
@@ -169,6 +169,11 @@ void Jack_Freewheel_Callback(int starting, void *arg) | |||||
FW = starting; | FW = starting; | ||||
} | } | ||||
void Jack_Client_Registration_Callback(const char* name, int val, void *arg) | |||||
{ | |||||
Log("Client registration callback name = %s has been successfully called with value %i.(msg from callback)\n", name, val); | |||||
} | |||||
int Jack_Update_Buffer_Size(jack_nframes_t nframes, void *arg) | int Jack_Update_Buffer_Size(jack_nframes_t nframes, void *arg) | ||||
{ | { | ||||
cur_buffer_size = jack_get_buffer_size(client1); | cur_buffer_size = jack_get_buffer_size(client1); | ||||
@@ -203,7 +208,7 @@ void Jack_Error_Callback(const char *msg) | |||||
} | } | ||||
} | } | ||||
void jack_shutdown (void *arg) | |||||
void jack_shutdown(void *arg) | |||||
{ | { | ||||
printf("Jack_test has been kicked out by jackd !\n"); | printf("Jack_test has been kicked out by jackd !\n"); | ||||
exit (1); | exit (1); | ||||
@@ -600,6 +605,9 @@ int main (int argc, char *argv[]) | |||||
if (jack_set_port_registration_callback(client1, Jack_Port_Register, 0) != 0) { | if (jack_set_port_registration_callback(client1, Jack_Port_Register, 0) != 0) { | ||||
printf("Error when calling jack_set_port_registration_callback() !\n"); | printf("Error when calling jack_set_port_registration_callback() !\n"); | ||||
} | } | ||||
if (jack_set_client_registration_callback(client1, Jack_Client_Registration_Callback, 0) != 0) { | |||||
printf("Error when calling jack_set_client_registration_callback() !\n"); | |||||
} | |||||
jack_set_error_function (Jack_Error_Callback); | jack_set_error_function (Jack_Error_Callback); | ||||
/** | /** | ||||
@@ -1025,7 +1033,8 @@ int main (int argc, char *argv[]) | |||||
} | } | ||||
free(inports); // free array of ports (as mentionned in the doc of jack_get_ports) | free(inports); // free array of ports (as mentionned in the doc of jack_get_ports) | ||||
/** | /** | ||||
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* | *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* | ||||
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* | *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* | ||||