git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@1583 0c269be4-1314-0410-8aa9-9f06e86f4224tags/0.67
@@ -13,6 +13,10 @@ Tom Szilagyi | |||
Jackdmp changes log | |||
--------------------------- | |||
2007-10-11 Stephane Letz <letz@grame.fr> | |||
* Internal loadable client implementation (in progress). | |||
2007-10-08 Stephane Letz <letz@grame.fr> | |||
* Use .jackdrc file (instead of .jackdmprc). Install script now creates a link "jackd ==> jackdmp" so that automatic launch can work correctly. | |||
@@ -1422,27 +1422,85 @@ EXPORT int jack_drop_real_time_scheduling(pthread_t thread) | |||
} | |||
// intclient.h | |||
EXPORT char* jack_get_internal_client_name(jack_client_t* ext_client, jack_intclient_t intclient) | |||
{ | |||
JackLog("jack_get_internal_client_name: not yet implemented\n"); | |||
return ""; | |||
#ifdef __CLIENTDEBUG__ | |||
JackLibGlobals::CheckContext(); | |||
#endif | |||
JackClient* client = (JackClient*)ext_client; | |||
if (client == NULL) { | |||
jack_error("jack_get_internal_client_name called with a NULL client"); | |||
return ""; | |||
} else { | |||
return client->GetInternalClientName(intclient); | |||
} | |||
} | |||
EXPORT jack_intclient_t jack_internal_client_handle(jack_client_t* ext_client, const char* client_name, jack_status_t* status) | |||
{ | |||
JackLog("jack_internal_client_handle: not yet implemented\n"); | |||
return 0; | |||
#ifdef __CLIENTDEBUG__ | |||
JackLibGlobals::CheckContext(); | |||
#endif | |||
JackClient* client = (JackClient*)ext_client; | |||
if (client == NULL) { | |||
jack_error("jack_internal_client_handle called with a NULL client"); | |||
return 0; | |||
} else { | |||
jack_status_t my_status; | |||
if (status == NULL) /* no status from caller? */ | |||
status = &my_status; /* use local status word */ | |||
*status = (jack_status_t)0; | |||
return client->InternalClientHandle(client_name, status); | |||
} | |||
} | |||
EXPORT jack_intclient_t jack_internal_client_load(jack_client_t* ext_client, const char* client_name, jack_options_t options, jack_status_t* status, ...) | |||
{ | |||
JackLog("jack_internal_client_load: not yet implemented\n"); | |||
return 0; | |||
#ifdef __CLIENTDEBUG__ | |||
JackLibGlobals::CheckContext(); | |||
#endif | |||
JackClient* client = (JackClient*)ext_client; | |||
if (client == NULL) { | |||
jack_error("jack_internal_client_load called with a NULL client"); | |||
return 0; | |||
} else { | |||
va_list ap; | |||
jack_varargs_t va; | |||
jack_status_t my_status; | |||
if (status == NULL) /* no status from caller? */ | |||
status = &my_status; /* use local status word */ | |||
*status = (jack_status_t)0; | |||
/* validate parameters */ | |||
if ((options & ~JackLoadOptions)) { | |||
int my_status1 = *status | (JackFailure | JackInvalidOption); | |||
*status = (jack_status_t)my_status1; | |||
return 0; | |||
} | |||
/* parse variable arguments */ | |||
va_start(ap, status); | |||
jack_varargs_parse(options, ap, &va); | |||
va_end(ap); | |||
return client->InternalClientLoad(client_name, options, status, &va); | |||
} | |||
} | |||
EXPORT jack_status_t jack_internal_client_unload(jack_client_t* ext_client, jack_intclient_t intclient) | |||
{ | |||
JackLog("jack_internal_client_unload: not yet implemented\n"); | |||
return JackFailure; | |||
#ifdef __CLIENTDEBUG__ | |||
JackLibGlobals::CheckContext(); | |||
#endif | |||
JackClient* client = (JackClient*)ext_client; | |||
if (client == NULL) { | |||
jack_error("jack_internal_client_unload called with a NULL client"); | |||
return (jack_status_t)(JackNoSuchClient | JackFailure); | |||
} else { | |||
jack_status_t my_status; | |||
client->InternalClientUnload(intclient, &my_status); | |||
return my_status; | |||
} | |||
} | |||
@@ -35,7 +35,7 @@ extern "C" | |||
EXPORT int jack_internal_client_new (const char *client_name, | |||
const char *load_name, | |||
const char *load_init); | |||
EXPORT jack_client_t* my_jack_internal_client_new(const char* client_name); | |||
EXPORT jack_client_t* my_jack_internal_client_new(const char* client_name, const char* dll_name, const char* object_data); | |||
EXPORT void jack_internal_client_close (const char *client_name); | |||
EXPORT void my_jack_internal_client_close (jack_client_t* client); | |||
EXPORT int jack_is_realtime (jack_client_t *client); | |||
@@ -109,8 +109,19 @@ class JackClientChannelInterface | |||
{} | |||
virtual void SetTimebaseCallback(int refnum, int conditional, int* result) | |||
{} | |||
virtual void GetInternalClientName(int refnum, int int_ref, char* name_res, int* result) | |||
{} | |||
virtual void InternalClientHandle(int refnum, const char* client_name, int* status, int* int_ref, int* result) | |||
{} | |||
virtual void InternalClientLoad(int refnum, const char* client_name, const char* so_name, const char* objet_data, int options, int* status, int* int_ref, int* result) | |||
{} | |||
virtual void InternalClientUnload(int refnum, int int_ref, int* status, int* result) | |||
{} | |||
}; | |||
/*! | |||
@@ -820,5 +820,61 @@ int JackClient::SetPortRegistrationCallback(JackPortRegistrationCallback callbac | |||
} | |||
} | |||
//------------------ | |||
// Internal clients | |||
//------------------ | |||
char* JackClient::GetInternalClientName(int ref) | |||
{ | |||
// TODO | |||
return ""; | |||
} | |||
int JackClient::InternalClientHandle(const char* client_name, jack_status_t* status) | |||
{ | |||
int int_ref, result = -1; | |||
fChannel->InternalClientHandle(GetClientControl()->fRefNum, client_name, (int*)status, &int_ref, &result); | |||
return int_ref; | |||
} | |||
int JackClient::InternalClientLoad(const char* client_name, jack_options_t options, jack_status_t* status, jack_varargs_t* va) | |||
{ | |||
if (strlen(client_name) >= JACK_CLIENT_NAME_SIZE) { | |||
jack_error ("\"%s\" is too long for a JACK client name.\n" | |||
"Please use %lu characters or less.", | |||
client_name, JACK_CLIENT_NAME_SIZE); | |||
return 0; | |||
} | |||
if (va->load_name && (strlen(va->load_name) >= PATH_MAX)) { | |||
jack_error("\"%s\" is too long for a shared object name.\n" | |||
"Please use %lu characters or less.", | |||
va->load_name, PATH_MAX); | |||
int my_status1 = *status | (JackFailure | JackInvalidOption); | |||
*status = (jack_status_t)my_status1; | |||
return 0; | |||
} | |||
if (va->load_init && (strlen(va->load_init) >= JACK_LOAD_INIT_LIMIT)) { | |||
jack_error ("\"%s\" is too long for internal client init " | |||
"string.\nPlease use %lu characters or less.", | |||
va->load_init, JACK_LOAD_INIT_LIMIT); | |||
int my_status1 = *status | (JackFailure | JackInvalidOption); | |||
*status = (jack_status_t)my_status1; | |||
return 0; | |||
} | |||
int int_ref, result = -1; | |||
fChannel->InternalClientLoad(GetClientControl()->fRefNum, client_name, va->load_name, va->load_init, options, (int*)status, &int_ref, &result); | |||
return int_ref; | |||
} | |||
void JackClient::InternalClientUnload(int ref, jack_status_t* status) | |||
{ | |||
int result = -1; | |||
fChannel->InternalClientUnload(GetClientControl()->fRefNum, ref, (int*)status, &result); | |||
} | |||
} // end of namespace | |||
@@ -27,6 +27,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||
#include "JackSynchro.h" | |||
#include "types.h" | |||
#include "transport_types.h" | |||
#include "varargs.h" | |||
#include <list> | |||
namespace Jack | |||
@@ -149,6 +150,12 @@ class JackClient : public JackClientInterface, public JackRunnableInterface | |||
virtual int SetClientRegistrationCallback(JackClientRegistrationCallback callback, void* arg); | |||
virtual int SetFreewheelCallback(JackFreewheelCallback callback, void* arg); | |||
virtual int SetPortRegistrationCallback(JackPortRegistrationCallback callback, void* arg); | |||
// Internal clients | |||
virtual char* GetInternalClientName(int ref); | |||
virtual int InternalClientHandle(const char* client_name, jack_status_t* status); | |||
virtual int InternalClientLoad(const char* client_name, jack_options_t options, jack_status_t* status, jack_varargs_t* va); | |||
virtual void InternalClientUnload(int ref, jack_status_t* status); | |||
// JackRunnableInterface interface | |||
bool Init(); | |||
@@ -28,6 +28,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||
#include "JackEngine.h" | |||
#include "JackExternalClient.h" | |||
#include "JackInternalClient.h" | |||
#include "JackEngineControl.h" | |||
#include "JackClientControl.h" | |||
#include "JackEngineTiming.h" | |||
@@ -88,7 +89,6 @@ int JackEngine::Close() | |||
JackClientInterface* client = fClientTable[i]; | |||
if (client) { | |||
JackLog("JackEngine::Close remaining client %ld\n", i); | |||
ClientCloseAux(i, client, false); | |||
client->Close(); | |||
delete client; | |||
} | |||
@@ -373,6 +373,53 @@ void JackEngine::NotifyActivate(int refnum) | |||
NotifyClient(refnum, kActivateClient, true, 0); | |||
} | |||
//---------------------------- | |||
// Loadable client management | |||
//---------------------------- | |||
int JackEngine::GetInternalClientName(int int_ref, char* name_res) | |||
{ | |||
JackClientInterface* client = fClientTable[int_ref]; | |||
if (client) { | |||
strncpy(name_res, client->GetClientControl()->fName, JACK_CLIENT_NAME_SIZE); | |||
return 0; | |||
} else { | |||
return -1; | |||
} | |||
} | |||
int JackEngine::InternalClientHandle(const char* client_name, int* status, int* int_ref) | |||
{ | |||
// Clear status | |||
*status = 0; | |||
for (int i = 0; i < CLIENT_NUM; i++) { | |||
JackClientInterface* client = fClientTable[i]; | |||
if (client && dynamic_cast<JackLoadableInternalClient*>(client) && (strcmp(client->GetClientControl()->fName, client_name) == 0)) { | |||
JackLog("InternalClientHandle found client name = %s ref = %ld\n", client_name, i); | |||
*int_ref = i; | |||
return 0; | |||
} | |||
} | |||
*status |= (JackNoSuchClient | JackFailure); | |||
return -1; | |||
} | |||
int JackEngine::InternalClientUnload(int refnum, int* status) | |||
{ | |||
JackClientInterface* client = fClientTable[refnum]; | |||
if (client) { | |||
int res = client->Close(); | |||
delete client; | |||
*status = 0; | |||
return res; | |||
} else { | |||
*status = (JackNoSuchClient | JackFailure); | |||
return -1; | |||
} | |||
} | |||
//------------------- | |||
// Client management | |||
//------------------- | |||
@@ -384,8 +431,8 @@ int JackEngine::ClientCheck(const char* name, char* name_res, int protocol, int | |||
strcpy(name_res, name); | |||
if (protocol != JACK_PROTOCOL_VERSION) { | |||
*status |= (JackFailure|JackVersionError); | |||
jack_error ("JACK protocol mismatch (%d vs %d)", protocol, JACK_PROTOCOL_VERSION); | |||
*status |= (JackFailure | JackVersionError); | |||
jack_error("JACK protocol mismatch (%d vs %d)", protocol, JACK_PROTOCOL_VERSION); | |||
return -1; | |||
} | |||
@@ -78,8 +78,7 @@ class JackEngine | |||
int Open(); | |||
int Close(); | |||
// Client management | |||
int ClientCheck(const char* name, char* name_res, int protocol, int options, int* status); | |||
int ClientExternalOpen(const char* name, int* ref, int* shared_engine, int* shared_client, int* shared_graph_manager); | |||
@@ -90,6 +89,11 @@ class JackEngine | |||
int ClientActivate(int refnum); | |||
int ClientDeactivate(int refnum); | |||
// Internal lient management | |||
int GetInternalClientName(int int_ref, char* name_res); | |||
int InternalClientHandle(const char* client_name, int* status, int* int_ref); | |||
int InternalClientUnload(int refnum, int* status); | |||
// Port management | |||
int PortRegister(int refnum, const char* name, unsigned int flags, unsigned int buffer_size, jack_port_id_t* port_index); | |||
@@ -116,5 +116,51 @@ JackClientControl* JackInternalClient::GetClientControl() const | |||
return fClientControl; | |||
} | |||
JackLoadableInternalClient::JackLoadableInternalClient(JackServer* server, JackSynchro** table, const char* so_name, const char* object_data) | |||
:JackInternalClient(server, table) | |||
{ | |||
char path_to_so[PATH_MAX + 1]; | |||
//snprintf(path_to_so, sizeof(path_to_so), ADDON_DIR "/%s.so", so_name); | |||
snprintf(path_to_so, sizeof(path_to_so), so_name); | |||
snprintf(fObjectData, JACK_LOAD_INIT_LIMIT, object_data); | |||
fHandle = LoadJackModule(path_to_so); | |||
printf("path_to_so %s\n", path_to_so); | |||
if (fHandle == 0) { | |||
jack_error("error loading %s", so_name); | |||
throw -1; | |||
} | |||
fInitialize = (InitializeCallback)GetJackProc(fHandle, "jack_initialize"); | |||
if (!fInitialize) { | |||
UnloadJackModule(fHandle); | |||
jack_error("symbol jack_initialize cannot be found in %s", so_name); | |||
throw -1; | |||
} | |||
fFinish = (FinishCallback)GetJackProc(fHandle, "jack_finish"); | |||
if (!fFinish) { | |||
UnloadJackModule(fHandle); | |||
jack_error("symbol jack_finish cannot be found in %s", so_name); | |||
throw -1; | |||
} | |||
} | |||
JackLoadableInternalClient::~JackLoadableInternalClient() | |||
{ | |||
if (fFinish) | |||
fFinish(fProcessArg); | |||
UnloadJackModule(fHandle); | |||
} | |||
int JackLoadableInternalClient::Open(const char* name, jack_options_t options, jack_status_t* status) | |||
{ | |||
int res = JackInternalClient::Open(name, options, status); | |||
if (res == 0) | |||
fInitialize((jack_client_t*)this, fObjectData); | |||
return res; | |||
} | |||
} // end of namespace | |||
@@ -55,6 +55,51 @@ class JackInternalClient : public JackClient | |||
static JackEngineControl* fEngineControl; /*! Shared engine cotrol */ | |||
}; | |||
/*! | |||
\brief Loadable internal clients in the server. | |||
*/ | |||
#ifdef WIN32 | |||
#include <windows.h> | |||
#define HANDLE HINSTANCE | |||
#define LoadJackModule(name) LoadLibrary((name)); | |||
#define UnloadJackModule(handle) FreeLibrary((handle)); | |||
#define GetJackProc(handle, name) GetProcAddress((handle), (name)); | |||
#else | |||
#include <dlfcn.h> | |||
#define HANDLE void* | |||
#define LoadJackModule(name) dlopen((name), RTLD_NOW | RTLD_LOCAL); | |||
#define UnloadJackModule(handle) dlclose((handle)); | |||
#define GetJackProc(handle, name) dlsym((handle), (name)); | |||
#endif | |||
typedef int (*InitializeCallback)(jack_client_t*, const char*); | |||
typedef void (*FinishCallback)(void *); | |||
class JackLoadableInternalClient : public JackInternalClient | |||
{ | |||
private: | |||
HANDLE fHandle; | |||
InitializeCallback fInitialize; | |||
FinishCallback fFinish; | |||
char fObjectData[JACK_LOAD_INIT_LIMIT]; | |||
public: | |||
JackLoadableInternalClient(JackServer* server, JackSynchro** table, const char* so_name, const char* object_data); | |||
virtual ~JackLoadableInternalClient(); | |||
int Open(const char* name, jack_options_t options, jack_status_t* status); | |||
}; | |||
} // end of namespace | |||
#endif |
@@ -35,6 +35,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||
#include "JackEngineControl.h" | |||
#include "JackSyncInterface.h" | |||
#include "JackGraphManager.h" | |||
#include "JackInternalClient.h" | |||
#ifdef __APPLE_ | |||
#include <CoreFoundation/CFNotificationCenter.h> | |||
@@ -171,6 +172,29 @@ int JackServer::Close() | |||
return 0; | |||
} | |||
int JackServer::InternalClientLoad(const char* client_name, const char* so_name, const char* objet_data, int options, int* int_ref, int* status) | |||
{ | |||
try { | |||
// Clear status | |||
*status = 0; | |||
JackLoadableInternalClient* client = new JackLoadableInternalClient(fInstance, GetSynchroTable(), so_name, objet_data); | |||
assert(client); | |||
int res = client->Open(client_name, (jack_options_t)options, (jack_status_t*)status); | |||
if (res < 0) { | |||
delete client; | |||
*int_ref = 0; | |||
} else { | |||
*int_ref = client->GetClientControl()->fRefNum; | |||
} | |||
} catch (...) { | |||
int my_status1 = *status | JackFailure; | |||
*status = (jack_status_t)my_status1; | |||
*int_ref = 0; | |||
} | |||
return 0; | |||
} | |||
int JackServer::Start() | |||
{ | |||
JackLog("JackServer::Start\n"); | |||
@@ -73,7 +73,9 @@ class EXPORT JackServer | |||
int SetBufferSize(jack_nframes_t buffer_size); | |||
int SetFreewheel(bool onoff); | |||
void Notify(int refnum, int notify, int value); | |||
int InternalClientLoad(const char* client_name, const char* so_name, const char* objet_data, int options, int* int_ref, int* status); | |||
JackEngine* GetEngine(); | |||
JackEngineControl* GetEngineControl(); | |||
JackSynchro** GetSynchroTable(); | |||
@@ -41,7 +41,7 @@ extern "C" | |||
{ | |||
#endif | |||
EXPORT jack_client_t* my_jack_internal_client_new(const char* client_name); | |||
EXPORT jack_client_t* my_jack_internal_client_new(const char* client_name, const char* dll_name, const char* object_data); | |||
EXPORT void my_jack_internal_client_close(jack_client_t* ext_client); | |||
EXPORT jack_client_t * jack_client_open (const char *client_name, | |||
@@ -56,21 +56,30 @@ extern "C" | |||
using namespace Jack; | |||
EXPORT jack_client_t* my_jack_internal_client_new(const char* client_name) | |||
EXPORT jack_client_t* my_jack_internal_client_new(const char* client_name, const char* dll_name, const char* object_data) | |||
{ | |||
jack_status_t my_status = (jack_status_t)0; | |||
JackLog("jack_internal_client_new %s", client_name); | |||
if (client_name == NULL) { | |||
jack_error("jack_internal_client_new called with a NULL client_name"); | |||
return NULL; | |||
} | |||
#ifdef __CLIENTDEBUG__ | |||
JackClient* client = new JackDebugClient(new JackInternalClient(JackServer::fInstance, GetSynchroTable())); // Debug mode | |||
#else | |||
JackClient* client = new JackInternalClient(JackServer::fInstance, GetSynchroTable()); // To improve... | |||
#endif | |||
JackClient* client; | |||
try { | |||
#ifdef __CLIENTDEBUG__ | |||
client = new JackDebugClient(new JackLoadableInternalClient(JackServer::fInstance, GetSynchroTable(), dll_name, object_data)); // Debug mode | |||
#else | |||
client = new JackLoadableInternalClient(JackServer::fInstance, GetSynchroTable(), dll_name, object_data); // To improve... | |||
#endif | |||
} catch (...) { // Allocation or dynamic code loading failure | |||
return NULL; | |||
} | |||
jack_options_t options = JackUseExactName; | |||
int res = client->Open(client_name, options, NULL); | |||
int res = client->Open(client_name, options, &my_status); | |||
if (res < 0) { | |||
delete client; | |||
return NULL; | |||
@@ -458,6 +458,14 @@ int main(int argc, char* argv[]) | |||
JackDelete(); | |||
return 0; | |||
} | |||
/* | |||
jack_client_t* c1 = my_jack_internal_client_new("c1", "inprocess.so", "untitled"); | |||
jack_client_t* c2 = my_jack_internal_client_new("c2", "inprocess.so", "untitled"); | |||
jack_client_t* c3 = my_jack_internal_client_new("c3", "inprocess.so", "untitled"); | |||
jack_client_t* c4 = my_jack_internal_client_new("c4", "inprocess.so", "untitled"); | |||
jack_client_t* c5 = my_jack_internal_client_new("c5", "inprocess.so", "untitled"); | |||
*/ | |||
/* | |||
For testing purpose... | |||
@@ -514,7 +522,15 @@ int main(int argc, char* argv[]) | |||
// bugs that cause segfaults etc. during shutdown. | |||
sigprocmask(SIG_UNBLOCK, &signals, 0); | |||
} | |||
/* | |||
my_jack_internal_client_close(c1); | |||
my_jack_internal_client_close(c2); | |||
my_jack_internal_client_close(c3); | |||
my_jack_internal_client_close(c4); | |||
my_jack_internal_client_close(c5); | |||
*/ | |||
JackStop(); | |||
jack_cleanup_shm(); | |||
@@ -152,7 +152,7 @@ extern "C" | |||
const char *load_name, | |||
const char *load_init); | |||
jack_client_t* my_jack_internal_client_new(const char* client_name); | |||
jack_client_t* my_jack_internal_client_new(const char* client_name, const char* dll_name, const char* object_data); | |||
/** | |||
* Remove an internal client from a JACK server. | |||
@@ -0,0 +1,123 @@ | |||
/** @file inprocess.c | |||
* | |||
* @brief This demonstrates the basic concepts for writing a client | |||
* that runs within the JACK server process. | |||
* | |||
* For the sake of example, a port_pair_t is allocated in | |||
* jack_initialize(), passed to inprocess() as an argument, then freed | |||
* in jack_finish(). | |||
*/ | |||
#include <stdlib.h> | |||
#include <stdio.h> | |||
#include <memory.h> | |||
#include <jack/jack.h> | |||
/** | |||
* For the sake of example, an instance of this struct is allocated in | |||
* jack_initialize(), passed to inprocess() as an argument, then freed | |||
* in jack_finish(). | |||
*/ | |||
typedef struct { | |||
jack_port_t *input_port; | |||
jack_port_t *output_port; | |||
} port_pair_t; | |||
/** | |||
* Called in the realtime thread on every process cycle. The entry | |||
* point name was passed to jack_set_process_callback() from | |||
* jack_initialize(). Although this is an internal client, its | |||
* process() interface is identical to @ref simple_client.c. | |||
* | |||
* @return 0 if successful; otherwise jack_finish() will be called and | |||
* the client terminated immediately. | |||
*/ | |||
int | |||
inprocess (jack_nframes_t nframes, void *arg) | |||
{ | |||
port_pair_t *pp = arg; | |||
jack_default_audio_sample_t *out = | |||
jack_port_get_buffer (pp->output_port, nframes); | |||
jack_default_audio_sample_t *in = | |||
jack_port_get_buffer (pp->input_port, nframes); | |||
memcpy (out, in, sizeof (jack_default_audio_sample_t) * nframes); | |||
return 0; /* continue */ | |||
} | |||
/** | |||
* This required entry point is called after the client is loaded by | |||
* jack_internal_client_load(). | |||
* | |||
* @param client pointer to JACK client structure. | |||
* @param load_init character string passed to the load operation. | |||
* | |||
* @return 0 if successful; otherwise jack_finish() will be called and | |||
* the client terminated immediately. | |||
*/ | |||
int | |||
jack_initialize (jack_client_t *client, const char *load_init) | |||
{ | |||
port_pair_t *pp = malloc (sizeof (port_pair_t)); | |||
const char **ports; | |||
if (pp == NULL) | |||
return 1; /* heap exhausted */ | |||
jack_set_process_callback (client, inprocess, pp); | |||
/* create a pair of ports */ | |||
pp->input_port = jack_port_register (client, "input", | |||
JACK_DEFAULT_AUDIO_TYPE, | |||
JackPortIsInput, 0); | |||
pp->output_port = jack_port_register (client, "output", | |||
JACK_DEFAULT_AUDIO_TYPE, | |||
JackPortIsOutput, 0); | |||
/* join the process() cycle */ | |||
jack_activate (client); | |||
ports = jack_get_ports (client, NULL, NULL, | |||
JackPortIsPhysical|JackPortIsOutput); | |||
if (ports == NULL) { | |||
fprintf(stderr, "no physical capture ports\n"); | |||
return 1; /* terminate client */ | |||
} | |||
if (jack_connect (client, ports[0], jack_port_name (pp->input_port))) { | |||
fprintf (stderr, "cannot connect input ports\n"); | |||
} | |||
free (ports); | |||
ports = jack_get_ports (client, NULL, NULL, | |||
JackPortIsPhysical|JackPortIsInput); | |||
if (ports == NULL) { | |||
fprintf(stderr, "no physical playback ports\n"); | |||
return 1; /* terminate client */ | |||
} | |||
if (jack_connect (client, jack_port_name (pp->output_port), ports[0])) { | |||
fprintf (stderr, "cannot connect output ports\n"); | |||
} | |||
free (ports); | |||
return 0; /* success */ | |||
} | |||
/** | |||
* This required entry point is called immediately before the client | |||
* is unloaded, which could happen due to a call to | |||
* jack_internal_client_unload(), or a nonzero return from either | |||
* jack_initialize() or inprocess(). | |||
* | |||
* @param arg the same parameter provided to inprocess(). | |||
*/ | |||
void | |||
jack_finish (void *arg) | |||
{ | |||
if (arg) | |||
free ((port_pair_t *) arg); | |||
} |
@@ -0,0 +1,171 @@ | |||
#include <stdio.h> | |||
#include <stdlib.h> | |||
#include <string.h> | |||
#include <signal.h> | |||
#include <unistd.h> | |||
#include <getopt.h> | |||
#include "jack.h" | |||
#include "intclient.h" | |||
jack_client_t *client; | |||
jack_intclient_t intclient; | |||
char *client_name; | |||
char *intclient_name; | |||
char *load_name; | |||
char *load_init = ""; | |||
char *server_name = NULL; | |||
int wait_opt = 0; | |||
void | |||
signal_handler (int sig) | |||
{ | |||
jack_status_t status; | |||
fprintf (stderr, "signal received, unloading..."); | |||
status = jack_internal_client_unload (client, intclient); | |||
if (status & JackFailure) | |||
fprintf (stderr, "(failed), status = 0x%2.0x\n", status); | |||
else | |||
fprintf (stderr, "(succeeded)\n"); | |||
jack_client_close (client); | |||
exit (0); | |||
} | |||
void | |||
show_usage () | |||
{ | |||
fprintf (stderr, "usage: %s [ options ] client-name [ load-name " | |||
"[ init-string]]\n\noptions:\n", client_name); | |||
fprintf (stderr, | |||
"\t-h, --help \t\t print help message\n" | |||
"\t-i, --init string\t initialize string\n" | |||
"\t-s, --server name\t select JACK server\n" | |||
"\t-w, --wait \t\t wait for signal, then unload\n" | |||
"\n" | |||
); | |||
} | |||
int | |||
parse_args (int argc, char *argv[]) | |||
{ | |||
int c; | |||
int option_index = 0; | |||
char *short_options = "hi:s:w"; | |||
struct option long_options[] = { | |||
{ "help", 0, 0, 'h' }, | |||
{ "init", required_argument, 0, 'i' }, | |||
{ "server", required_argument, 0, 's' }, | |||
{ "wait", 0, 0, 'w' }, | |||
{ 0, 0, 0, 0 } | |||
}; | |||
client_name = strrchr(argv[0], '/'); | |||
if (client_name == NULL) { | |||
client_name = argv[0]; | |||
} else { | |||
client_name++; | |||
} | |||
while ((c = getopt_long (argc, argv, short_options, long_options, | |||
&option_index)) >= 0) { | |||
switch (c) { | |||
case 'i': | |||
load_init = optarg; | |||
break; | |||
case 's': | |||
server_name = optarg; | |||
break; | |||
case 'w': | |||
wait_opt = 1; | |||
break; | |||
case 'h': | |||
default: | |||
show_usage (); | |||
return 1; | |||
} | |||
} | |||
if (optind == argc) { /* no positional args? */ | |||
show_usage (); | |||
return 1; | |||
} | |||
if (optind < argc) | |||
load_name = intclient_name = argv[optind++]; | |||
if (optind < argc) | |||
load_name = argv[optind++]; | |||
if (optind < argc) | |||
load_init = argv[optind++]; | |||
//fprintf (stderr, "client-name = `%s', load-name = `%s', " | |||
// "load-init = `%s', wait = %d\n", | |||
// intclient_name, load_name, load_init, wait_opt); | |||
return 0; /* args OK */ | |||
} | |||
int | |||
main (int argc, char *argv[]) | |||
{ | |||
jack_status_t status; | |||
/* parse and validate command arguments */ | |||
if (parse_args (argc, argv)) | |||
exit (1); /* invalid command line */ | |||
/* first, become a JACK client */ | |||
client = jack_client_open (client_name, JackServerName, | |||
&status, server_name); | |||
if (client == NULL) { | |||
fprintf (stderr, "jack_client_open() failed, " | |||
"status = 0x%2.0x\n", status); | |||
if (status & JackServerFailed) { | |||
fprintf (stderr, "Unable to connect to JACK server\n"); | |||
} | |||
exit (1); | |||
} | |||
if (status & JackServerStarted) { | |||
fprintf (stderr, "JACK server started\n"); | |||
} | |||
if (status & JackNameNotUnique) { | |||
client_name = jack_get_client_name(client); | |||
fprintf (stderr, "unique name `%s' assigned\n", client_name); | |||
} | |||
/* then, load the internal client */ | |||
intclient = jack_internal_client_load (client, intclient_name, | |||
(JackLoadName|JackLoadInit), | |||
&status, load_name, load_init); | |||
if (status & JackFailure) { | |||
fprintf (stderr, "could not load %s, status = 0x%2.0x\n", | |||
load_name, status); | |||
return 2; | |||
} | |||
if (status & JackNameNotUnique) { | |||
intclient_name = | |||
jack_get_internal_client_name (client, intclient); | |||
fprintf (stderr, "unique internal client name `%s' assigned\n", | |||
intclient_name); | |||
} | |||
fprintf (stdout, "%s is running.\n", load_name); | |||
if (wait_opt) { | |||
/* define a signal handler to unload the client, then | |||
* wait for it to exit */ | |||
signal (SIGQUIT, signal_handler); | |||
signal (SIGTERM, signal_handler); | |||
signal (SIGHUP, signal_handler); | |||
signal (SIGINT, signal_handler); | |||
while (1) { | |||
sleep (1); | |||
} | |||
} | |||
return 0; | |||
} | |||
@@ -0,0 +1,77 @@ | |||
#include <string.h> | |||
#include <stdlib.h> | |||
#include <stdio.h> | |||
#include "jack.h" | |||
#include "intclient.h" | |||
int | |||
main (int argc, char *argv[]) | |||
{ | |||
char *my_name; | |||
char *client_name; | |||
jack_client_t *client; | |||
jack_status_t status; | |||
jack_intclient_t intclient; | |||
/* validate args */ | |||
if ((argc < 2) || (argc > 3)) { | |||
fprintf (stderr, "usage: %s client-name [ server-name ]]\n", | |||
argv[0]); | |||
return 1; | |||
} | |||
/* use `basename $0` for my own client name */ | |||
my_name = strrchr(argv[0], '/'); | |||
if (my_name == 0) { | |||
my_name = argv[0]; | |||
} else { | |||
my_name++; | |||
} | |||
/* first, become a JACK client */ | |||
if (argc > 2) { | |||
client = jack_client_open (my_name, | |||
(JackServerName|JackNoStartServer), | |||
&status, argv[2]); | |||
} else { | |||
client = jack_client_open (my_name, JackNoStartServer, &status); | |||
} | |||
if (client == NULL) { | |||
if (status & JackServerFailed) { | |||
fprintf (stderr, "JACK server not running.\n"); | |||
} else { | |||
fprintf (stderr, "JACK open failed, " | |||
"status = 0x%2.0x\n", status); | |||
} | |||
exit (1); | |||
} | |||
/* then, get the internal client handle */ | |||
client_name = argv[1]; | |||
intclient = jack_internal_client_handle (client, client_name, &status); | |||
if (status & JackFailure) { | |||
fprintf (stderr, "client %s not found.\n", client_name); | |||
exit (2); | |||
} | |||
/* now, unload the internal client */ | |||
status = jack_internal_client_unload (client, intclient); | |||
if (status & JackFailure) { | |||
if (status & JackNoSuchClient) { | |||
fprintf (stderr, "client %s is gone.\n", | |||
client_name); | |||
} else { | |||
fprintf (stderr, "could not unload %s, " | |||
"returns 0x%2.0x\n", client_name, status); | |||
} | |||
exit (3); | |||
} else { | |||
fprintf (stdout, "%s unloaded.\n", client_name); | |||
} | |||
return 0; | |||
} | |||
@@ -179,6 +179,46 @@ rpc_type server_rpc_jack_set_timebase_callback(mach_port_t private_port, int ref | |||
return KERN_SUCCESS; | |||
} | |||
//------------------ | |||
// Internal clients | |||
//------------------ | |||
rpc_type server_rpc_jack_get_internal_clientname(mach_port_t private_port, int refnum, int int_ref, client_name_t name_res, int* result) | |||
{ | |||
JackLog("server_rpc_jack_get_internal_clientname\n"); | |||
JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port]; | |||
assert(channel); | |||
//*result = channel->GetServer()->GetEngine()->GetInternalClientName(int_ref, (char*)name_res); | |||
return KERN_SUCCESS; | |||
} | |||
rpc_type server_rpc_jack_internal_clienthandle(mach_port_t private_port, int refnum, client_name_t client_name, int* status, int* int_ref, int* result) | |||
{ | |||
JackLog("server_rpc_jack_internal_clienthandle\n"); | |||
JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port]; | |||
assert(channel); | |||
*result = channel->GetServer()->GetEngine()->InternalClientHandle(client_name, status, int_ref); | |||
return KERN_SUCCESS; | |||
} | |||
rpc_type server_rpc_jack_internal_clientload(mach_port_t private_port, int refnum, client_name_t client_name, so_name_t so_name, objet_data_t objet_data, int options, int* status, int* int_ref, int* result) | |||
{ | |||
JackLog("server_rpc_jack_internal_clientload\n"); | |||
JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port]; | |||
assert(channel); | |||
*result = channel->GetServer()->InternalClientLoad(client_name, so_name, objet_data, options, int_ref, status); | |||
return KERN_SUCCESS; | |||
} | |||
rpc_type server_rpc_jack_internal_clientunload(mach_port_t private_port, int refnum, int int_ref, int* status, int* result) | |||
{ | |||
JackLog("server_rpc_jack_internal_clientunload\n"); | |||
JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port]; | |||
assert(channel); | |||
*result = channel->GetServer()->GetEngine()->InternalClientUnload(int_ref, status); | |||
return KERN_SUCCESS; | |||
} | |||
//----------------- | |||
// RT notification | |||
//----------------- | |||
@@ -254,6 +254,42 @@ void JackMachClientChannel::SetTimebaseCallback(int refnum, int conditional, int | |||
} | |||
} | |||
void JackMachClientChannel::GetInternalClientName(int refnum, int int_ref, char* name_res, int* result) | |||
{ | |||
kern_return_t res = rpc_jack_get_internal_clientname(fPrivatePort, refnum, int_ref, name_res, result); | |||
if (res != KERN_SUCCESS) { | |||
*result = -1; | |||
jack_error("JackMachClientChannel::GetInternalClientName err = %s", mach_error_string(res)); | |||
} | |||
} | |||
void JackMachClientChannel::InternalClientHandle(int refnum, const char* client_name, int* status, int* int_ref, int* result) | |||
{ | |||
kern_return_t res = rpc_jack_internal_clienthandle(fPrivatePort, refnum, (char*)client_name, status, int_ref, result); | |||
if (res != KERN_SUCCESS) { | |||
*result = -1; | |||
jack_error("JackMachClientChannel::InternalClientHandle err = %s", mach_error_string(res)); | |||
} | |||
} | |||
void JackMachClientChannel::InternalClientLoad(int refnum, const char* client_name, const char* so_name, const char* objet_data, int options, int* status, int* int_ref, int* result) | |||
{ | |||
kern_return_t res = rpc_jack_internal_clientload(fPrivatePort, refnum, (char*)client_name, (char*)so_name, (char*)objet_data, options, status, int_ref, result); | |||
if (res != KERN_SUCCESS) { | |||
*result = -1; | |||
jack_error("JackMachClientChannel::InternalClientLoad err = %s", mach_error_string(res)); | |||
} | |||
} | |||
void JackMachClientChannel::InternalClientUnload(int refnum, int int_ref, int* status, int* result) | |||
{ | |||
kern_return_t res = rpc_jack_internal_clientunload(fPrivatePort, refnum, int_ref, status, result); | |||
if (res != KERN_SUCCESS) { | |||
*result = -1; | |||
jack_error("JackMachClientChannel::InternalClientUnload err = %s", mach_error_string(res)); | |||
} | |||
} | |||
bool JackMachClientChannel::Execute() | |||
{ | |||
kern_return_t res; | |||
@@ -77,7 +77,12 @@ class JackMachClientChannel : public JackClientChannelInterface, public JackRunn | |||
void ReleaseTimebase(int refnum, int* result); | |||
void SetTimebaseCallback(int refnum, int conditional, int* result); | |||
void GetInternalClientName(int refnum, int int_ref, char* name_res, int* result); | |||
void InternalClientHandle(int refnum, const char* client_name, int* status, int* int_ref, int* result); | |||
void InternalClientLoad(int refnum, const char* client_name, const char* so_name, const char* objet_data, int options, int* status, int* int_ref, int* result); | |||
void InternalClientUnload(int refnum, int int_ref, int* status, int* result); | |||
// JackRunnableInterface interface | |||
bool Execute(); | |||
}; | |||
@@ -20,6 +20,7 @@ | |||
4B699DBA097D421700A18468 /* PBXTargetDependency */, | |||
4B699DBC097D421700A18468 /* PBXTargetDependency */, | |||
4B978E800A31D8B7009E2DD1 /* PBXTargetDependency */, | |||
4BD624D30CBCF55700DE782F /* PBXTargetDependency */, | |||
4BFA99440AAAED90009E916C /* PBXTargetDependency */, | |||
4BFA99460AAAED90009E916C /* PBXTargetDependency */, | |||
4BFA99480AAAED90009E916C /* PBXTargetDependency */, | |||
@@ -28,6 +29,8 @@ | |||
4BFA994E0AAAED90009E916C /* PBXTargetDependency */, | |||
4BFA99560AAAED90009E916C /* PBXTargetDependency */, | |||
4BE99D630AD7A19100C59091 /* PBXTargetDependency */, | |||
4BA693E90CBE5BBA00EAD520 /* PBXTargetDependency */, | |||
4BA693EB0CBE5BBA00EAD520 /* PBXTargetDependency */, | |||
4BFA99AC0AAAF41D009E916C /* PBXTargetDependency */, | |||
4BFA99500AAAED90009E916C /* PBXTargetDependency */, | |||
4BFA99520AAAED90009E916C /* PBXTargetDependency */, | |||
@@ -248,6 +251,8 @@ | |||
4B699DAA097D421700A18468 /* JackDummyDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BC3988908B3CF6C00B6F371 /* JackDummyDriver.cpp */; }; | |||
4B978DED0A31D099009E2DD1 /* JackPortAudioDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B978DEB0A31D099009E2DD1 /* JackPortAudioDriver.h */; }; | |||
4B978DEE0A31D099009E2DD1 /* JackPortAudioDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B978DEC0A31D099009E2DD1 /* JackPortAudioDriver.cpp */; }; | |||
4BA692B30CBE4C2D00EAD520 /* ipload.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BA692B20CBE4C2D00EAD520 /* ipload.c */; }; | |||
4BA692D70CBE4CC600EAD520 /* ipunload.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BA692D60CBE4CC600EAD520 /* ipunload.c */; }; | |||
4BC216850A444BAD00BDA09F /* JackServerAPI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1F50834EFB000C94B91 /* JackServerAPI.cpp */; }; | |||
4BC216890A444BDE00BDA09F /* JackServerGlobals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BC216880A444BDE00BDA09F /* JackServerGlobals.cpp */; }; | |||
4BC2168E0A444BED00BDA09F /* JackServerGlobals.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BC2168D0A444BED00BDA09F /* JackServerGlobals.h */; }; | |||
@@ -255,6 +260,7 @@ | |||
4BD4B4D909BACD9600750C0F /* JackTransportEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BD4B4D509BACD9600750C0F /* JackTransportEngine.cpp */; }; | |||
4BD4B4E409BACEF300750C0F /* JackTransportEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BD4B4D509BACD9600750C0F /* JackTransportEngine.cpp */; }; | |||
4BD4B4E509BACEF300750C0F /* JackTransportEngine.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BD4B4D409BACD9600750C0F /* JackTransportEngine.h */; }; | |||
4BD6240D0CBCF16600DE782F /* inprocess.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BD6240C0CBCF16600DE782F /* inprocess.c */; }; | |||
4BE50F960B01EEC400C05E63 /* JackAPIWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BE50F650B01E96200C05E63 /* JackAPIWrapper.cpp */; }; | |||
4BE6C6AD0A3E0A65005A203A /* jack_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BE6C6AC0A3E0A65005A203A /* jack_test.cpp */; }; | |||
4BF5202B0CB8CF610037470E /* intclient.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF5202A0CB8CF610037470E /* intclient.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |||
@@ -330,6 +336,27 @@ | |||
remoteGlobalIDString = 4B978DB10A31CF4A009E2DD1; | |||
remoteInfo = "jack_portaudio Universal"; | |||
}; | |||
4BA693E80CBE5BBA00EAD520 /* PBXContainerItemProxy */ = { | |||
isa = PBXContainerItemProxy; | |||
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; | |||
proxyType = 1; | |||
remoteGlobalIDString = 4BA692A60CBE4BC700EAD520 /* jack_load Universal */; | |||
remoteInfo = "jack_load Universal"; | |||
}; | |||
4BA693EA0CBE5BBA00EAD520 /* PBXContainerItemProxy */ = { | |||
isa = PBXContainerItemProxy; | |||
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; | |||
proxyType = 1; | |||
remoteGlobalIDString = 4BA692CA0CBE4C9000EAD520 /* jack_unload Universal */; | |||
remoteInfo = "jack_unload Universal"; | |||
}; | |||
4BD624D20CBCF55700DE782F /* PBXContainerItemProxy */ = { | |||
isa = PBXContainerItemProxy; | |||
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; | |||
proxyType = 1; | |||
remoteGlobalIDString = 4BD623ED0CBCF0F000DE782F; | |||
remoteInfo = inprocess; | |||
}; | |||
4BE50F9C0B01EEE500C05E63 /* PBXContainerItemProxy */ = { | |||
isa = PBXContainerItemProxy; | |||
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; | |||
@@ -454,7 +481,6 @@ | |||
4B37C20306DF1FBE0016E567 /* CALatencyLog.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = CALatencyLog.cpp; path = /Developer/Examples/CoreAudio/PublicUtility/CALatencyLog.cpp; sourceTree = "<absolute>"; }; | |||
4B37C20406DF1FBE0016E567 /* CALatencyLog.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = CALatencyLog.h; path = /Developer/Examples/CoreAudio/PublicUtility/CALatencyLog.h; sourceTree = "<absolute>"; }; | |||
4B37C20906DF1FE20016E567 /* latency.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = latency.c; path = /Developer/Examples/CoreAudio/PublicUtility/latency.c; sourceTree = "<absolute>"; }; | |||
4B37C20A06DF1FE20016E567 /* latency.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = latency.h; path = /Developer/Examples/CoreAudio/PublicUtility/latency.h; sourceTree = "<absolute>"; }; | |||
4B395C9606AEF53800923527 /* JackCoreAudioDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JackCoreAudioDriver.cpp; sourceTree = SOURCE_ROOT; }; | |||
4B395C9706AEF53800923527 /* JackCoreAudioDriver.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JackCoreAudioDriver.h; sourceTree = SOURCE_ROOT; }; | |||
4B3F49070AD8503300491C6E /* jack_cpu.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = jack_cpu.c; path = ../tests/jack_cpu.c; sourceTree = SOURCE_ROOT; }; | |||
@@ -510,6 +536,10 @@ | |||
4B9B815C08AFA45000D05A28 /* JackRequest.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackRequest.h; path = ../common/JackRequest.h; sourceTree = SOURCE_ROOT; }; | |||
4BA577BC08BF8BE200F82DE1 /* testSynchroClient.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = testSynchroClient.cpp; path = ../tests/testSynchroClient.cpp; sourceTree = SOURCE_ROOT; }; | |||
4BA577FB08BF8E4600F82DE1 /* testSynchroServer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = testSynchroServer.cpp; path = ../tests/testSynchroServer.cpp; sourceTree = SOURCE_ROOT; }; | |||
4BA692B00CBE4BC700EAD520 /* jack_load */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_load; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
4BA692B20CBE4C2D00EAD520 /* ipload.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = ipload.c; path = "../example-clients/ipload.c"; sourceTree = SOURCE_ROOT; }; | |||
4BA692D40CBE4C9000EAD520 /* jack_unload */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_unload; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
4BA692D60CBE4CC600EAD520 /* ipunload.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = ipunload.c; path = "../example-clients/ipunload.c"; sourceTree = SOURCE_ROOT; }; | |||
4BB371D40C1AD85A0050C1E4 /* JackNotification.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackNotification.h; path = ../common/JackNotification.h; sourceTree = SOURCE_ROOT; }; | |||
4BBD13CC08C71EB40079F7FF /* testSynchroServerClient.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = testSynchroServerClient.cpp; path = ../tests/testSynchroServerClient.cpp; sourceTree = SOURCE_ROOT; }; | |||
4BC216880A444BDE00BDA09F /* JackServerGlobals.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackServerGlobals.cpp; path = ../common/JackServerGlobals.cpp; sourceTree = SOURCE_ROOT; }; | |||
@@ -519,6 +549,8 @@ | |||
4BD4B4D409BACD9600750C0F /* JackTransportEngine.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackTransportEngine.h; path = ../common/JackTransportEngine.h; sourceTree = SOURCE_ROOT; }; | |||
4BD4B4D509BACD9600750C0F /* JackTransportEngine.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackTransportEngine.cpp; path = ../common/JackTransportEngine.cpp; sourceTree = SOURCE_ROOT; }; | |||
4BD561C708EEB910006BBC2A /* JackSynchro.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackSynchro.h; path = ../common/JackSynchro.h; sourceTree = SOURCE_ROOT; }; | |||
4BD623F70CBCF0F000DE782F /* inprocess.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = inprocess.so; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
4BD6240C0CBCF16600DE782F /* inprocess.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = inprocess.c; path = "../example-clients/inprocess.c"; sourceTree = SOURCE_ROOT; }; | |||
4BE50F650B01E96200C05E63 /* JackAPIWrapper.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackAPIWrapper.cpp; path = ../common/JackAPIWrapper.cpp; sourceTree = SOURCE_ROOT; }; | |||
4BE50F8E0B01EE8000C05E63 /* Jackwrapper.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Jackwrapper.framework; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
4BE50F8F0B01EE8000C05E63 /* Jackwrapper-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = "Jackwrapper-Info.plist"; sourceTree = "<group>"; }; | |||
@@ -745,6 +777,27 @@ | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
4BA692AA0CBE4BC700EAD520 /* Frameworks */ = { | |||
isa = PBXFrameworksBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
4BA692CE0CBE4C9000EAD520 /* Frameworks */ = { | |||
isa = PBXFrameworksBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
4BD623F20CBCF0F000DE782F /* Frameworks */ = { | |||
isa = PBXFrameworksBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
4BE50F8C0B01EE8000C05E63 /* Frameworks */ = { | |||
isa = PBXFrameworksBuildPhase; | |||
buildActionMask = 2147483647; | |||
@@ -842,6 +895,9 @@ | |||
4BFA99A20AAAF3B0009E916C /* jdelay */, | |||
4BE99D300AD7A04800C59091 /* jack_cpu */, | |||
4BE50F8E0B01EE8000C05E63 /* Jackwrapper.framework */, | |||
4BD623F70CBCF0F000DE782F /* inprocess.so */, | |||
4BA692B00CBE4BC700EAD520 /* jack_load */, | |||
4BA692D40CBE4C9000EAD520 /* jack_unload */, | |||
); | |||
name = Products; | |||
sourceTree = "<group>"; | |||
@@ -849,6 +905,9 @@ | |||
4B03383E0797E19900686131 /* Simple clients */ = { | |||
isa = PBXGroup; | |||
children = ( | |||
4BA692D60CBE4CC600EAD520 /* ipunload.c */, | |||
4BA692B20CBE4C2D00EAD520 /* ipload.c */, | |||
4BD6240C0CBCF16600DE782F /* inprocess.c */, | |||
4B60CE480AAABA31004956AA /* connect.c */, | |||
4BF8D1670834EDD900C94B91 /* zombie.c */, | |||
4BF8D1690834EDE600C94B91 /* lsp.c */, | |||
@@ -882,7 +941,6 @@ | |||
isa = PBXGroup; | |||
children = ( | |||
4B37C20906DF1FE20016E567 /* latency.c */, | |||
4B37C20A06DF1FE20016E567 /* latency.h */, | |||
4B37C20306DF1FBE0016E567 /* CALatencyLog.cpp */, | |||
4B37C20406DF1FBE0016E567 /* CALatencyLog.h */, | |||
); | |||
@@ -1408,6 +1466,27 @@ | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
4BA692A70CBE4BC700EAD520 /* Headers */ = { | |||
isa = PBXHeadersBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
4BA692CB0CBE4C9000EAD520 /* Headers */ = { | |||
isa = PBXHeadersBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
4BD623EE0CBCF0F000DE782F /* Headers */ = { | |||
isa = PBXHeadersBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
4BE50F890B01EE8000C05E63 /* Headers */ = { | |||
isa = PBXHeadersBuildPhase; | |||
buildActionMask = 2147483647; | |||
@@ -1780,6 +1859,61 @@ | |||
productReference = 4B978DBB0A31CF4A009E2DD1 /* jack_portaudio.so */; | |||
productType = "com.apple.product-type.library.dynamic"; | |||
}; | |||
4BA692A60CBE4BC700EAD520 /* jack_load Universal */ = { | |||
isa = PBXNativeTarget; | |||
buildConfigurationList = 4BA692AC0CBE4BC700EAD520 /* Build configuration list for PBXNativeTarget "jack_load Universal" */; | |||
buildPhases = ( | |||
4BA692A70CBE4BC700EAD520 /* Headers */, | |||
4BA692A80CBE4BC700EAD520 /* Sources */, | |||
4BA692AA0CBE4BC700EAD520 /* Frameworks */, | |||
4BA692AB0CBE4BC700EAD520 /* Rez */, | |||
); | |||
buildRules = ( | |||
); | |||
dependencies = ( | |||
); | |||
name = "jack_load Universal"; | |||
productInstallPath = /usr/local/bin; | |||
productName = testSem; | |||
productReference = 4BA692B00CBE4BC700EAD520 /* jack_load */; | |||
productType = "com.apple.product-type.tool"; | |||
}; | |||
4BA692CA0CBE4C9000EAD520 /* jack_unload Universal */ = { | |||
isa = PBXNativeTarget; | |||
buildConfigurationList = 4BA692D00CBE4C9000EAD520 /* Build configuration list for PBXNativeTarget "jack_unload Universal" */; | |||
buildPhases = ( | |||
4BA692CB0CBE4C9000EAD520 /* Headers */, | |||
4BA692CC0CBE4C9000EAD520 /* Sources */, | |||
4BA692CE0CBE4C9000EAD520 /* Frameworks */, | |||
4BA692CF0CBE4C9000EAD520 /* Rez */, | |||
); | |||
buildRules = ( | |||
); | |||
dependencies = ( | |||
); | |||
name = "jack_unload Universal"; | |||
productInstallPath = /usr/local/bin; | |||
productName = testSem; | |||
productReference = 4BA692D40CBE4C9000EAD520 /* jack_unload */; | |||
productType = "com.apple.product-type.tool"; | |||
}; | |||
4BD623ED0CBCF0F000DE782F /* inprocess */ = { | |||
isa = PBXNativeTarget; | |||
buildConfigurationList = 4BD623F30CBCF0F000DE782F /* Build configuration list for PBXNativeTarget "inprocess" */; | |||
buildPhases = ( | |||
4BD623EE0CBCF0F000DE782F /* Headers */, | |||
4BD623F00CBCF0F000DE782F /* Sources */, | |||
4BD623F20CBCF0F000DE782F /* Frameworks */, | |||
); | |||
buildRules = ( | |||
); | |||
dependencies = ( | |||
); | |||
name = inprocess; | |||
productName = jack_coreaudio; | |||
productReference = 4BD623F70CBCF0F000DE782F /* inprocess.so */; | |||
productType = "com.apple.product-type.library.dynamic"; | |||
}; | |||
4BE50F8D0B01EE8000C05E63 /* Jackwrapper.framework Universal */ = { | |||
isa = PBXNativeTarget; | |||
buildConfigurationList = 4BE50F900B01EE8100C05E63 /* Build configuration list for PBXNativeTarget "Jackwrapper.framework Universal" */; | |||
@@ -1882,12 +2016,15 @@ | |||
4B699D3F097D421600A18468 /* zombie Universal */, | |||
4BE6C6910A3E096F005A203A /* jack_test Universal */, | |||
4BE99D260AD7A04800C59091 /* jack_cpu Universal */, | |||
4BA692A60CBE4BC700EAD520 /* jack_load Universal */, | |||
4BA692CA0CBE4C9000EAD520 /* jack_unload Universal */, | |||
4B699D4F097D421600A18468 /* synchroServer Universal */, | |||
4B699D67097D421600A18468 /* synchroClient Universal */, | |||
4B699D7F097D421700A18468 /* synchroServerClient Universal */, | |||
4B699D97097D421700A18468 /* jack_coreaudio Universal */, | |||
4B978DB10A31CF4A009E2DD1 /* jack_portaudio Universal */, | |||
4B699DA6097D421700A18468 /* jack_dummy Universal */, | |||
4BD623ED0CBCF0F000DE782F /* inprocess */, | |||
); | |||
}; | |||
/* End PBXProject section */ | |||
@@ -2022,6 +2159,20 @@ | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
4BA692AB0CBE4BC700EAD520 /* Rez */ = { | |||
isa = PBXRezBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
4BA692CF0CBE4C9000EAD520 /* Rez */ = { | |||
isa = PBXRezBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
4BE6C69E0A3E096F005A203A /* Rez */ = { | |||
isa = PBXRezBuildPhase; | |||
buildActionMask = 2147483647; | |||
@@ -2291,6 +2442,30 @@ | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
4BA692A80CBE4BC700EAD520 /* Sources */ = { | |||
isa = PBXSourcesBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
4BA692B30CBE4C2D00EAD520 /* ipload.c in Sources */, | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
4BA692CC0CBE4C9000EAD520 /* Sources */ = { | |||
isa = PBXSourcesBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
4BA692D70CBE4CC600EAD520 /* ipunload.c in Sources */, | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
4BD623F00CBCF0F000DE782F /* Sources */ = { | |||
isa = PBXSourcesBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
4BD6240D0CBCF16600DE782F /* inprocess.c in Sources */, | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
4BE50F8B0B01EE8000C05E63 /* Sources */ = { | |||
isa = PBXSourcesBuildPhase; | |||
buildActionMask = 2147483647; | |||
@@ -2361,6 +2536,21 @@ | |||
target = 4B978DB10A31CF4A009E2DD1 /* jack_portaudio Universal */; | |||
targetProxy = 4B978E7F0A31D8B7009E2DD1 /* PBXContainerItemProxy */; | |||
}; | |||
4BA693E90CBE5BBA00EAD520 /* PBXTargetDependency */ = { | |||
isa = PBXTargetDependency; | |||
target = 4BA692A60CBE4BC700EAD520 /* jack_load Universal */; | |||
targetProxy = 4BA693E80CBE5BBA00EAD520 /* PBXContainerItemProxy */; | |||
}; | |||
4BA693EB0CBE5BBA00EAD520 /* PBXTargetDependency */ = { | |||
isa = PBXTargetDependency; | |||
target = 4BA692CA0CBE4C9000EAD520 /* jack_unload Universal */; | |||
targetProxy = 4BA693EA0CBE5BBA00EAD520 /* PBXContainerItemProxy */; | |||
}; | |||
4BD624D30CBCF55700DE782F /* PBXTargetDependency */ = { | |||
isa = PBXTargetDependency; | |||
target = 4BD623ED0CBCF0F000DE782F /* inprocess */; | |||
targetProxy = 4BD624D20CBCF55700DE782F /* PBXContainerItemProxy */; | |||
}; | |||
4BE50F9D0B01EEE500C05E63 /* PBXTargetDependency */ = { | |||
isa = PBXTargetDependency; | |||
target = 4BE50F8D0B01EE8000C05E63 /* Jackwrapper.framework Universal */; | |||
@@ -4510,6 +4700,317 @@ | |||
}; | |||
name = Default; | |||
}; | |||
4BA692AD0CBE4BC700EAD520 /* Development */ = { | |||
isa = XCBuildConfiguration; | |||
buildSettings = { | |||
ARCHS = ( | |||
ppc, | |||
i386, | |||
); | |||
COPY_PHASE_STRIP = NO; | |||
GCC_DYNAMIC_NO_PIC = NO; | |||
GCC_ENABLE_FIX_AND_CONTINUE = YES; | |||
GCC_GENERATE_DEBUGGING_SYMBOLS = YES; | |||
GCC_OPTIMIZATION_LEVEL = 0; | |||
OTHER_CFLAGS = ""; | |||
OTHER_LDFLAGS = ( | |||
"-framework", | |||
Jackmp, | |||
); | |||
OTHER_REZFLAGS = ""; | |||
PRODUCT_NAME = jack_load; | |||
REZ_EXECUTABLE = YES; | |||
SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; | |||
SECTORDER_FLAGS = ""; | |||
WARNING_CFLAGS = ( | |||
"-Wmost", | |||
"-Wno-four-char-constants", | |||
"-Wno-unknown-pragmas", | |||
); | |||
ZERO_LINK = YES; | |||
}; | |||
name = Development; | |||
}; | |||
4BA692AE0CBE4BC700EAD520 /* Deployment */ = { | |||
isa = XCBuildConfiguration; | |||
buildSettings = { | |||
ARCHS = ( | |||
ppc, | |||
i386, | |||
); | |||
COPY_PHASE_STRIP = YES; | |||
GCC_ENABLE_FIX_AND_CONTINUE = NO; | |||
GCC_OPTIMIZATION_LEVEL = 3; | |||
OTHER_CFLAGS = ""; | |||
OTHER_LDFLAGS = ( | |||
"-framework", | |||
Jackmp, | |||
); | |||
OTHER_REZFLAGS = ""; | |||
PRODUCT_NAME = jack_load; | |||
REZ_EXECUTABLE = YES; | |||
SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; | |||
SECTORDER_FLAGS = ""; | |||
WARNING_CFLAGS = ( | |||
"-Wmost", | |||
"-Wno-four-char-constants", | |||
"-Wno-unknown-pragmas", | |||
); | |||
ZERO_LINK = NO; | |||
}; | |||
name = Deployment; | |||
}; | |||
4BA692AF0CBE4BC700EAD520 /* Default */ = { | |||
isa = XCBuildConfiguration; | |||
buildSettings = { | |||
ARCHS = ( | |||
ppc, | |||
i386, | |||
); | |||
GCC_OPTIMIZATION_LEVEL = 3; | |||
OTHER_CFLAGS = ""; | |||
OTHER_LDFLAGS = ( | |||
"-framework", | |||
Jackmp, | |||
); | |||
OTHER_REZFLAGS = ""; | |||
PRODUCT_NAME = jack_load; | |||
REZ_EXECUTABLE = YES; | |||
SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; | |||
SECTORDER_FLAGS = ""; | |||
WARNING_CFLAGS = ( | |||
"-Wmost", | |||
"-Wno-four-char-constants", | |||
"-Wno-unknown-pragmas", | |||
); | |||
}; | |||
name = Default; | |||
}; | |||
4BA692D10CBE4C9000EAD520 /* Development */ = { | |||
isa = XCBuildConfiguration; | |||
buildSettings = { | |||
ARCHS = ( | |||
ppc, | |||
i386, | |||
); | |||
COPY_PHASE_STRIP = NO; | |||
GCC_DYNAMIC_NO_PIC = NO; | |||
GCC_ENABLE_FIX_AND_CONTINUE = YES; | |||
GCC_GENERATE_DEBUGGING_SYMBOLS = YES; | |||
GCC_OPTIMIZATION_LEVEL = 0; | |||
OTHER_CFLAGS = ""; | |||
OTHER_LDFLAGS = ( | |||
"-framework", | |||
Jackmp, | |||
); | |||
OTHER_REZFLAGS = ""; | |||
PRODUCT_NAME = jack_unload; | |||
REZ_EXECUTABLE = YES; | |||
SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; | |||
SECTORDER_FLAGS = ""; | |||
WARNING_CFLAGS = ( | |||
"-Wmost", | |||
"-Wno-four-char-constants", | |||
"-Wno-unknown-pragmas", | |||
); | |||
ZERO_LINK = YES; | |||
}; | |||
name = Development; | |||
}; | |||
4BA692D20CBE4C9000EAD520 /* Deployment */ = { | |||
isa = XCBuildConfiguration; | |||
buildSettings = { | |||
ARCHS = ( | |||
ppc, | |||
i386, | |||
); | |||
COPY_PHASE_STRIP = YES; | |||
GCC_ENABLE_FIX_AND_CONTINUE = NO; | |||
GCC_OPTIMIZATION_LEVEL = 3; | |||
OTHER_CFLAGS = ""; | |||
OTHER_LDFLAGS = ( | |||
"-framework", | |||
Jackmp, | |||
); | |||
OTHER_REZFLAGS = ""; | |||
PRODUCT_NAME = jack_unload; | |||
REZ_EXECUTABLE = YES; | |||
SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; | |||
SECTORDER_FLAGS = ""; | |||
WARNING_CFLAGS = ( | |||
"-Wmost", | |||
"-Wno-four-char-constants", | |||
"-Wno-unknown-pragmas", | |||
); | |||
ZERO_LINK = NO; | |||
}; | |||
name = Deployment; | |||
}; | |||
4BA692D30CBE4C9000EAD520 /* Default */ = { | |||
isa = XCBuildConfiguration; | |||
buildSettings = { | |||
ARCHS = ( | |||
ppc, | |||
i386, | |||
); | |||
GCC_OPTIMIZATION_LEVEL = 3; | |||
OTHER_CFLAGS = ""; | |||
OTHER_LDFLAGS = ( | |||
"-framework", | |||
Jackmp, | |||
); | |||
OTHER_REZFLAGS = ""; | |||
PRODUCT_NAME = jack_unload; | |||
REZ_EXECUTABLE = YES; | |||
SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; | |||
SECTORDER_FLAGS = ""; | |||
WARNING_CFLAGS = ( | |||
"-Wmost", | |||
"-Wno-four-char-constants", | |||
"-Wno-unknown-pragmas", | |||
); | |||
}; | |||
name = Default; | |||
}; | |||
4BD623F40CBCF0F000DE782F /* Development */ = { | |||
isa = XCBuildConfiguration; | |||
buildSettings = { | |||
ARCHS = ( | |||
ppc, | |||
i386, | |||
); | |||
COPY_PHASE_STRIP = NO; | |||
DEBUGGING_SYMBOLS = YES; | |||
DYLIB_COMPATIBILITY_VERSION = 1; | |||
DYLIB_CURRENT_VERSION = 1; | |||
EXECUTABLE_EXTENSION = so; | |||
GCC_DYNAMIC_NO_PIC = NO; | |||
GCC_ENABLE_FIX_AND_CONTINUE = YES; | |||
GCC_GENERATE_DEBUGGING_SYMBOLS = YES; | |||
GCC_MODEL_TUNING = G4; | |||
GCC_OPTIMIZATION_LEVEL = 0; | |||
GCC_PREPROCESSOR_DEFINITIONS = ""; | |||
INSTALL_PATH = /usr/local/lib; | |||
LIBRARY_STYLE = DYNAMIC; | |||
MACH_O_TYPE = mh_dylib; | |||
OPTIMIZATION_CFLAGS = "-O0"; | |||
OTHER_CFLAGS = ""; | |||
OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; | |||
OTHER_LDFLAGS = ( | |||
"-framework", | |||
Jackdmp, | |||
"-framework", | |||
AudioToolBox, | |||
"-framework", | |||
CoreAudio, | |||
"-framework", | |||
CoreServices, | |||
"-framework", | |||
AudioUnit, | |||
); | |||
OTHER_REZFLAGS = ""; | |||
PREBINDING = NO; | |||
PRODUCT_NAME = inprocess; | |||
SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; | |||
SECTORDER_FLAGS = ""; | |||
WARNING_CFLAGS = ( | |||
"-Wmost", | |||
"-Wno-four-char-constants", | |||
"-Wno-unknown-pragmas", | |||
); | |||
ZERO_LINK = YES; | |||
}; | |||
name = Development; | |||
}; | |||
4BD623F50CBCF0F000DE782F /* Deployment */ = { | |||
isa = XCBuildConfiguration; | |||
buildSettings = { | |||
ARCHS = ( | |||
ppc, | |||
i386, | |||
); | |||
COPY_PHASE_STRIP = YES; | |||
DYLIB_COMPATIBILITY_VERSION = 1; | |||
DYLIB_CURRENT_VERSION = 1; | |||
EXECUTABLE_EXTENSION = so; | |||
GCC_ENABLE_FIX_AND_CONTINUE = NO; | |||
GCC_GENERATE_DEBUGGING_SYMBOLS = NO; | |||
GCC_MODEL_TUNING = G4; | |||
GCC_PREPROCESSOR_DEFINITIONS = ""; | |||
INSTALL_PATH = /usr/local/lib; | |||
LIBRARY_STYLE = DYNAMIC; | |||
MACH_O_TYPE = mh_dylib; | |||
OTHER_CFLAGS = ""; | |||
OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; | |||
OTHER_LDFLAGS = ( | |||
"-framework", | |||
Jackdmp, | |||
"-framework", | |||
AudioToolBox, | |||
"-framework", | |||
CoreAudio, | |||
"-framework", | |||
CoreServices, | |||
"-framework", | |||
AudioUnit, | |||
); | |||
OTHER_REZFLAGS = ""; | |||
PREBINDING = NO; | |||
PRODUCT_NAME = inprocess; | |||
SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; | |||
SECTORDER_FLAGS = ""; | |||
WARNING_CFLAGS = ( | |||
"-Wmost", | |||
"-Wno-four-char-constants", | |||
"-Wno-unknown-pragmas", | |||
); | |||
ZERO_LINK = NO; | |||
}; | |||
name = Deployment; | |||
}; | |||
4BD623F60CBCF0F000DE782F /* Default */ = { | |||
isa = XCBuildConfiguration; | |||
buildSettings = { | |||
ARCHS = ( | |||
ppc, | |||
i386, | |||
); | |||
DYLIB_COMPATIBILITY_VERSION = 1; | |||
DYLIB_CURRENT_VERSION = 1; | |||
EXECUTABLE_EXTENSION = so; | |||
GCC_GENERATE_DEBUGGING_SYMBOLS = NO; | |||
GCC_MODEL_TUNING = G4; | |||
GCC_PREPROCESSOR_DEFINITIONS = ""; | |||
INSTALL_PATH = /usr/local/lib; | |||
LIBRARY_STYLE = DYNAMIC; | |||
MACH_O_TYPE = mh_dylib; | |||
OTHER_CFLAGS = ""; | |||
OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; | |||
OTHER_LDFLAGS = ( | |||
"-framework", | |||
Jackdmp, | |||
"-framework", | |||
AudioToolBox, | |||
"-framework", | |||
CoreAudio, | |||
"-framework", | |||
CoreServices, | |||
"-framework", | |||
AudioUnit, | |||
); | |||
OTHER_REZFLAGS = ""; | |||
PREBINDING = NO; | |||
PRODUCT_NAME = inprocess; | |||
SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; | |||
SECTORDER_FLAGS = ""; | |||
WARNING_CFLAGS = ( | |||
"-Wmost", | |||
"-Wno-four-char-constants", | |||
"-Wno-unknown-pragmas", | |||
); | |||
}; | |||
name = Default; | |||
}; | |||
4BE50F910B01EE8100C05E63 /* Development */ = { | |||
isa = XCBuildConfiguration; | |||
buildSettings = { | |||
@@ -5059,6 +5560,36 @@ | |||
defaultConfigurationIsVisible = 0; | |||
defaultConfigurationName = Default; | |||
}; | |||
4BA692AC0CBE4BC700EAD520 /* Build configuration list for PBXNativeTarget "jack_load Universal" */ = { | |||
isa = XCConfigurationList; | |||
buildConfigurations = ( | |||
4BA692AD0CBE4BC700EAD520 /* Development */, | |||
4BA692AE0CBE4BC700EAD520 /* Deployment */, | |||
4BA692AF0CBE4BC700EAD520 /* Default */, | |||
); | |||
defaultConfigurationIsVisible = 0; | |||
defaultConfigurationName = Default; | |||
}; | |||
4BA692D00CBE4C9000EAD520 /* Build configuration list for PBXNativeTarget "jack_unload Universal" */ = { | |||
isa = XCConfigurationList; | |||
buildConfigurations = ( | |||
4BA692D10CBE4C9000EAD520 /* Development */, | |||
4BA692D20CBE4C9000EAD520 /* Deployment */, | |||
4BA692D30CBE4C9000EAD520 /* Default */, | |||
); | |||
defaultConfigurationIsVisible = 0; | |||
defaultConfigurationName = Default; | |||
}; | |||
4BD623F30CBCF0F000DE782F /* Build configuration list for PBXNativeTarget "inprocess" */ = { | |||
isa = XCConfigurationList; | |||
buildConfigurations = ( | |||
4BD623F40CBCF0F000DE782F /* Development */, | |||
4BD623F50CBCF0F000DE782F /* Deployment */, | |||
4BD623F60CBCF0F000DE782F /* Default */, | |||
); | |||
defaultConfigurationIsVisible = 0; | |||
defaultConfigurationName = Default; | |||
}; | |||
4BE50F900B01EE8100C05E63 /* Build configuration list for PBXNativeTarget "Jackwrapper.framework Universal" */ = { | |||
isa = XCConfigurationList; | |||
buildConfigurations = ( | |||
@@ -1,6 +1,6 @@ | |||
/* | |||
* IDENTIFICATION: | |||
* stub generated Mon Aug 27 17:58:23 2007 | |||
* stub generated Thu Oct 11 16:40:18 2007 | |||
* with a MiG generated Mon Sep 11 19:11:05 PDT 2006 by root@b09.apple.com | |||
* OPTIONS: | |||
*/ | |||
@@ -1,6 +1,6 @@ | |||
/* | |||
* IDENTIFICATION: | |||
* stub generated Mon Aug 27 17:58:23 2007 | |||
* stub generated Thu Oct 11 16:40:18 2007 | |||
* with a MiG generated Mon Sep 11 19:11:05 PDT 2006 by root@b09.apple.com | |||
* OPTIONS: | |||
*/ | |||
@@ -27,6 +27,8 @@ ServerPrefix server_; | |||
type client_name_t = c_string[128]; | |||
type client_port_name_t = c_string[128]; | |||
type so_name_t = c_string[1024]; | |||
type objet_data_t = c_string[1024]; | |||
routine rpc_jack_client_open( | |||
server_port : mach_port_t; | |||
@@ -124,6 +126,39 @@ routine rpc_jack_set_timebase_callback( | |||
refnum : int; | |||
conditional : int; | |||
out result : int); | |||
routine rpc_jack_get_internal_clientname( | |||
server_port : mach_port_t; | |||
refnum : int; | |||
int_ref : int; | |||
out client_name_res : client_name_t; | |||
out result : int); | |||
routine rpc_jack_internal_clienthandle( | |||
server_port : mach_port_t; | |||
refnum : int; | |||
client_name : client_name_t; | |||
out int_ref : int; | |||
out status : int; | |||
out result : int); | |||
routine rpc_jack_internal_clientload( | |||
server_port : mach_port_t; | |||
refnum : int; | |||
client_name : client_name_t; | |||
so_name : so_name_t; | |||
objet_data : objet_data_t; | |||
options : int; | |||
out status : int; | |||
out int_ref : int; | |||
out result : int); | |||
routine rpc_jack_internal_clientunload( | |||
server_port : mach_port_t; | |||
refnum : int; | |||
int_ref : int; | |||
out status : int; | |||
out result : int); | |||
simpleroutine rpc_jack_client_rt_notify( | |||
client_port : mach_port_t; | |||
@@ -26,7 +26,7 @@ typedef function_table_entry *function_table_t; | |||
#endif /* AUTOTEST */ | |||
#ifndef JackRPCEngine_MSG_COUNT | |||
#define JackRPCEngine_MSG_COUNT 16 | |||
#define JackRPCEngine_MSG_COUNT 20 | |||
#endif /* JackRPCEngine_MSG_COUNT */ | |||
#include <mach/std_types.h> | |||
@@ -260,6 +260,71 @@ kern_return_t rpc_jack_set_timebase_callback | |||
int *result | |||
); | |||
/* Routine rpc_jack_get_internal_clientname */ | |||
#ifdef mig_external | |||
mig_external | |||
#else | |||
extern | |||
#endif /* mig_external */ | |||
kern_return_t rpc_jack_get_internal_clientname | |||
( | |||
mach_port_t server_port, | |||
int refnum, | |||
int int_ref, | |||
client_name_t client_name_res, | |||
int *result | |||
); | |||
/* Routine rpc_jack_internal_clienthandle */ | |||
#ifdef mig_external | |||
mig_external | |||
#else | |||
extern | |||
#endif /* mig_external */ | |||
kern_return_t rpc_jack_internal_clienthandle | |||
( | |||
mach_port_t server_port, | |||
int refnum, | |||
client_name_t client_name, | |||
int *int_ref, | |||
int *status, | |||
int *result | |||
); | |||
/* Routine rpc_jack_internal_clientload */ | |||
#ifdef mig_external | |||
mig_external | |||
#else | |||
extern | |||
#endif /* mig_external */ | |||
kern_return_t rpc_jack_internal_clientload | |||
( | |||
mach_port_t server_port, | |||
int refnum, | |||
client_name_t client_name, | |||
so_name_t so_name, | |||
objet_data_t objet_data, | |||
int options, | |||
int *status, | |||
int *int_ref, | |||
int *result | |||
); | |||
/* Routine rpc_jack_internal_clientunload */ | |||
#ifdef mig_external | |||
mig_external | |||
#else | |||
extern | |||
#endif /* mig_external */ | |||
kern_return_t rpc_jack_internal_clientunload | |||
( | |||
mach_port_t server_port, | |||
int refnum, | |||
int int_ref, | |||
int *status, | |||
int *result | |||
); | |||
/* SimpleRoutine rpc_jack_client_rt_notify */ | |||
#ifdef mig_external | |||
mig_external | |||
@@ -488,6 +553,61 @@ __END_DECLS | |||
#pragma pack() | |||
#endif | |||
#ifdef __MigPackStructs | |||
#pragma pack(4) | |||
#endif | |||
typedef struct { | |||
mach_msg_header_t Head; | |||
NDR_record_t NDR; | |||
int refnum; | |||
int int_ref; | |||
} __Request__rpc_jack_get_internal_clientname_t; | |||
#ifdef __MigPackStructs | |||
#pragma pack() | |||
#endif | |||
#ifdef __MigPackStructs | |||
#pragma pack(4) | |||
#endif | |||
typedef struct { | |||
mach_msg_header_t Head; | |||
NDR_record_t NDR; | |||
int refnum; | |||
client_name_t client_name; | |||
} __Request__rpc_jack_internal_clienthandle_t; | |||
#ifdef __MigPackStructs | |||
#pragma pack() | |||
#endif | |||
#ifdef __MigPackStructs | |||
#pragma pack(4) | |||
#endif | |||
typedef struct { | |||
mach_msg_header_t Head; | |||
NDR_record_t NDR; | |||
int refnum; | |||
client_name_t client_name; | |||
so_name_t so_name; | |||
objet_data_t objet_data; | |||
int options; | |||
} __Request__rpc_jack_internal_clientload_t; | |||
#ifdef __MigPackStructs | |||
#pragma pack() | |||
#endif | |||
#ifdef __MigPackStructs | |||
#pragma pack(4) | |||
#endif | |||
typedef struct { | |||
mach_msg_header_t Head; | |||
NDR_record_t NDR; | |||
int refnum; | |||
int int_ref; | |||
} __Request__rpc_jack_internal_clientunload_t; | |||
#ifdef __MigPackStructs | |||
#pragma pack() | |||
#endif | |||
#ifdef __MigPackStructs | |||
#pragma pack(4) | |||
#endif | |||
@@ -523,6 +643,10 @@ union __RequestUnion__JackRPCEngine_subsystem { | |||
__Request__rpc_jack_set_freewheel_t Request_rpc_jack_set_freewheel; | |||
__Request__rpc_jack_release_timebase_t Request_rpc_jack_release_timebase; | |||
__Request__rpc_jack_set_timebase_callback_t Request_rpc_jack_set_timebase_callback; | |||
__Request__rpc_jack_get_internal_clientname_t Request_rpc_jack_get_internal_clientname; | |||
__Request__rpc_jack_internal_clienthandle_t Request_rpc_jack_internal_clienthandle; | |||
__Request__rpc_jack_internal_clientload_t Request_rpc_jack_internal_clientload; | |||
__Request__rpc_jack_internal_clientunload_t Request_rpc_jack_internal_clientunload; | |||
__Request__rpc_jack_client_rt_notify_t Request_rpc_jack_client_rt_notify; | |||
}; | |||
#endif /* !__RequestUnion__JackRPCEngine_subsystem__defined */ | |||
@@ -735,6 +859,64 @@ union __RequestUnion__JackRPCEngine_subsystem { | |||
#pragma pack() | |||
#endif | |||
#ifdef __MigPackStructs | |||
#pragma pack(4) | |||
#endif | |||
typedef struct { | |||
mach_msg_header_t Head; | |||
NDR_record_t NDR; | |||
kern_return_t RetCode; | |||
client_name_t client_name_res; | |||
int result; | |||
} __Reply__rpc_jack_get_internal_clientname_t; | |||
#ifdef __MigPackStructs | |||
#pragma pack() | |||
#endif | |||
#ifdef __MigPackStructs | |||
#pragma pack(4) | |||
#endif | |||
typedef struct { | |||
mach_msg_header_t Head; | |||
NDR_record_t NDR; | |||
kern_return_t RetCode; | |||
int int_ref; | |||
int status; | |||
int result; | |||
} __Reply__rpc_jack_internal_clienthandle_t; | |||
#ifdef __MigPackStructs | |||
#pragma pack() | |||
#endif | |||
#ifdef __MigPackStructs | |||
#pragma pack(4) | |||
#endif | |||
typedef struct { | |||
mach_msg_header_t Head; | |||
NDR_record_t NDR; | |||
kern_return_t RetCode; | |||
int status; | |||
int int_ref; | |||
int result; | |||
} __Reply__rpc_jack_internal_clientload_t; | |||
#ifdef __MigPackStructs | |||
#pragma pack() | |||
#endif | |||
#ifdef __MigPackStructs | |||
#pragma pack(4) | |||
#endif | |||
typedef struct { | |||
mach_msg_header_t Head; | |||
NDR_record_t NDR; | |||
kern_return_t RetCode; | |||
int status; | |||
int result; | |||
} __Reply__rpc_jack_internal_clientunload_t; | |||
#ifdef __MigPackStructs | |||
#pragma pack() | |||
#endif | |||
#ifdef __MigPackStructs | |||
#pragma pack(4) | |||
#endif | |||
@@ -768,6 +950,10 @@ union __ReplyUnion__JackRPCEngine_subsystem { | |||
__Reply__rpc_jack_set_freewheel_t Reply_rpc_jack_set_freewheel; | |||
__Reply__rpc_jack_release_timebase_t Reply_rpc_jack_release_timebase; | |||
__Reply__rpc_jack_set_timebase_callback_t Reply_rpc_jack_set_timebase_callback; | |||
__Reply__rpc_jack_get_internal_clientname_t Reply_rpc_jack_get_internal_clientname; | |||
__Reply__rpc_jack_internal_clienthandle_t Reply_rpc_jack_internal_clienthandle; | |||
__Reply__rpc_jack_internal_clientload_t Reply_rpc_jack_internal_clientload; | |||
__Reply__rpc_jack_internal_clientunload_t Reply_rpc_jack_internal_clientunload; | |||
__Reply__rpc_jack_client_rt_notify_t Reply_rpc_jack_client_rt_notify; | |||
}; | |||
#endif /* !__RequestUnion__JackRPCEngine_subsystem__defined */ | |||
@@ -789,7 +975,11 @@ union __ReplyUnion__JackRPCEngine_subsystem { | |||
{ "rpc_jack_set_freewheel", 1012 },\ | |||
{ "rpc_jack_release_timebase", 1013 },\ | |||
{ "rpc_jack_set_timebase_callback", 1014 },\ | |||
{ "rpc_jack_client_rt_notify", 1015 } | |||
{ "rpc_jack_get_internal_clientname", 1015 },\ | |||
{ "rpc_jack_internal_clienthandle", 1016 },\ | |||
{ "rpc_jack_internal_clientload", 1017 },\ | |||
{ "rpc_jack_internal_clientunload", 1018 },\ | |||
{ "rpc_jack_client_rt_notify", 1019 } | |||
#endif | |||
#ifdef __AfterMigUserHeader | |||
@@ -1,4 +1,6 @@ | |||
typedef char client_name_t[128]; | |||
typedef char client_port_name_t[128]; | |||
typedef char client_name_t[64]; | |||
typedef char client_port_name_t[256]; | |||
typedef char so_name_t[256]; | |||
typedef char objet_data_t[256]; |