Browse Source

Remove use of try/catch during internal client loading, set default nperiod to 2 in JackAlsaAdpter.

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2904 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.90
sletz 16 years ago
parent
commit
9d0aa7e864
4 changed files with 44 additions and 35 deletions
  1. +19
    -12
      common/JackInternalClient.cpp
  2. +6
    -8
      common/JackInternalClient.h
  3. +17
    -15
      common/JackServer.cpp
  4. +2
    -0
      linux/alsa/JackAlsaAdapter.cpp

+ 19
- 12
common/JackInternalClient.cpp View File

@@ -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()


+ 6
- 8
common/JackInternalClient.h View File

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


}; };


+ 17
- 15
common/JackServer.cpp View File

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


+ 2
- 0
linux/alsa/JackAlsaAdapter.cpp View File

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


Loading…
Cancel
Save