Browse Source

Add new jack_port_set_alias, jack_port_unset_alias and jack_port_get_aliases API.

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@1458 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/0.63
sletz 18 years ago
parent
commit
27e4b66df7
6 changed files with 153 additions and 9 deletions
  1. +4
    -0
      ChangeLog
  2. +51
    -0
      common/JackAPI.cpp
  3. +5
    -5
      common/JackGraphManager.cpp
  4. +50
    -0
      common/JackPort.cpp
  5. +11
    -4
      common/JackPort.h
  6. +32
    -0
      common/jack.h

+ 4
- 0
ChangeLog View File

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


+ 51
- 0
common/JackAPI.cpp View File

@@ -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__


+ 5
- 5
common/JackGraphManager.cpp View File

@@ -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;


+ 50
- 0
common/JackPort.cpp View File

@@ -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;


+ 11
- 4
common/JackPort.h View File

@@ -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;


+ 32
- 0
common/jack.h View File

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


Loading…
Cancel
Save