git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@1458 0c269be4-1314-0410-8aa9-9f06e86f4224tags/0.63
@@ -2,6 +2,10 @@ | |||
Jackdmp changes log | |||
--------------------------- | |||
2007-04-28 Stephane Letz <letz@grame.fr> | |||
* Add new jack_port_set_alias, jack_port_unset_alias and jack_port_get_aliases API. | |||
2007-04-27 Stephane Letz <letz@grame.fr> | |||
* Add missing -D__SMP__in OSX project. | |||
@@ -114,6 +114,9 @@ extern "C" | |||
EXPORT void jack_port_set_latency (jack_port_t *, jack_nframes_t); | |||
EXPORT int jack_recompute_total_latencies (jack_client_t*); | |||
EXPORT int jack_port_set_name (jack_port_t *port, const char *port_name); | |||
EXPORT int jack_port_set_alias (jack_port_t *port, const char *alias); | |||
EXPORT int jack_port_unset_alias (jack_port_t *port, const char *alias); | |||
EXPORT int jack_port_get_aliases (const jack_port_t *port, char* const aliases[2]); | |||
EXPORT int jack_port_request_monitor (jack_port_t *port, int onoff); | |||
EXPORT int jack_port_request_monitor_by_name (jack_client_t *client, | |||
const char *port_name, int onoff); | |||
@@ -431,6 +434,54 @@ EXPORT int jack_port_set_name(jack_port_t* port, const char* name) | |||
} | |||
} | |||
EXPORT int jack_port_set_alias(jack_port_t* port, const char* name) | |||
{ | |||
#ifdef __CLIENTDEBUG__ | |||
JackLibGlobals::CheckContext(); | |||
#endif | |||
jack_port_id_t myport = (jack_port_id_t)port; | |||
if (!CheckPort(myport)) { | |||
jack_error("jack_port_set_alias called with an incorrect port %ld", myport); | |||
return -1; | |||
} else if (name == NULL) { | |||
jack_error("jack_port_set_alias called with a NULL port name"); | |||
return -1; | |||
} else { | |||
return GetGraphManager()->GetPort(myport)->SetAlias(name); | |||
} | |||
} | |||
EXPORT int jack_port_unset_alias(jack_port_t* port, const char* name) | |||
{ | |||
#ifdef __CLIENTDEBUG__ | |||
JackLibGlobals::CheckContext(); | |||
#endif | |||
jack_port_id_t myport = (jack_port_id_t)port; | |||
if (!CheckPort(myport)) { | |||
jack_error("jack_port_unset_alias called with an incorrect port %ld", myport); | |||
return -1; | |||
} else if (name == NULL) { | |||
jack_error("jack_port_unset_alias called with a NULL port name"); | |||
return -1; | |||
} else { | |||
return GetGraphManager()->GetPort(myport)->UnsetAlias(name); | |||
} | |||
} | |||
EXPORT int jack_port_get_aliases(const jack_port_t* port, char* const aliases[2]) | |||
{ | |||
#ifdef __CLIENTDEBUG__ | |||
JackLibGlobals::CheckContext(); | |||
#endif | |||
jack_port_id_t myport = (jack_port_id_t)port; | |||
if (!CheckPort(myport)) { | |||
jack_error("jack_port_get_aliases called with an incorrect port %ld", myport); | |||
return -1; | |||
} else { | |||
return GetGraphManager()->GetPort(myport)->GetAliases(aliases); | |||
} | |||
} | |||
EXPORT int jack_port_request_monitor(jack_port_t* port, int onoff) | |||
{ | |||
#ifdef __CLIENTDEBUG__ | |||
@@ -475,9 +475,9 @@ int JackGraphManager::Connect(jack_port_id_t port_src, jack_port_id_t port_dst) | |||
if (!in_use_src || !in_use_dst) { | |||
if (!in_use_src) | |||
jack_error("JackGraphManager::Connect: port_src not %ld used name = %s", port_src, GetPort(port_src)->fName); | |||
jack_error("JackGraphManager::Connect: port_src = %ld not used name = %s", port_src, GetPort(port_src)->fName); | |||
if (!in_use_dst) | |||
jack_error("JackGraphManager::Connect: port_dst not %ld used name = %s", port_dst, GetPort(port_dst)->fName); | |||
jack_error("JackGraphManager::Connect: port_dst = %ld not used name = %s", port_dst, GetPort(port_dst)->fName); | |||
res = -1; | |||
goto end; | |||
} | |||
@@ -521,9 +521,9 @@ int JackGraphManager::Disconnect(jack_port_id_t port_src, jack_port_id_t port_ds | |||
if (!in_use_src || !in_use_dst) { | |||
if (!in_use_src) | |||
jack_error("JackGraphManager::Disconnect: port_src not %ld used name = %s", port_src, GetPort(port_src)->fName); | |||
jack_error("JackGraphManager::Disconnect: port_src = %ld not used name = %s", port_src, GetPort(port_src)->fName); | |||
if (!in_use_dst) | |||
jack_error("JackGraphManager::Disconnect: port_src not %ld used name = %s", port_dst, GetPort(port_dst)->fName); | |||
jack_error("JackGraphManager::Disconnect: port_src = %ld not used name = %s", port_dst, GetPort(port_dst)->fName); | |||
res = -1; | |||
goto end; | |||
} | |||
@@ -634,7 +634,7 @@ jack_port_id_t JackGraphManager::GetPort(const char* name) | |||
{ | |||
for (int i = 0; i < PORT_NUM; i++) { | |||
JackPort* port = GetPort(i); | |||
if (port->IsUsed() && strcmp(port->fName, name) == 0) | |||
if (port->IsUsed() && port->NameEquals(name)) | |||
return i; | |||
} | |||
return NO_PORT; | |||
@@ -184,6 +184,56 @@ int JackPort::SetName(const char* new_name) | |||
return 0; | |||
} | |||
bool JackPort::NameEquals(const char* target) | |||
{ | |||
return (strcmp(fName, target) == 0 | |||
|| strcmp(fAlias1, target) == 0 | |||
|| strcmp(fAlias2, target) == 0); | |||
} | |||
int JackPort::GetAliases(char* const aliases[2]) | |||
{ | |||
int cnt = 0; | |||
if (fAlias1[0] != '\0') { | |||
snprintf(aliases[0], JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE, "%s", fAlias1); | |||
cnt++; | |||
} | |||
if (fAlias2[0] != '\0') { | |||
snprintf(aliases[1], JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE, "%s", fAlias2); | |||
cnt++; | |||
} | |||
return cnt; | |||
} | |||
int JackPort::SetAlias(const char* alias) | |||
{ | |||
if (fAlias1[0] == '\0') { | |||
snprintf(fAlias1, sizeof(fAlias1), "%s", alias); | |||
} else if (fAlias2[0] == '\0') { | |||
snprintf(fAlias2, sizeof(fAlias2), "%s", alias); | |||
} else { | |||
return -1; | |||
} | |||
return 0; | |||
} | |||
int JackPort::UnsetAlias(const char* alias) | |||
{ | |||
if (strcmp(fAlias1, alias) == 0) { | |||
fAlias1[0] = '\0'; | |||
} else if (strcmp(fAlias2, alias) == 0) { | |||
fAlias2[0] = '\0'; | |||
} else { | |||
return -1; | |||
} | |||
return 0; | |||
} | |||
void JackPort::MixBuffer(float* mixbuffer, float* buffer, jack_nframes_t frames) | |||
{ | |||
jack_nframes_t frames_group = frames / 4; | |||
@@ -42,7 +42,9 @@ class JackPort | |||
private: | |||
enum JackPortFlags fFlags; | |||
char fName[JACK_PORT_NAME_SIZE + 2]; | |||
char fName[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; | |||
char fAlias1[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; | |||
char fAlias2[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; | |||
int fRefNum; | |||
jack_nframes_t fLatency; | |||
@@ -53,8 +55,8 @@ class JackPort | |||
jack_port_id_t fTied; // Locally tied source port | |||
#ifdef WIN32 | |||
//__declspec(align(16)) float fBuffer[BUFFER_SIZE_MAX]; | |||
float fBuffer[BUFFER_SIZE_MAX]; | |||
//__declspec(align(16)) float fBuffer[BUFFER_SIZE_MAX]; | |||
float fBuffer[BUFFER_SIZE_MAX]; | |||
#elif __GNUC__ | |||
float fBuffer[BUFFER_SIZE_MAX] __attribute__((aligned(16))); | |||
#else | |||
@@ -75,7 +77,12 @@ class JackPort | |||
void Release(); | |||
const char* GetName() const; | |||
const char* GetShortName() const; | |||
int SetName(const char * name); | |||
int SetName(const char* name); | |||
int GetAliases(char* const aliases[2]); | |||
int SetAlias(const char* alias); | |||
int UnsetAlias(const char* alias); | |||
bool NameEquals(const char* target); | |||
int Flags() const; | |||
const char* Type() const; | |||
@@ -585,6 +585,38 @@ extern "C" | |||
*/ | |||
int jack_port_set_name (jack_port_t *port, const char *port_name); | |||
/** | |||
* Set @a alias as an alias for @a port. May be called at any time. | |||
* If the alias is longer than jack_port_name_size(), it will be truncated. | |||
* | |||
* After a successful call, and until JACK exits or | |||
* @function jack_port_unset_alias() is called, @alias may be | |||
* used as a alternate name for the port. | |||
* | |||
* Ports can have up to two aliases - if both are already | |||
* set, this function will return an error. | |||
* | |||
* @return 0 on success, otherwise a non-zero error code. | |||
*/ | |||
int jack_port_set_alias (jack_port_t *port, const char *alias); | |||
/** | |||
* Remove @a alias as an alias for @a port. May be called at any time. | |||
* | |||
* After a successful call, @a alias can no longer be | |||
* used as a alternate name for the port. | |||
* | |||
* @return 0 on success, otherwise a non-zero error code. | |||
*/ | |||
int jack_port_unset_alias (jack_port_t *port, const char *alias); | |||
/* | |||
* Get any aliases known for @port. | |||
* | |||
* @return the number of aliases discovered for the port | |||
*/ | |||
int jack_port_get_aliases (const jack_port_t *port, char* const aliases[2]); | |||
/** | |||
* If @ref JackPortCanMonitor is set for this @a port, turn input | |||
* monitoring on or off. Otherwise, do nothing. | |||