git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2904 0c269be4-1314-0410-8aa9-9f06e86f4224tags/1.90
@@ -171,7 +171,7 @@ JackClientControl* JackInternalClient::GetClientControl() const | |||||
return const_cast<JackClientControl*>(&fClientControl); | return const_cast<JackClientControl*>(&fClientControl); | ||||
} | } | ||||
void JackLoadableInternalClient::Init(const char* so_name) | |||||
int JackLoadableInternalClient::Init(const char* so_name) | |||||
{ | { | ||||
char path_to_so[JACK_PATH_MAX + 1]; | char path_to_so[JACK_PATH_MAX + 1]; | ||||
BuildClientPath(path_to_so, sizeof(path_to_so), so_name); | BuildClientPath(path_to_so, sizeof(path_to_so), so_name); | ||||
@@ -181,58 +181,65 @@ void JackLoadableInternalClient::Init(const char* so_name) | |||||
if (fHandle == 0) { | if (fHandle == 0) { | ||||
PrintLoadError(so_name); | PrintLoadError(so_name); | ||||
throw - 1; | |||||
return -1; | |||||
} | } | ||||
fFinish = (FinishCallback)GetJackProc(fHandle, "jack_finish"); | fFinish = (FinishCallback)GetJackProc(fHandle, "jack_finish"); | ||||
if (!fFinish) { | if (!fFinish) { | ||||
UnloadJackModule(fHandle); | UnloadJackModule(fHandle); | ||||
jack_error("symbol jack_finish cannot be found in %s", so_name); | jack_error("symbol jack_finish cannot be found in %s", so_name); | ||||
throw - 1; | |||||
return -1; | |||||
} | } | ||||
fDescriptor = (JackDriverDescFunction)GetJackProc(fHandle, "jack_get_descriptor"); | fDescriptor = (JackDriverDescFunction)GetJackProc(fHandle, "jack_get_descriptor"); | ||||
if (!fDescriptor) { | if (!fDescriptor) { | ||||
jack_info("No jack_get_descriptor entry-point for %s", so_name); | jack_info("No jack_get_descriptor entry-point for %s", so_name); | ||||
} | } | ||||
return 0; | |||||
} | } | ||||
void JackLoadableInternalClient1::Init(const char* so_name) | |||||
int JackLoadableInternalClient1::Init(const char* so_name) | |||||
{ | { | ||||
JackLoadableInternalClient::Init(so_name); | |||||
if (JackLoadableInternalClient::Init(so_name) < 0) { | |||||
return -1; | |||||
} | |||||
fInitialize = (InitializeCallback)GetJackProc(fHandle, "jack_initialize"); | fInitialize = (InitializeCallback)GetJackProc(fHandle, "jack_initialize"); | ||||
if (!fInitialize) { | if (!fInitialize) { | ||||
UnloadJackModule(fHandle); | UnloadJackModule(fHandle); | ||||
jack_error("symbol jack_initialize cannot be found in %s", so_name); | jack_error("symbol jack_initialize cannot be found in %s", so_name); | ||||
throw - 1; | |||||
return -1; | |||||
} | } | ||||
return 0; | |||||
} | } | ||||
void JackLoadableInternalClient2::Init(const char* so_name) | |||||
int JackLoadableInternalClient2::Init(const char* so_name) | |||||
{ | { | ||||
JackLoadableInternalClient::Init(so_name); | |||||
if (JackLoadableInternalClient::Init(so_name) < 0) { | |||||
return -1; | |||||
} | |||||
fInitialize = (InternalInitializeCallback)GetJackProc(fHandle, "jack_internal_initialize"); | fInitialize = (InternalInitializeCallback)GetJackProc(fHandle, "jack_internal_initialize"); | ||||
if (!fInitialize) { | if (!fInitialize) { | ||||
UnloadJackModule(fHandle); | UnloadJackModule(fHandle); | ||||
jack_error("symbol jack_internal_initialize cannot be found in %s", so_name); | jack_error("symbol jack_internal_initialize cannot be found in %s", so_name); | ||||
throw - 1; | |||||
return -1; | |||||
} | } | ||||
return 0; | |||||
} | } | ||||
JackLoadableInternalClient1::JackLoadableInternalClient1(JackServer* server, JackSynchro* table, const char* so_name, const char* object_data) | JackLoadableInternalClient1::JackLoadableInternalClient1(JackServer* server, JackSynchro* table, const char* so_name, const char* object_data) | ||||
: JackLoadableInternalClient(server, table) | : JackLoadableInternalClient(server, table) | ||||
{ | { | ||||
snprintf(fObjectData, JACK_LOAD_INIT_LIMIT, object_data); | |||||
Init(so_name); | |||||
snprintf(fObjectData, JACK_LOAD_INIT_LIMIT, object_data); | |||||
} | } | ||||
JackLoadableInternalClient2::JackLoadableInternalClient2(JackServer* server, JackSynchro* table, const char* so_name, const JSList* parameters) | JackLoadableInternalClient2::JackLoadableInternalClient2(JackServer* server, JackSynchro* table, const char* so_name, const JSList* parameters) | ||||
: JackLoadableInternalClient(server, table) | : JackLoadableInternalClient(server, table) | ||||
{ | { | ||||
fParameters = parameters; | fParameters = parameters; | ||||
Init(so_name); | |||||
} | } | ||||
JackLoadableInternalClient::~JackLoadableInternalClient() | JackLoadableInternalClient::~JackLoadableInternalClient() | ||||
@@ -92,8 +92,6 @@ class JackLoadableInternalClient : public JackInternalClient | |||||
HANDLE fHandle; | HANDLE fHandle; | ||||
FinishCallback fFinish; | FinishCallback fFinish; | ||||
JackDriverDescFunction fDescriptor; | JackDriverDescFunction fDescriptor; | ||||
virtual void Init(const char* so_name); | |||||
public: | public: | ||||
@@ -102,6 +100,8 @@ class JackLoadableInternalClient : public JackInternalClient | |||||
{} | {} | ||||
virtual ~JackLoadableInternalClient(); | virtual ~JackLoadableInternalClient(); | ||||
virtual int Init(const char* so_name); | |||||
}; | }; | ||||
class JackLoadableInternalClient1 : public JackLoadableInternalClient | class JackLoadableInternalClient1 : public JackLoadableInternalClient | ||||
@@ -111,15 +111,14 @@ class JackLoadableInternalClient1 : public JackLoadableInternalClient | |||||
InitializeCallback fInitialize; | InitializeCallback fInitialize; | ||||
char fObjectData[JACK_LOAD_INIT_LIMIT]; | char fObjectData[JACK_LOAD_INIT_LIMIT]; | ||||
void Init(const char* so_name); | |||||
public: | public: | ||||
JackLoadableInternalClient1(JackServer* server, JackSynchro* table, const char* so_name, const char* object_data); | JackLoadableInternalClient1(JackServer* server, JackSynchro* table, const char* so_name, const char* object_data); | ||||
virtual ~JackLoadableInternalClient1() | virtual ~JackLoadableInternalClient1() | ||||
{} | {} | ||||
int Init(const char* so_name); | |||||
int Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status); | int Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status); | ||||
}; | }; | ||||
@@ -131,15 +130,14 @@ class JackLoadableInternalClient2 : public JackLoadableInternalClient | |||||
InternalInitializeCallback fInitialize; | InternalInitializeCallback fInitialize; | ||||
const JSList* fParameters; | const JSList* fParameters; | ||||
void Init(const char* so_name); | |||||
public: | public: | ||||
JackLoadableInternalClient2(JackServer* server, JackSynchro* table, const char* so_name, const JSList* parameters); | JackLoadableInternalClient2(JackServer* server, JackSynchro* table, const char* so_name, const JSList* parameters); | ||||
virtual ~JackLoadableInternalClient2() | virtual ~JackLoadableInternalClient2() | ||||
{} | {} | ||||
int Init(const char* so_name); | |||||
int Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status); | int Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status); | ||||
}; | }; | ||||
@@ -153,30 +153,32 @@ int JackServer::Close() | |||||
int JackServer::InternalClientLoad(const char* client_name, const char* so_name, const char* objet_data, int options, int* int_ref, int* status) | int JackServer::InternalClientLoad(const char* client_name, const char* so_name, const char* objet_data, int options, int* int_ref, int* status) | ||||
{ | { | ||||
try { | |||||
JackLoadableInternalClient* client = new JackLoadableInternalClient1(fInstance, GetSynchroTable(), so_name, objet_data); | |||||
assert(client); | |||||
return InternalClientLoadAux(client, client_name, options, int_ref, status); | |||||
} catch (...) { | |||||
int my_status1 = *status | JackFailure; | |||||
JackLoadableInternalClient* client = new JackLoadableInternalClient1(fInstance, GetSynchroTable(), so_name, objet_data); | |||||
assert(client); | |||||
if (client->Init(so_name) < 0) { | |||||
int my_status1 = *status | JackFailure; | |||||
*status = (jack_status_t)my_status1; | *status = (jack_status_t)my_status1; | ||||
*int_ref = 0; | *int_ref = 0; | ||||
return -1; | |||||
return -1; | |||||
} | } | ||||
} | |||||
return InternalClientLoadAux(client, client_name, options, int_ref, status); | |||||
} | |||||
int JackServer::InternalClientLoad(const char* client_name, const char* so_name, const JSList * parameters, int options, int* int_ref, int* status) | int JackServer::InternalClientLoad(const char* client_name, const char* so_name, const JSList * parameters, int options, int* int_ref, int* status) | ||||
{ | { | ||||
try { | |||||
JackLoadableInternalClient* client = new JackLoadableInternalClient2(fInstance, GetSynchroTable(), so_name, parameters); | |||||
assert(client); | |||||
return InternalClientLoadAux(client, client_name, options, int_ref, status); | |||||
} catch (...) { | |||||
int my_status1 = *status | JackFailure; | |||||
JackLoadableInternalClient* client = new JackLoadableInternalClient2(fInstance, GetSynchroTable(), so_name, parameters); | |||||
assert(client); | |||||
if (client->Init(so_name) < 0) { | |||||
int my_status1 = *status | JackFailure; | |||||
*status = (jack_status_t)my_status1; | *status = (jack_status_t)my_status1; | ||||
*int_ref = 0; | *int_ref = 0; | ||||
return -1; | |||||
return -1; | |||||
} | } | ||||
return InternalClientLoadAux(client, client_name, options, int_ref, status); | |||||
} | } | ||||
int JackServer::InternalClientLoadAux(JackLoadableInternalClient* client, const char* client_name, int options, int* int_ref, int* status) | int JackServer::InternalClientLoadAux(JackLoadableInternalClient* client, const char* client_name, int options, int* int_ref, int* status) | ||||
@@ -39,6 +39,8 @@ namespace Jack | |||||
fCaptureChannels = 2; | fCaptureChannels = 2; | ||||
fPlaybackChannels = 2; | fPlaybackChannels = 2; | ||||
fAudioInterface.fPeriod = 2; | |||||
for ( node = params; node; node = jack_slist_next ( node ) ) | for ( node = params; node; node = jack_slist_next ( node ) ) | ||||
{ | { | ||||
param = ( const jack_driver_param_t* ) node->data; | param = ( const jack_driver_param_t* ) node->data; | ||||