git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@3465 0c269be4-1314-0410-8aa9-9f06e86f4224tags/v1.9.3
@@ -69,7 +69,7 @@ int JackEngine::Close() | |||||
{ | { | ||||
jack_log("JackEngine::Close"); | jack_log("JackEngine::Close"); | ||||
fChannel.Close(); | fChannel.Close(); | ||||
// Close remaining clients (RT is stopped) | // Close remaining clients (RT is stopped) | ||||
for (int i = REAL_REFNUM; i < CLIENT_NUM; i++) { | for (int i = REAL_REFNUM; i < CLIENT_NUM; i++) { | ||||
if (JackLoadableInternalClient* loadable_client = dynamic_cast<JackLoadableInternalClient*>(fClientTable[i])) { | if (JackLoadableInternalClient* loadable_client = dynamic_cast<JackLoadableInternalClient*>(fClientTable[i])) { | ||||
@@ -85,10 +85,10 @@ int JackEngine::Close() | |||||
fClientTable[i] = NULL; | fClientTable[i] = NULL; | ||||
} | } | ||||
} | } | ||||
return 0; | return 0; | ||||
} | } | ||||
//----------------------------- | //----------------------------- | ||||
// Client ressource management | // Client ressource management | ||||
//----------------------------- | //----------------------------- | ||||
@@ -147,7 +147,7 @@ void JackEngine::ProcessCurrent(jack_time_t cur_cycle_begin) | |||||
bool JackEngine::Process(jack_time_t cur_cycle_begin, jack_time_t prev_cycle_end) | bool JackEngine::Process(jack_time_t cur_cycle_begin, jack_time_t prev_cycle_end) | ||||
{ | { | ||||
bool res = true; | bool res = true; | ||||
// Cycle begin | // Cycle begin | ||||
fEngineControl->CycleBegin(fClientTable, fGraphManager, cur_cycle_begin, prev_cycle_end); | fEngineControl->CycleBegin(fClientTable, fGraphManager, cur_cycle_begin, prev_cycle_end); | ||||
@@ -213,7 +213,7 @@ void JackEngine::NotifyClient(int refnum, int event, int sync, int value1, int v | |||||
jack_log("JackEngine::NotifyClient: client not available anymore"); | jack_log("JackEngine::NotifyClient: client not available anymore"); | ||||
} else if (client->GetClientControl()->fCallback[event]) { | } else if (client->GetClientControl()->fCallback[event]) { | ||||
if (client->ClientNotify(refnum, client->GetClientControl()->fName, event, sync, value1, value2) < 0) | if (client->ClientNotify(refnum, client->GetClientControl()->fName, event, sync, value1, value2) < 0) | ||||
jack_error("NotifyClient fails name = %s event = %ld = val1 = %ld val2 = %ld", client->GetClientControl()->fName, event, value1, value2); | |||||
jack_error("NotifyClient fails name = %s event = %ld val1 = %ld val2 = %ld", client->GetClientControl()->fName, event, value1, value2); | |||||
} else { | } else { | ||||
jack_log("JackEngine::NotifyClient: no callback for event = %ld", event); | jack_log("JackEngine::NotifyClient: no callback for event = %ld", event); | ||||
} | } | ||||
@@ -226,7 +226,7 @@ void JackEngine::NotifyClients(int event, int sync, int value1, int value2) | |||||
if (client) { | if (client) { | ||||
if (client->GetClientControl()->fCallback[event]) { | if (client->GetClientControl()->fCallback[event]) { | ||||
if (client->ClientNotify(i, client->GetClientControl()->fName, event, sync, value1, value2) < 0) | if (client->ClientNotify(i, client->GetClientControl()->fName, event, sync, value1, value2) < 0) | ||||
jack_error("NotifyClient fails name = %s event = %ld = val1 = %ld val2 = %ld", client->GetClientControl()->fName, event, value1, value2); | |||||
jack_error("NotifyClient fails name = %s event = %ld val1 = %ld val2 = %ld", client->GetClientControl()->fName, event, value1, value2); | |||||
} else { | } else { | ||||
jack_log("JackEngine::NotifyClients: no callback for event = %ld", event); | jack_log("JackEngine::NotifyClients: no callback for event = %ld", event); | ||||
} | } | ||||
@@ -461,7 +461,7 @@ int JackEngine::GetClientPID(const char* name) | |||||
if (client && (strcmp(client->GetClientControl()->fName, name) == 0)) | if (client && (strcmp(client->GetClientControl()->fName, name) == 0)) | ||||
return client->GetClientControl()->fPID; | return client->GetClientControl()->fPID; | ||||
} | } | ||||
return 0; | return 0; | ||||
} | } | ||||
@@ -472,7 +472,7 @@ int JackEngine::GetClientRefNum(const char* name) | |||||
if (client && (strcmp(client->GetClientControl()->fName, name) == 0)) | if (client && (strcmp(client->GetClientControl()->fName, name) == 0)) | ||||
return client->GetClientControl()->fRefNum; | return client->GetClientControl()->fRefNum; | ||||
} | } | ||||
return -1; | return -1; | ||||
} | } | ||||
@@ -511,7 +511,7 @@ int JackEngine::ClientExternalOpen(const char* name, int pid, int* ref, int* sha | |||||
jack_error("Cannot notify add client"); | jack_error("Cannot notify add client"); | ||||
goto error; | goto error; | ||||
} | } | ||||
fGraphManager->InitRefNum(refnum); | fGraphManager->InitRefNum(refnum); | ||||
fEngineControl->ResetRollingUsecs(); | fEngineControl->ResetRollingUsecs(); | ||||
*shared_engine = fEngineControl->GetShmIndex(); | *shared_engine = fEngineControl->GetShmIndex(); | ||||
@@ -576,7 +576,7 @@ int JackEngine::ClientExternalClose(int refnum) | |||||
{ | { | ||||
AssertRefnum(refnum); | AssertRefnum(refnum); | ||||
JackClientInterface* client = fClientTable[refnum]; | JackClientInterface* client = fClientTable[refnum]; | ||||
if (client) { | if (client) { | ||||
fEngineControl->fTransport.ResetTimebase(refnum); | fEngineControl->fTransport.ResetTimebase(refnum); | ||||
int res = ClientCloseAux(refnum, client, true); | int res = ClientCloseAux(refnum, client, true); | ||||
@@ -613,7 +613,7 @@ int JackEngine::ClientCloseAux(int refnum, JackClientInterface* client, bool wai | |||||
for (i = 0; (i < PORT_NUM_FOR_CLIENT) && (ports[i] != EMPTY) ; i++) { | for (i = 0; (i < PORT_NUM_FOR_CLIENT) && (ports[i] != EMPTY) ; i++) { | ||||
PortUnRegister(refnum, ports[i]); | PortUnRegister(refnum, ports[i]); | ||||
} | } | ||||
// Remove the client from the table | // Remove the client from the table | ||||
ReleaseRefnum(refnum); | ReleaseRefnum(refnum); | ||||
@@ -641,11 +641,11 @@ int JackEngine::ClientActivate(int refnum, bool state) | |||||
AssertRefnum(refnum); | AssertRefnum(refnum); | ||||
JackClientInterface* client = fClientTable[refnum]; | JackClientInterface* client = fClientTable[refnum]; | ||||
assert(fClientTable[refnum]); | assert(fClientTable[refnum]); | ||||
jack_log("JackEngine::ClientActivate ref = %ld name = %s", refnum, client->GetClientControl()->fName); | jack_log("JackEngine::ClientActivate ref = %ld name = %s", refnum, client->GetClientControl()->fName); | ||||
if (state) | |||||
if (state) | |||||
fGraphManager->Activate(refnum); | fGraphManager->Activate(refnum); | ||||
// Wait for graph state change to be effective | // Wait for graph state change to be effective | ||||
if (!fSignal.LockedTimedWait(fEngineControl->fTimeOutUsecs * 10)) { | if (!fSignal.LockedTimedWait(fEngineControl->fTimeOutUsecs * 10)) { | ||||
jack_error("JackEngine::ClientActivate wait error ref = %ld name = %s", refnum, client->GetClientControl()->fName); | jack_error("JackEngine::ClientActivate wait error ref = %ld name = %s", refnum, client->GetClientControl()->fName); | ||||
@@ -665,11 +665,11 @@ int JackEngine::ClientDeactivate(int refnum) | |||||
return -1; | return -1; | ||||
jack_log("JackEngine::ClientDeactivate ref = %ld name = %s", refnum, client->GetClientControl()->fName); | jack_log("JackEngine::ClientDeactivate ref = %ld name = %s", refnum, client->GetClientControl()->fName); | ||||
// Disconnect all ports ==> notifications are sent | // Disconnect all ports ==> notifications are sent | ||||
jack_int_t ports[PORT_NUM_FOR_CLIENT]; | jack_int_t ports[PORT_NUM_FOR_CLIENT]; | ||||
int i; | int i; | ||||
fGraphManager->GetInputPorts(refnum, ports); | fGraphManager->GetInputPorts(refnum, ports); | ||||
for (i = 0; (i < PORT_NUM_FOR_CLIENT) && (ports[i] != EMPTY) ; i++) { | for (i = 0; (i < PORT_NUM_FOR_CLIENT) && (ports[i] != EMPTY) ; i++) { | ||||
PortDisconnect(refnum, ports[i], ALL_PORTS); | PortDisconnect(refnum, ports[i], ALL_PORTS); | ||||
@@ -679,7 +679,7 @@ int JackEngine::ClientDeactivate(int refnum) | |||||
for (i = 0; (i < PORT_NUM_FOR_CLIENT) && (ports[i] != EMPTY) ; i++) { | for (i = 0; (i < PORT_NUM_FOR_CLIENT) && (ports[i] != EMPTY) ; i++) { | ||||
PortDisconnect(refnum, ports[i], ALL_PORTS); | PortDisconnect(refnum, ports[i], ALL_PORTS); | ||||
} | } | ||||
fGraphManager->Deactivate(refnum); | fGraphManager->Deactivate(refnum); | ||||
fLastSwitchUsecs = 0; // Force switch to occur next cycle, even when called with "dead" clients | fLastSwitchUsecs = 0; // Force switch to occur next cycle, even when called with "dead" clients | ||||
@@ -701,11 +701,11 @@ int JackEngine::PortRegister(int refnum, const char* name, const char *type, uns | |||||
jack_log("JackEngine::PortRegister ref = %ld name = %s type = %s flags = %d buffer_size = %d", refnum, name, type, flags, buffer_size); | jack_log("JackEngine::PortRegister ref = %ld name = %s type = %s flags = %d buffer_size = %d", refnum, name, type, flags, buffer_size); | ||||
AssertRefnum(refnum); | AssertRefnum(refnum); | ||||
assert(fClientTable[refnum]); | assert(fClientTable[refnum]); | ||||
// Check if port name already exists | // Check if port name already exists | ||||
if (fGraphManager->GetPort(name) != NO_PORT) { | if (fGraphManager->GetPort(name) != NO_PORT) { | ||||
jack_error("port_name \"%s\" already exists", name); | jack_error("port_name \"%s\" already exists", name); | ||||
return -1; | |||||
return -1; | |||||
} | } | ||||
*port_index = fGraphManager->AllocatePort(refnum, name, type, (JackPortFlags)flags, fEngineControl->fBufferSize); | *port_index = fGraphManager->AllocatePort(refnum, name, type, (JackPortFlags)flags, fEngineControl->fBufferSize); | ||||
@@ -722,7 +722,7 @@ int JackEngine::PortUnRegister(int refnum, jack_port_id_t port_index) | |||||
jack_log("JackEngine::PortUnRegister ref = %ld port_index = %ld", refnum, port_index); | jack_log("JackEngine::PortUnRegister ref = %ld port_index = %ld", refnum, port_index); | ||||
AssertRefnum(refnum); | AssertRefnum(refnum); | ||||
assert(fClientTable[refnum]); | assert(fClientTable[refnum]); | ||||
// Disconnect port ==> notification is sent | // Disconnect port ==> notification is sent | ||||
PortDisconnect(refnum, port_index, ALL_PORTS); | PortDisconnect(refnum, port_index, ALL_PORTS); | ||||
@@ -775,7 +775,7 @@ int JackEngine::PortConnect(int refnum, jack_port_id_t src, jack_port_id_t dst) | |||||
} | } | ||||
int res = fGraphManager->Connect(src, dst); | int res = fGraphManager->Connect(src, dst); | ||||
if (res == 0) | |||||
if (res == 0) | |||||
NotifyPortConnect(src, dst, true); | NotifyPortConnect(src, dst, true); | ||||
return res; | return res; | ||||
} | } | ||||
@@ -1,20 +1,8 @@ | |||||
/* This module provides a set of abstract shared memory interfaces | |||||
* with support using both System V and POSIX shared memory | |||||
* implementations. The code is divided into three sections: | |||||
* | |||||
* - common (interface-independent) code | |||||
* - POSIX implementation | |||||
* - System V implementation | |||||
* | |||||
* The implementation used is determined by whether USE_POSIX_SHM was | |||||
* set in the ./configure step. | |||||
*/ | |||||
/* | /* | ||||
* Copyright (C) 2003 Paul Davis | * Copyright (C) 2003 Paul Davis | ||||
* Copyright (C) 2004 Jack O'Quin | * Copyright (C) 2004 Jack O'Quin | ||||
* Copyright (C) 2006-2007 Grame | * Copyright (C) 2006-2007 Grame | ||||
* | |||||
* | |||||
* This program is free software; you can redistribute it and/or modify | * This program is free software; you can redistribute it and/or modify | ||||
* it under the terms of the GNU General Public License as published by | * it under the terms of the GNU General Public License as published by | ||||
* the Free Software Foundation; either version 2 of the License, or | * the Free Software Foundation; either version 2 of the License, or | ||||
@@ -30,11 +18,24 @@ | |||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||||
* | * | ||||
*/ | */ | ||||
/* This module provides a set of abstract shared memory interfaces | |||||
* with support using both System V and POSIX shared memory | |||||
* implementations. The code is divided into three sections: | |||||
* | |||||
* - common (interface-independent) code | |||||
* - POSIX implementation | |||||
* - System V implementation | |||||
* | |||||
* The implementation used is determined by whether USE_POSIX_SHM was | |||||
* set in the ./configure step. | |||||
*/ | |||||
#include "JackConstants.h" | #include "JackConstants.h" | ||||
#ifdef WIN32 | #ifdef WIN32 | ||||
#include <process.h> | |||||
#include <process.h> | |||||
#include <stdio.h> | |||||
#else | #else | ||||
#include <unistd.h> | #include <unistd.h> | ||||
@@ -57,7 +58,7 @@ | |||||
#include "shm.h" | #include "shm.h" | ||||
#include "JackError.h" | #include "JackError.h" | ||||
static int GetUID() | |||||
static int GetUID() | |||||
{ | { | ||||
#ifdef WIN32 | #ifdef WIN32 | ||||
return _getpid(); | return _getpid(); | ||||
@@ -67,7 +68,7 @@ static int GetUID() | |||||
#endif | #endif | ||||
} | } | ||||
static int GetPID() | |||||
static int GetPID() | |||||
{ | { | ||||
#ifdef WIN32 | #ifdef WIN32 | ||||
return _getpid(); | return _getpid(); | ||||
@@ -105,9 +106,9 @@ static jack_shm_id_t registry_id; /* SHM id for the registry */ | |||||
#ifdef WIN32 | #ifdef WIN32 | ||||
static jack_shm_info_t registry_info = {/* SHM info for the registry */ | static jack_shm_info_t registry_info = {/* SHM info for the registry */ | ||||
JACK_SHM_NULL_INDEX, | |||||
JACK_SHM_NULL_INDEX, | |||||
NULL | NULL | ||||
}; | |||||
}; | |||||
#else | #else | ||||
static jack_shm_info_t registry_info = { /* SHM info for the registry */ | static jack_shm_info_t registry_info = { /* SHM info for the registry */ | ||||
.index = JACK_SHM_NULL_INDEX, | .index = JACK_SHM_NULL_INDEX, | ||||
@@ -142,7 +143,7 @@ static char jack_shm_server_prefix[JACK_SERVER_NAME_SIZE] = ""; | |||||
static int semid = -1; | static int semid = -1; | ||||
#ifdef WIN32 | |||||
#ifdef WIN32 | |||||
static void | static void | ||||
semaphore_init () {} | semaphore_init () {} | ||||
@@ -167,7 +168,7 @@ semaphore_init () | |||||
struct sembuf sbuf; | struct sembuf sbuf; | ||||
int create_flags = IPC_CREAT | IPC_EXCL | int create_flags = IPC_CREAT | IPC_EXCL | ||||
| S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH; | | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH; | ||||
/* Get semaphore ID associated with this key. */ | /* Get semaphore ID associated with this key. */ | ||||
if ((semid = semget(semkey, 0, 0)) == -1) { | if ((semid = semget(semkey, 0, 0)) == -1) { | ||||
@@ -188,7 +189,7 @@ semaphore_init () | |||||
} | } | ||||
} else { | } else { | ||||
semaphore_error ("semget creation"); | |||||
semaphore_error ("semget creation"); | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -208,7 +209,7 @@ semaphore_add (int value) | |||||
#endif | #endif | ||||
static void | |||||
static void | |||||
jack_shm_lock_registry (void) | jack_shm_lock_registry (void) | ||||
{ | { | ||||
if (semid == -1) | if (semid == -1) | ||||
@@ -217,7 +218,7 @@ jack_shm_lock_registry (void) | |||||
semaphore_add (-1); | semaphore_add (-1); | ||||
} | } | ||||
static void | |||||
static void | |||||
jack_shm_unlock_registry (void) | jack_shm_unlock_registry (void) | ||||
{ | { | ||||
semaphore_add (1); | semaphore_add (1); | ||||
@@ -232,7 +233,7 @@ jack_shm_init_registry () | |||||
memset (jack_shm_header, 0, JACK_SHM_REGISTRY_SIZE); | memset (jack_shm_header, 0, JACK_SHM_REGISTRY_SIZE); | ||||
jack_shm_header->magic = JACK_SHM_MAGIC; | jack_shm_header->magic = JACK_SHM_MAGIC; | ||||
//jack_shm_header->protocol = JACK_PROTOCOL_VERSION; | |||||
//jack_shm_header->protocol = JACK_PROTOCOL_VERSION; | |||||
jack_shm_header->type = jack_shmtype; | jack_shm_header->type = jack_shmtype; | ||||
jack_shm_header->size = JACK_SHM_REGISTRY_SIZE; | jack_shm_header->size = JACK_SHM_REGISTRY_SIZE; | ||||
jack_shm_header->hdr_len = sizeof (jack_shm_header_t); | jack_shm_header->hdr_len = sizeof (jack_shm_header_t); | ||||
@@ -249,7 +250,7 @@ jack_shm_validate_registry () | |||||
/* registry must be locked */ | /* registry must be locked */ | ||||
if ((jack_shm_header->magic == JACK_SHM_MAGIC) | if ((jack_shm_header->magic == JACK_SHM_MAGIC) | ||||
//&& (jack_shm_header->protocol == JACK_PROTOCOL_VERSION) | |||||
//&& (jack_shm_header->protocol == JACK_PROTOCOL_VERSION) | |||||
&& (jack_shm_header->type == jack_shmtype) | && (jack_shm_header->type == jack_shmtype) | ||||
&& (jack_shm_header->size == JACK_SHM_REGISTRY_SIZE) | && (jack_shm_header->size == JACK_SHM_REGISTRY_SIZE) | ||||
&& (jack_shm_header->hdr_len == sizeof (jack_shm_header_t)) | && (jack_shm_header->hdr_len == sizeof (jack_shm_header_t)) | ||||
@@ -281,7 +282,7 @@ static void | |||||
jack_set_server_prefix (const char *server_name) | jack_set_server_prefix (const char *server_name) | ||||
{ | { | ||||
snprintf (jack_shm_server_prefix, sizeof (jack_shm_server_prefix), | snprintf (jack_shm_server_prefix, sizeof (jack_shm_server_prefix), | ||||
"jack-%d:%s:", GetUID(), server_name); | |||||
"jack-%d:%s:", GetUID(), server_name); | |||||
} | } | ||||
/* gain server addressability to shared memory registration segment | /* gain server addressability to shared memory registration segment | ||||
@@ -299,7 +300,7 @@ jack_server_initialize_shm (int new_registry) | |||||
jack_shm_lock_registry (); | jack_shm_lock_registry (); | ||||
rc = jack_access_registry (®istry_info); | rc = jack_access_registry (®istry_info); | ||||
if (new_registry) { | if (new_registry) { | ||||
jack_remove_shm (®istry_id); | jack_remove_shm (®istry_id); | ||||
rc = ENOENT; | rc = ENOENT; | ||||
@@ -365,9 +366,9 @@ jack_initialize_shm (const char *server_name) | |||||
} | } | ||||
char* jack_shm_addr (jack_shm_info_t* si) | |||||
char* jack_shm_addr (jack_shm_info_t* si) | |||||
{ | { | ||||
return (char*)si->ptr.attached_at; | |||||
return (char*)si->ptr.attached_at; | |||||
} | } | ||||
void | void | ||||
@@ -393,7 +394,7 @@ jack_get_free_shm_info () | |||||
break; | break; | ||||
} | } | ||||
} | } | ||||
if (i < MAX_SHM_ID) { | if (i < MAX_SHM_ID) { | ||||
si = &jack_shm_registry[i]; | si = &jack_shm_registry[i]; | ||||
} | } | ||||
@@ -422,7 +423,7 @@ jack_release_shm_info (jack_shm_registry_index_t index) | |||||
} | } | ||||
} | } | ||||
/* Claim server_name for this process. | |||||
/* Claim server_name for this process. | |||||
* | * | ||||
* returns 0 if successful | * returns 0 if successful | ||||
* EEXIST if server_name was already active for this user | * EEXIST if server_name was already active for this user | ||||
@@ -485,7 +486,7 @@ jack_register_server (const char *server_name, int new_registry) | |||||
strncpy (jack_shm_header->server[i].name, | strncpy (jack_shm_header->server[i].name, | ||||
jack_shm_server_prefix, | jack_shm_server_prefix, | ||||
JACK_SERVER_NAME_SIZE); | JACK_SERVER_NAME_SIZE); | ||||
unlock: | unlock: | ||||
jack_shm_unlock_registry (); | jack_shm_unlock_registry (); | ||||
return 0; | return 0; | ||||
@@ -517,10 +518,10 @@ jack_cleanup_shm () | |||||
jack_shm_info_t copy; | jack_shm_info_t copy; | ||||
jack_shm_lock_registry (); | jack_shm_lock_registry (); | ||||
for (i = 0; i < MAX_SHM_ID; i++) { | for (i = 0; i < MAX_SHM_ID; i++) { | ||||
jack_shm_registry_t* r; | jack_shm_registry_t* r; | ||||
r = &jack_shm_registry[i]; | r = &jack_shm_registry[i]; | ||||
memcpy (©, r, sizeof (jack_shm_info_t)); | memcpy (©, r, sizeof (jack_shm_info_t)); | ||||
destroy = FALSE; | destroy = FALSE; | ||||
@@ -532,7 +533,7 @@ jack_cleanup_shm () | |||||
/* is this my shm segment? */ | /* is this my shm segment? */ | ||||
if (r->allocator == GetPID()) { | if (r->allocator == GetPID()) { | ||||
/* allocated by this process, so unattach | |||||
/* allocated by this process, so unattach | |||||
and destroy. */ | and destroy. */ | ||||
jack_release_shm (©); | jack_release_shm (©); | ||||
destroy = TRUE; | destroy = TRUE; | ||||
@@ -651,7 +652,7 @@ jack_access_registry (jack_shm_info_t *ri) | |||||
ri->index = JACK_SHM_REGISTRY_INDEX; | ri->index = JACK_SHM_REGISTRY_INDEX; | ||||
jack_shm_header = ri->ptr.attached_at; | jack_shm_header = ri->ptr.attached_at; | ||||
jack_shm_registry = (jack_shm_registry_t *) (jack_shm_header + 1); | jack_shm_registry = (jack_shm_registry_t *) (jack_shm_header + 1); | ||||
close (shm_fd); // steph | close (shm_fd); // steph | ||||
return 0; | return 0; | ||||
} | } | ||||
@@ -668,7 +669,7 @@ jack_create_registry (jack_shm_info_t *ri) | |||||
{ | { | ||||
/* registry must be locked */ | /* registry must be locked */ | ||||
int shm_fd; | int shm_fd; | ||||
strncpy (registry_id, "/jack-shm-registry", sizeof (registry_id)); | strncpy (registry_id, "/jack-shm-registry", sizeof (registry_id)); | ||||
if ((shm_fd = shm_open (registry_id, O_RDWR|O_CREAT, 0666)) < 0) { | if ((shm_fd = shm_open (registry_id, O_RDWR|O_CREAT, 0666)) < 0) { | ||||
@@ -677,10 +678,10 @@ jack_create_registry (jack_shm_info_t *ri) | |||||
strerror (errno)); | strerror (errno)); | ||||
return rc; | return rc; | ||||
} | } | ||||
/* Previous shm_open result depends of the actual value of umask, force correct file permisssion here */ | /* Previous shm_open result depends of the actual value of umask, force correct file permisssion here */ | ||||
if (fchmod(shm_fd, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH) < 0) { | if (fchmod(shm_fd, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH) < 0) { | ||||
jack_log("Cannot chmod jack-shm-registry (%s) %d %d", strerror (errno)); | |||||
jack_log("Cannot chmod jack-shm-registry (%s) %d %d", strerror (errno)); | |||||
} | } | ||||
/* Set the desired segment size. NOTE: the non-conformant Mac | /* Set the desired segment size. NOTE: the non-conformant Mac | ||||
@@ -804,7 +805,7 @@ jack_attach_shm (jack_shm_info_t* si) | |||||
if ((si->ptr.attached_at = mmap (0, registry->size, PROT_READ|PROT_WRITE, | if ((si->ptr.attached_at = mmap (0, registry->size, PROT_READ|PROT_WRITE, | ||||
MAP_SHARED, shm_fd, 0)) == MAP_FAILED) { | MAP_SHARED, shm_fd, 0)) == MAP_FAILED) { | ||||
jack_error ("Cannot mmap shm segment %s (%s)", | |||||
jack_error ("Cannot mmap shm segment %s (%s)", | |||||
registry->id, | registry->id, | ||||
strerror (errno)); | strerror (errno)); | ||||
close (shm_fd); | close (shm_fd); | ||||
@@ -830,7 +831,7 @@ jack_attach_shm_read (jack_shm_info_t* si) | |||||
if ((si->ptr.attached_at = mmap (0, registry->size, PROT_READ, | if ((si->ptr.attached_at = mmap (0, registry->size, PROT_READ, | ||||
MAP_SHARED, shm_fd, 0)) == MAP_FAILED) { | MAP_SHARED, shm_fd, 0)) == MAP_FAILED) { | ||||
jack_error ("Cannot mmap shm segment %s (%s)", | |||||
jack_error ("Cannot mmap shm segment %s (%s)", | |||||
registry->id, | registry->id, | ||||
strerror (errno)); | strerror (errno)); | ||||
close (shm_fd); | close (shm_fd); | ||||
@@ -848,12 +849,10 @@ jack_access_registry (jack_shm_info_t *ri) | |||||
{ | { | ||||
/* registry must be locked */ | /* registry must be locked */ | ||||
HANDLE shm_fd; | HANDLE shm_fd; | ||||
LPSECURITY_ATTRIBUTES sec = 0; | |||||
strncpy (registry_id, "jack-shm-registry", sizeof (registry_id)); | strncpy (registry_id, "jack-shm-registry", sizeof (registry_id)); | ||||
/* try to open an existing segment */ | /* try to open an existing segment */ | ||||
if ((shm_fd = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, registry_id)) == NULL) { | if ((shm_fd = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, registry_id)) == NULL) { | ||||
int rc = GetLastError(); | int rc = GetLastError(); | ||||
if (rc != ERROR_FILE_NOT_FOUND) { | if (rc != ERROR_FILE_NOT_FOUND) { | ||||
@@ -862,7 +861,7 @@ jack_access_registry (jack_shm_info_t *ri) | |||||
return rc; | return rc; | ||||
} | } | ||||
if ((ri->attached_at = MapViewOfFile (shm_fd, FILE_MAP_ALL_ACCESS, 0, 0, JACK_SHM_REGISTRY_SIZE)) == NULL) { | |||||
if ((ri->ptr.attached_at = MapViewOfFile (shm_fd, FILE_MAP_ALL_ACCESS, 0, 0, JACK_SHM_REGISTRY_SIZE)) == NULL) { | |||||
jack_error ("Cannot mmap shm registry segment (%ld)", GetLastError()); | jack_error ("Cannot mmap shm registry segment (%ld)", GetLastError()); | ||||
jack_remove_shm (®istry_id); | jack_remove_shm (®istry_id); | ||||
CloseHandle (shm_fd); | CloseHandle (shm_fd); | ||||
@@ -871,7 +870,7 @@ jack_access_registry (jack_shm_info_t *ri) | |||||
/* set up global pointers */ | /* set up global pointers */ | ||||
ri->index = JACK_SHM_REGISTRY_INDEX; | ri->index = JACK_SHM_REGISTRY_INDEX; | ||||
jack_shm_header = ri->attached_at; | |||||
jack_shm_header = ri->ptr.attached_at; | |||||
jack_shm_registry = (jack_shm_registry_t *) (jack_shm_header + 1); | jack_shm_registry = (jack_shm_registry_t *) (jack_shm_header + 1); | ||||
//CloseHandle(shm_fd); // TO CHECK | //CloseHandle(shm_fd); // TO CHECK | ||||
@@ -886,16 +885,16 @@ jack_create_registry (jack_shm_info_t *ri) | |||||
strncpy (registry_id, "jack-shm-registry", sizeof (registry_id)); | strncpy (registry_id, "jack-shm-registry", sizeof (registry_id)); | ||||
if ((shm_fd = CreateFileMapping(INVALID_HANDLE_VALUE, | |||||
0, PAGE_READWRITE, | |||||
0, JACK_SHM_REGISTRY_SIZE, | |||||
if ((shm_fd = CreateFileMapping(INVALID_HANDLE_VALUE, | |||||
0, PAGE_READWRITE, | |||||
0, JACK_SHM_REGISTRY_SIZE, | |||||
registry_id)) == NULL || (shm_fd == INVALID_HANDLE_VALUE)) { | registry_id)) == NULL || (shm_fd == INVALID_HANDLE_VALUE)) { | ||||
int rc = GetLastError(); | int rc = GetLastError(); | ||||
jack_error ("Cannot create shm registry segment (%ld)", rc); | jack_error ("Cannot create shm registry segment (%ld)", rc); | ||||
return rc; | return rc; | ||||
} | } | ||||
if ((ri->attached_at = MapViewOfFile (shm_fd, FILE_MAP_ALL_ACCESS, 0, 0, JACK_SHM_REGISTRY_SIZE)) == NULL) { | |||||
if ((ri->ptr.attached_at = MapViewOfFile (shm_fd, FILE_MAP_ALL_ACCESS, 0, 0, JACK_SHM_REGISTRY_SIZE)) == NULL) { | |||||
jack_error ("Cannot mmap shm registry segment (%ld)", GetLastError()); | jack_error ("Cannot mmap shm registry segment (%ld)", GetLastError()); | ||||
jack_remove_shm (®istry_id); | jack_remove_shm (®istry_id); | ||||
CloseHandle (shm_fd); | CloseHandle (shm_fd); | ||||
@@ -904,7 +903,7 @@ jack_create_registry (jack_shm_info_t *ri) | |||||
/* set up global pointers */ | /* set up global pointers */ | ||||
ri->index = JACK_SHM_REGISTRY_INDEX; | ri->index = JACK_SHM_REGISTRY_INDEX; | ||||
jack_shm_header = ri->attached_at; | |||||
jack_shm_header = ri->ptr.attached_at; | |||||
jack_shm_registry = (jack_shm_registry_t *) (jack_shm_header + 1); | jack_shm_registry = (jack_shm_registry_t *) (jack_shm_header + 1); | ||||
/* initialize registry contents */ | /* initialize registry contents */ | ||||
@@ -924,8 +923,8 @@ void | |||||
jack_release_shm (jack_shm_info_t* si) | jack_release_shm (jack_shm_info_t* si) | ||||
{ | { | ||||
/* registry may or may not be locked */ | /* registry may or may not be locked */ | ||||
if (si->attached_at != NULL) { | |||||
UnmapViewOfFile (si->attached_at); | |||||
if (si->ptr.attached_at != NULL) { | |||||
UnmapViewOfFile (si->ptr.attached_at); | |||||
} | } | ||||
} | } | ||||
@@ -951,9 +950,9 @@ jack_shmalloc (const char *shm_name, jack_shmsize_t size, jack_shm_info_t* si) | |||||
goto unlock; | goto unlock; | ||||
} | } | ||||
if ((shm_fd = CreateFileMapping(INVALID_HANDLE_VALUE, | |||||
0, PAGE_READWRITE, | |||||
0, size, | |||||
if ((shm_fd = CreateFileMapping(INVALID_HANDLE_VALUE, | |||||
0, PAGE_READWRITE, | |||||
0, size, | |||||
name)) == NULL || (shm_fd == INVALID_HANDLE_VALUE)) { | name)) == NULL || (shm_fd == INVALID_HANDLE_VALUE)) { | ||||
int rc = GetLastError(); | int rc = GetLastError(); | ||||
jack_error ("Cannot create shm segment (%ld)",rc); | jack_error ("Cannot create shm segment (%ld)",rc); | ||||
@@ -966,7 +965,7 @@ jack_shmalloc (const char *shm_name, jack_shmsize_t size, jack_shm_info_t* si) | |||||
strncpy (registry->id, name, sizeof (registry->id)); | strncpy (registry->id, name, sizeof (registry->id)); | ||||
registry->allocator = _getpid(); | registry->allocator = _getpid(); | ||||
si->index = registry->index; | si->index = registry->index; | ||||
si->attached_at = NULL; /* not attached */ | |||||
si->ptr.attached_at = NULL; /* not attached */ | |||||
rc = 0; /* success */ | rc = 0; /* success */ | ||||
unlock: | unlock: | ||||
@@ -986,7 +985,7 @@ jack_attach_shm (jack_shm_info_t* si) | |||||
return -1; | return -1; | ||||
} | } | ||||
if ((si->attached_at = MapViewOfFile (shm_fd, FILE_MAP_ALL_ACCESS, 0, 0, registry->size)) == NULL) { | |||||
if ((si->ptr.attached_at = MapViewOfFile (shm_fd, FILE_MAP_ALL_ACCESS, 0, 0, registry->size)) == NULL) { | |||||
jack_error ("Cannot mmap shm segment (%ld)", GetLastError()); | jack_error ("Cannot mmap shm segment (%ld)", GetLastError()); | ||||
jack_remove_shm (®istry_id); | jack_remove_shm (®istry_id); | ||||
CloseHandle (shm_fd); | CloseHandle (shm_fd); | ||||
@@ -1009,10 +1008,10 @@ jack_attach_shm_read (jack_shm_info_t* si) | |||||
return -1; | return -1; | ||||
} | } | ||||
if ((si->attached_at = MapViewOfFile (shm_fd, FILE_MAP_READ, 0, 0, registry->size)) == NULL) { | |||||
jack_error ("Cannot mmap shm segment (%ld)", GetLastError()); | |||||
jack_remove_shm (®istry_id); | |||||
CloseHandle (shm_fd); | |||||
if ((si->ptr.attached_at = MapViewOfFile (shm_fd, FILE_MAP_READ, 0, 0, registry->size)) == NULL) { | |||||
jack_error("Cannot mmap shm segment (%ld)", GetLastError()); | |||||
jack_remove_shm(®istry_id); | |||||
CloseHandle(shm_fd); | |||||
return -1; | return -1; | ||||
} | } | ||||
@@ -1127,7 +1126,7 @@ jack_release_shm (jack_shm_info_t* si) | |||||
int | int | ||||
jack_shmalloc (const char* name_not_used, jack_shmsize_t size, | jack_shmalloc (const char* name_not_used, jack_shmsize_t size, | ||||
jack_shm_info_t* si) | |||||
jack_shm_info_t* si) | |||||
{ | { | ||||
int shmflags; | int shmflags; | ||||
int shmid; | int shmid; | ||||
@@ -27,11 +27,11 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||||
/* POST_PACKED_STRUCTURE needs to be a macro which | /* POST_PACKED_STRUCTURE needs to be a macro which | ||||
expands into a compiler directive. The directive must | expands into a compiler directive. The directive must | ||||
tell the compiler to arrange the preceding structure | tell the compiler to arrange the preceding structure | ||||
declaration so that it is packed on byte-boundaries rather | |||||
declaration so that it is packed on byte-boundaries rather | |||||
than use the natural alignment of the processor and/or | than use the natural alignment of the processor and/or | ||||
compiler. | compiler. | ||||
*/ | */ | ||||
#if (__GNUC__< 4) /* On Solaris, does not seem to work with GCC 3.XX serie */ | |||||
#if (__GNUC__< 4) /* Does not seem to work with GCC 3.XX serie */ | |||||
#define POST_PACKED_STRUCTURE | #define POST_PACKED_STRUCTURE | ||||
#elif defined(JACK_32_64) | #elif defined(JACK_32_64) | ||||
#define POST_PACKED_STRUCTURE __attribute__((__packed__)) | #define POST_PACKED_STRUCTURE __attribute__((__packed__)) | ||||
@@ -43,19 +43,19 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||||
#define EXPORT __attribute__((visibility("default"))) | #define EXPORT __attribute__((visibility("default"))) | ||||
#ifdef SERVER_SIDE | #ifdef SERVER_SIDE | ||||
#if (__GNUC__< 4) | #if (__GNUC__< 4) | ||||
#define SERVER_EXPORT | |||||
#define SERVER_EXPORT | |||||
#else | #else | ||||
#define SERVER_EXPORT __attribute__((visibility("default"))) | #define SERVER_EXPORT __attribute__((visibility("default"))) | ||||
#endif | |||||
#endif | |||||
#else | #else | ||||
#define SERVER_EXPORT | #define SERVER_EXPORT | ||||
#endif | #endif | ||||
#else | |||||
#else | |||||
#define MEM_ALIGN(x,y) x | #define MEM_ALIGN(x,y) x | ||||
#define EXPORT | #define EXPORT | ||||
#define SERVER_EXPORT | #define SERVER_EXPORT | ||||
/* Add other things here for non-gcc platforms for POST_PACKED_STRUCTURE */ | /* Add other things here for non-gcc platforms for POST_PACKED_STRUCTURE */ | ||||
#endif | #endif | ||||
#endif | #endif | ||||
@@ -1,6 +1,6 @@ | |||||
/* | /* | ||||
Copyright (C) 2005 Samuel TRACOL for GRAME | Copyright (C) 2005 Samuel TRACOL for GRAME | ||||
This program is free software; you can redistribute it and/or modify | This program is free software; you can redistribute it and/or modify | ||||
it under the terms of the GNU General Public License as published by | it under the terms of the GNU General Public License as published by | ||||
the Free Software Foundation; either version 2 of the License, or | the Free Software Foundation; either version 2 of the License, or | ||||
@@ -20,7 +20,7 @@ | |||||
/** @file jack_test.c | /** @file jack_test.c | ||||
* | * | ||||
* @brief This client test the jack API. | * @brief This client test the jack API. | ||||
* | |||||
* | |||||
*/ | */ | ||||
#include <stdio.h> | #include <stdio.h> | ||||
@@ -38,7 +38,7 @@ | |||||
#include <jack/transport.h> | #include <jack/transport.h> | ||||
#ifdef WIN32 | |||||
#if defined(WIN32) && !defined(M_PI) | |||||
#define M_PI 3.151592653 | #define M_PI 3.151592653 | ||||
#endif | #endif | ||||
@@ -122,9 +122,9 @@ int client_register = 0; | |||||
/** | /** | ||||
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* | *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* | ||||
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* | *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* | ||||
Callbacks & basics functions | Callbacks & basics functions | ||||
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* | *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* | ||||
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* | *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* | ||||
*/ | */ | ||||
@@ -266,9 +266,9 @@ int Jack_Sync_Callback(jack_transport_state_t state, jack_position_t *pos, void | |||||
/** | /** | ||||
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* | *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* | ||||
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* | *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* | ||||
processing functions | processing functions | ||||
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* | *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* | ||||
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* | *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* | ||||
* Proccess1 is for client1 | * Proccess1 is for client1 | ||||
@@ -370,7 +370,7 @@ int process2(jack_nframes_t nframes, void *arg) | |||||
} | } | ||||
} | } | ||||
} | } | ||||
if (process2_activated == 2) { // envoie de signal1 pour test tie mode et le r�cup�re direct + latence de la boucle jack... | if (process2_activated == 2) { // envoie de signal1 pour test tie mode et le r�cup�re direct + latence de la boucle jack... | ||||
out2 = (jack_default_audio_sample_t *) jack_port_get_buffer (output_port2, nframes); | out2 = (jack_default_audio_sample_t *) jack_port_get_buffer (output_port2, nframes); | ||||
in2 = (jack_default_audio_sample_t *) jack_port_get_buffer (input_port2, nframes); | in2 = (jack_default_audio_sample_t *) jack_port_get_buffer (input_port2, nframes); | ||||
@@ -389,7 +389,7 @@ int process2(jack_nframes_t nframes, void *arg) | |||||
} | } | ||||
} | } | ||||
} | } | ||||
if (process2_activated == 3) { // envoie de -signal1 pour sommation en oppo de phase par jack | if (process2_activated == 3) { // envoie de -signal1 pour sommation en oppo de phase par jack | ||||
in2 = (jack_default_audio_sample_t *) jack_port_get_buffer (input_port2, nframes); | in2 = (jack_default_audio_sample_t *) jack_port_get_buffer (input_port2, nframes); | ||||
@@ -416,14 +416,14 @@ static int _process (jack_nframes_t nframes) | |||||
out = (jack_default_audio_sample_t *)jack_port_get_buffer (output_port1, nframes); | out = (jack_default_audio_sample_t *)jack_port_get_buffer (output_port1, nframes); | ||||
memcpy (out, in, | memcpy (out, in, | ||||
sizeof (jack_default_audio_sample_t) * nframes); | sizeof (jack_default_audio_sample_t) * nframes); | ||||
return 0; | |||||
return 0; | |||||
} | } | ||||
static void* jack_thread(void *arg) | |||||
static void* jack_thread(void *arg) | |||||
{ | { | ||||
jack_client_t* client = (jack_client_t*) arg; | jack_client_t* client = (jack_client_t*) arg; | ||||
jack_nframes_t last_thread_time = jack_frame_time(client); | jack_nframes_t last_thread_time = jack_frame_time(client); | ||||
while (1) { | while (1) { | ||||
jack_nframes_t frames = jack_cycle_wait (client); | jack_nframes_t frames = jack_cycle_wait (client); | ||||
jack_nframes_t current_thread_time = jack_frame_time(client); | jack_nframes_t current_thread_time = jack_frame_time(client); | ||||
@@ -433,7 +433,7 @@ static void* jack_thread(void *arg) | |||||
last_thread_time = current_thread_time; | last_thread_time = current_thread_time; | ||||
jack_cycle_signal (client, status); | jack_cycle_signal (client, status); | ||||
} | } | ||||
return 0; | return 0; | ||||
} | } | ||||
@@ -441,7 +441,7 @@ static void* jack_thread(void *arg) | |||||
int process3(jack_nframes_t nframes, void *arg) | int process3(jack_nframes_t nframes, void *arg) | ||||
{ | { | ||||
static int process3_call = 0; | static int process3_call = 0; | ||||
if (process3_call++ > 10) { | if (process3_call++ > 10) { | ||||
Log("process3 callback : exiting...\n"); | Log("process3 callback : exiting...\n"); | ||||
return -1; | return -1; | ||||
@@ -457,15 +457,15 @@ int process4(jack_nframes_t nframes, void *arg) | |||||
static jack_nframes_t last_time = jack_frame_time(client); | static jack_nframes_t last_time = jack_frame_time(client); | ||||
static jack_nframes_t tolerance = (jack_nframes_t)(cur_buffer_size * 0.1f); | static jack_nframes_t tolerance = (jack_nframes_t)(cur_buffer_size * 0.1f); | ||||
jack_nframes_t cur_time = jack_frame_time(client); | jack_nframes_t cur_time = jack_frame_time(client); | ||||
jack_nframes_t delta_time = cur_time - last_time; | jack_nframes_t delta_time = cur_time - last_time; | ||||
Log("calling process4 callback : jack_frame_time = %ld delta_time = %ld\n", cur_time, delta_time); | Log("calling process4 callback : jack_frame_time = %ld delta_time = %ld\n", cur_time, delta_time); | ||||
if (delta_time > 0 && (unsigned int)abs(delta_time - cur_buffer_size) > tolerance) { | if (delta_time > 0 && (unsigned int)abs(delta_time - cur_buffer_size) > tolerance) { | ||||
printf("!!! ERROR !!! jack_frame_time seems to return incorrect values cur_buffer_size = %d, delta_time = %d\n", cur_buffer_size, delta_time); | printf("!!! ERROR !!! jack_frame_time seems to return incorrect values cur_buffer_size = %d, delta_time = %d\n", cur_buffer_size, delta_time); | ||||
} | } | ||||
last_time = cur_time; | last_time = cur_time; | ||||
return 0; | return 0; | ||||
} | } | ||||
@@ -525,7 +525,7 @@ int main (int argc, char *argv[]) | |||||
int is_mine = 0; // to test jack_port_is_mine function... | int is_mine = 0; // to test jack_port_is_mine function... | ||||
const char *options = "kRnqvt:"; | const char *options = "kRnqvt:"; | ||||
float ratio; // for speed calculation in freewheel mode | float ratio; // for speed calculation in freewheel mode | ||||
jack_options_t jack_options = JackNullOption; | |||||
jack_options_t jack_options = JackNullOption; | |||||
struct option long_options[] = { | struct option long_options[] = { | ||||
{"realtime", 0, 0, 'R'}, | {"realtime", 0, 0, 'R'}, | ||||
{"non-realtime", 0, 0, 'n'}, | {"non-realtime", 0, 0, 'n'}, | ||||
@@ -602,8 +602,8 @@ int main (int argc, char *argv[]) | |||||
printf("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*--*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n"); | printf("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*--*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n"); | ||||
/** | /** | ||||
* Register a client... | |||||
* | |||||
* Register a client... | |||||
* | |||||
*/ | */ | ||||
Log("Register a client using jack_client_open()...\n"); | Log("Register a client using jack_client_open()...\n"); | ||||
client1 = jack_client_open(client_name1, jack_options, &status, server_name); | client1 = jack_client_open(client_name1, jack_options, &status, server_name); | ||||
@@ -618,7 +618,7 @@ int main (int argc, char *argv[]) | |||||
if (status & JackServerStarted) { | if (status & JackServerStarted) { | ||||
fprintf(stderr, "JACK server started\n"); | fprintf(stderr, "JACK server started\n"); | ||||
} | } | ||||
/** | /** | ||||
* try to register another one with the same name... | * try to register another one with the same name... | ||||
* | * | ||||
@@ -631,7 +631,7 @@ int main (int argc, char *argv[]) | |||||
printf("!!! ERROR !!! Jackd server has accepted multiples client with the same name !\n"); | printf("!!! ERROR !!! Jackd server has accepted multiples client with the same name !\n"); | ||||
jack_client_close(client2); | jack_client_close(client2); | ||||
} | } | ||||
/** | /** | ||||
* try to register another one with the same name using jack_client_open ==> since JackUseExactName is not used, an new client should be opened... | * try to register another one with the same name using jack_client_open ==> since JackUseExactName is not used, an new client should be opened... | ||||
* | * | ||||
@@ -644,7 +644,7 @@ int main (int argc, char *argv[]) | |||||
} else { | } else { | ||||
printf("!!! ERROR !!! Jackd server automatic renaming feature does not work!\n"); | printf("!!! ERROR !!! Jackd server automatic renaming feature does not work!\n"); | ||||
} | } | ||||
/** | /** | ||||
* testing client name... | * testing client name... | ||||
* Verify that the name sended at registration and the one returned by jack server is the same... | * Verify that the name sended at registration and the one returned by jack server is the same... | ||||
@@ -683,31 +683,31 @@ int main (int argc, char *argv[]) | |||||
if (jack_set_buffer_size_callback(client1, Jack_Update_Buffer_Size, 0) != 0) { | if (jack_set_buffer_size_callback(client1, Jack_Update_Buffer_Size, 0) != 0) { | ||||
printf("Error when calling buffer_size_callback !\n"); | printf("Error when calling buffer_size_callback !\n"); | ||||
} | } | ||||
if (jack_set_graph_order_callback(client1, Jack_Graph_Order_Callback, 0) != 0) { | if (jack_set_graph_order_callback(client1, Jack_Graph_Order_Callback, 0) != 0) { | ||||
printf("Error when calling Jack_Graph_Order_Callback() !\n"); | printf("Error when calling Jack_Graph_Order_Callback() !\n"); | ||||
} | } | ||||
if (jack_set_xrun_callback(client1, Jack_XRun_Callback, 0 ) != 0) { | if (jack_set_xrun_callback(client1, Jack_XRun_Callback, 0 ) != 0) { | ||||
printf("Error when calling jack_set_xrun_callback() !\n"); | printf("Error when calling jack_set_xrun_callback() !\n"); | ||||
} | } | ||||
if (jack_set_sample_rate_callback(client1, Jack_Sample_Rate_Callback, 0 ) != 0) { | if (jack_set_sample_rate_callback(client1, Jack_Sample_Rate_Callback, 0 ) != 0) { | ||||
printf("Error when calling Jack_Sample_Rate_Callback() !\n"); | printf("Error when calling Jack_Sample_Rate_Callback() !\n"); | ||||
} | } | ||||
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_port_connect_callback(client1, Jack_Port_Connect, 0) != 0) { | if (jack_set_port_connect_callback(client1, Jack_Port_Connect, 0) != 0) { | ||||
printf("Error when calling jack_set_port_connect_callback() !\n"); | printf("Error when calling jack_set_port_connect_callback() !\n"); | ||||
} | } | ||||
if (jack_set_client_registration_callback(client1, Jack_Client_Registration_Callback, 0) != 0) { | if (jack_set_client_registration_callback(client1, Jack_Client_Registration_Callback, 0) != 0) { | ||||
printf("Error when calling jack_set_client_registration_callback() !\n"); | printf("Error when calling jack_set_client_registration_callback() !\n"); | ||||
} | } | ||||
jack_set_error_function(Jack_Error_Callback); | jack_set_error_function(Jack_Error_Callback); | ||||
/** | /** | ||||
@@ -747,7 +747,7 @@ int main (int argc, char *argv[]) | |||||
printf("!!! ERROR !!! Can't register any port for the client !\n"); | printf("!!! ERROR !!! Can't register any port for the client !\n"); | ||||
exit(1); | exit(1); | ||||
} | } | ||||
/** | /** | ||||
* Test port type of the just registered port. | * Test port type of the just registered port. | ||||
* | * | ||||
@@ -811,7 +811,7 @@ int main (int argc, char *argv[]) | |||||
printf ("Fatal error : cannot activate client1\n"); | printf ("Fatal error : cannot activate client1\n"); | ||||
exit(1); | exit(1); | ||||
} | } | ||||
/** | /** | ||||
* Test if init callback initThread have been called. | * Test if init callback initThread have been called. | ||||
* | * | ||||
@@ -925,7 +925,7 @@ int main (int argc, char *argv[]) | |||||
/** | /** | ||||
* remove the output port previously created | * remove the output port previously created | ||||
* no more ports should subsist here for our client. | * no more ports should subsist here for our client. | ||||
* | |||||
* | |||||
*/ | */ | ||||
if (jack_port_unregister(client1, output_port1) != 0) { | if (jack_port_unregister(client1, output_port1) != 0) { | ||||
printf("!!! ERROR !!! while unregistering port %s.\n", jack_port_name(output_port1)); | printf("!!! ERROR !!! while unregistering port %s.\n", jack_port_name(output_port1)); | ||||
@@ -933,7 +933,7 @@ int main (int argc, char *argv[]) | |||||
/** | /** | ||||
* list all in ports | * list all in ports | ||||
* | |||||
* | |||||
*/ | */ | ||||
inports = jack_get_ports(client1, NULL, NULL, 0); | inports = jack_get_ports(client1, NULL, NULL, 0); | ||||
@@ -1133,7 +1133,7 @@ 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) | ||||
/** | /** | ||||
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* | *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* | ||||
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* | *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* | ||||
@@ -1157,7 +1157,7 @@ int main (int argc, char *argv[]) | |||||
} | } | ||||
exit(1); | exit(1); | ||||
} | } | ||||
// Check client registration callback | // Check client registration callback | ||||
jack_sleep(1000); | jack_sleep(1000); | ||||
if (client_register == 0) | if (client_register == 0) | ||||
@@ -1368,7 +1368,7 @@ int main (int argc, char *argv[]) | |||||
} | } | ||||
/** | /** | ||||
* Test TIE MODE | |||||
* Test TIE MODE | |||||
* (This mode seems to be problematic in standard jack version 0.100. It seems that nobody | * (This mode seems to be problematic in standard jack version 0.100. It seems that nobody | ||||
* is used to apply this mode because the tie mode doesn't work at all. A patch seems difficult to produce | * is used to apply this mode because the tie mode doesn't work at all. A patch seems difficult to produce | ||||
* in this version of jack. Tie mode work well in MP version.) | * in this version of jack. Tie mode work well in MP version.) | ||||
@@ -1468,7 +1468,7 @@ int main (int argc, char *argv[]) | |||||
* So, the result must be zero... | * So, the result must be zero... | ||||
* See process1 for details about steps of this test | * See process1 for details about steps of this test | ||||
* | * | ||||
*/ | |||||
*/ | |||||
// fprintf(file, "Sum test\n"); | // fprintf(file, "Sum test\n"); | ||||
Log("Checking summation capabilities of patching...\n"); | Log("Checking summation capabilities of patching...\n"); | ||||
output_port1b = jack_port_register(client1, "out1b", | output_port1b = jack_port_register(client1, "out1b", | ||||
@@ -1565,7 +1565,7 @@ int main (int argc, char *argv[]) | |||||
outports = jack_get_ports(client1, NULL, NULL, JackPortIsPhysical | JackPortIsOutput); | outports = jack_get_ports(client1, NULL, NULL, JackPortIsPhysical | JackPortIsOutput); | ||||
if (inports[0] != NULL) { | if (inports[0] != NULL) { | ||||
output_ext_latency = jack_port_get_latency (jack_port_by_name(client1, inports[0])); // from client to out driver (which has "inputs" ports..) | output_ext_latency = jack_port_get_latency (jack_port_by_name(client1, inports[0])); // from client to out driver (which has "inputs" ports..) | ||||
input_ext_latency = jack_port_get_latency (jack_port_by_name(client1, outports[0])); // from in driver (which has "output" ports..) to client | |||||
input_ext_latency = jack_port_get_latency (jack_port_by_name(client1, outports[0])); // from in driver (which has "output" ports..) to client | |||||
if (output_ext_latency != jack_port_get_total_latency(client1, jack_port_by_name(client1, inports[0]))) { | if (output_ext_latency != jack_port_get_total_latency(client1, jack_port_by_name(client1, inports[0]))) { | ||||
t_error = 1; | t_error = 1; | ||||
printf("!!! ERROR !!! get_latency & get_all_latency for a PHY device (unconnected) didn't return the same value !\n"); | printf("!!! ERROR !!! get_latency & get_all_latency for a PHY device (unconnected) didn't return the same value !\n"); | ||||
@@ -1641,7 +1641,7 @@ int main (int argc, char *argv[]) | |||||
jack_port_disconnect(client1, input_port2); | jack_port_disconnect(client1, input_port2); | ||||
jack_port_disconnect(client1, output_port1); | jack_port_disconnect(client1, output_port1); | ||||
jack_port_disconnect(client1, output_port2); | jack_port_disconnect(client1, output_port2); | ||||
jack_sleep(1000); | jack_sleep(1000); | ||||
free(inports); | free(inports); | ||||
@@ -1836,23 +1836,23 @@ int main (int argc, char *argv[]) | |||||
jack_sleep (1 * 1000); | jack_sleep (1 * 1000); | ||||
time_before_exit--; | time_before_exit--; | ||||
} | } | ||||
if (jack_deactivate(client2) != 0) { | if (jack_deactivate(client2) != 0) { | ||||
printf("!!! ERROR !!! jack_deactivate does not return 0 for client2 !\n"); | printf("!!! ERROR !!! jack_deactivate does not return 0 for client2 !\n"); | ||||
} | } | ||||
if (jack_deactivate(client1) != 0) { | if (jack_deactivate(client1) != 0) { | ||||
printf("!!! ERROR !!! jack_deactivate does not return 0 for client1 !\n"); | printf("!!! ERROR !!! jack_deactivate does not return 0 for client1 !\n"); | ||||
} | } | ||||
/** | /** | ||||
* Checking jack_frame_time. | * Checking jack_frame_time. | ||||
*/ | */ | ||||
Log("Testing jack_frame_time...\n"); | Log("Testing jack_frame_time...\n"); | ||||
jack_set_process_callback(client1, process4, client1); | jack_set_process_callback(client1, process4, client1); | ||||
jack_activate(client1); | jack_activate(client1); | ||||
jack_sleep(2 * 1000); | |||||
jack_sleep(2 * 1000); | |||||
/** | /** | ||||
* Checking alternate thread model | * Checking alternate thread model | ||||
*/ | */ | ||||
@@ -1862,7 +1862,7 @@ int main (int argc, char *argv[]) | |||||
jack_set_process_thread(client1, jack_thread, client1); | jack_set_process_thread(client1, jack_thread, client1); | ||||
jack_activate(client1); | jack_activate(client1); | ||||
jack_sleep(2 * 1000); | jack_sleep(2 * 1000); | ||||
/** | /** | ||||
* Checking callback exiting : when the return code is != 0, the client is desactivated. | * Checking callback exiting : when the return code is != 0, the client is desactivated. | ||||
*/ | */ | ||||
@@ -1871,8 +1871,8 @@ int main (int argc, char *argv[]) | |||||
jack_set_process_thread(client1, NULL, NULL); // remove thread callback | jack_set_process_thread(client1, NULL, NULL); // remove thread callback | ||||
jack_set_process_callback(client1, process3, 0); | jack_set_process_callback(client1, process3, 0); | ||||
jack_activate(client1); | jack_activate(client1); | ||||
jack_sleep(3 * 1000); | |||||
jack_sleep(3 * 1000); | |||||
/** | /** | ||||
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* | *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* | ||||
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* | *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* | ||||
@@ -18,9 +18,25 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||||
*/ | */ | ||||
#ifndef __JackCompilerDeps_WIN32__ | #ifndef __JackCompilerDeps_WIN32__ | ||||
#define __JackCompilerDeps_WIN32__ | |||||
#define __JackCompilerDeps_WIN32__ | |||||
#if __GNUC__ | |||||
#if __GNUC__ | |||||
#ifndef POST_PACKED_STRUCTURE | |||||
/* POST_PACKED_STRUCTURE needs to be a macro which | |||||
expands into a compiler directive. The directive must | |||||
tell the compiler to arrange the preceding structure | |||||
declaration so that it is packed on byte-boundaries rather | |||||
than use the natural alignment of the processor and/or | |||||
compiler. | |||||
*/ | |||||
#if (__GNUC__< 4) /* Does not seem to work with GCC 3.XX serie */ | |||||
#define POST_PACKED_STRUCTURE | |||||
#elif defined(JACK_32_64) | |||||
#define POST_PACKED_STRUCTURE __attribute__((__packed__)) | |||||
#else | |||||
#define POST_PACKED_STRUCTURE | |||||
#endif | |||||
#endif | |||||
#define MEM_ALIGN(x,y) x __attribute__((aligned(y))) | #define MEM_ALIGN(x,y) x __attribute__((aligned(y))) | ||||
#define EXPORT __declspec(dllexport) | #define EXPORT __declspec(dllexport) | ||||
#ifdef SERVER_SIDE | #ifdef SERVER_SIDE | ||||
@@ -29,7 +45,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||||
#define SERVER_EXPORT | #define SERVER_EXPORT | ||||
#endif | #endif | ||||
#else | #else | ||||
//#define MEM_ALIGN(x,y) __declspec(align(y)) x | |||||
#define MEM_ALIGN(x,y) x | #define MEM_ALIGN(x,y) x | ||||
#define EXPORT __declspec(dllexport) | #define EXPORT __declspec(dllexport) | ||||
#ifdef SERVER_SIDE | #ifdef SERVER_SIDE | ||||
@@ -1,9 +1,9 @@ | |||||
<*project | <*project | ||||
version = 4 civer = "Free v4.14.3" winver = "2.6/5.1.2600" > | version = 4 civer = "Free v4.14.3" winver = "2.6/5.1.2600" > | ||||
<output> .</> | <output> .</> | ||||
<exename> Jack_v1.9.2_setup.exe</> | |||||
<exename> Jack_v1.9.3_setup.exe</> | |||||
<digitsign> </> | <digitsign> </> | ||||
<appname> Jack v1.9.2</> | |||||
<appname> Jack v1.9.3</> | |||||
<password> </> | <password> </> | ||||
<addlang> </> | <addlang> </> | ||||
<icon> Default - 2</> | <icon> Default - 2</> | ||||