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