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. | |||