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 | 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> | 2007-04-27 Stephane Letz <letz@grame.fr> | ||||
* Add missing -D__SMP__in OSX project. | * 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 void jack_port_set_latency (jack_port_t *, jack_nframes_t); | ||||
EXPORT int jack_recompute_total_latencies (jack_client_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_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 (jack_port_t *port, int onoff); | ||||
EXPORT int jack_port_request_monitor_by_name (jack_client_t *client, | EXPORT int jack_port_request_monitor_by_name (jack_client_t *client, | ||||
const char *port_name, int onoff); | 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) | EXPORT int jack_port_request_monitor(jack_port_t* port, int onoff) | ||||
{ | { | ||||
#ifdef __CLIENTDEBUG__ | #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 || !in_use_dst) { | ||||
if (!in_use_src) | 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) | 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; | res = -1; | ||||
goto end; | 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 || !in_use_dst) { | ||||
if (!in_use_src) | 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) | 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; | res = -1; | ||||
goto end; | goto end; | ||||
} | } | ||||
@@ -634,7 +634,7 @@ jack_port_id_t JackGraphManager::GetPort(const char* name) | |||||
{ | { | ||||
for (int i = 0; i < PORT_NUM; i++) { | for (int i = 0; i < PORT_NUM; i++) { | ||||
JackPort* port = GetPort(i); | JackPort* port = GetPort(i); | ||||
if (port->IsUsed() && strcmp(port->fName, name) == 0) | |||||
if (port->IsUsed() && port->NameEquals(name)) | |||||
return i; | return i; | ||||
} | } | ||||
return NO_PORT; | return NO_PORT; | ||||
@@ -184,6 +184,56 @@ int JackPort::SetName(const char* new_name) | |||||
return 0; | 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) | void JackPort::MixBuffer(float* mixbuffer, float* buffer, jack_nframes_t frames) | ||||
{ | { | ||||
jack_nframes_t frames_group = frames / 4; | jack_nframes_t frames_group = frames / 4; | ||||
@@ -42,7 +42,9 @@ class JackPort | |||||
private: | private: | ||||
enum JackPortFlags fFlags; | 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; | int fRefNum; | ||||
jack_nframes_t fLatency; | jack_nframes_t fLatency; | ||||
@@ -53,8 +55,8 @@ class JackPort | |||||
jack_port_id_t fTied; // Locally tied source port | jack_port_id_t fTied; // Locally tied source port | ||||
#ifdef WIN32 | #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__ | #elif __GNUC__ | ||||
float fBuffer[BUFFER_SIZE_MAX] __attribute__((aligned(16))); | float fBuffer[BUFFER_SIZE_MAX] __attribute__((aligned(16))); | ||||
#else | #else | ||||
@@ -75,7 +77,12 @@ class JackPort | |||||
void Release(); | void Release(); | ||||
const char* GetName() const; | const char* GetName() const; | ||||
const char* GetShortName() 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; | int Flags() const; | ||||
const char* Type() const; | const char* Type() const; | ||||
@@ -585,6 +585,38 @@ extern "C" | |||||
*/ | */ | ||||
int jack_port_set_name (jack_port_t *port, const char *port_name); | 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 | * If @ref JackPortCanMonitor is set for this @a port, turn input | ||||
* monitoring on or off. Otherwise, do nothing. | * monitoring on or off. Otherwise, do nothing. | ||||