From 9d0aa7e864d91836476582e44c5e5a9f1c81906e Mon Sep 17 00:00:00 2001 From: sletz Date: Wed, 10 Sep 2008 13:20:24 +0000 Subject: [PATCH] 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 --- common/JackInternalClient.cpp | 31 +++++++++++++++++++------------ common/JackInternalClient.h | 14 ++++++-------- common/JackServer.cpp | 32 +++++++++++++++++--------------- linux/alsa/JackAlsaAdapter.cpp | 2 ++ 4 files changed, 44 insertions(+), 35 deletions(-) diff --git a/common/JackInternalClient.cpp b/common/JackInternalClient.cpp index b990d607..512e1713 100644 --- a/common/JackInternalClient.cpp +++ b/common/JackInternalClient.cpp @@ -171,7 +171,7 @@ JackClientControl* JackInternalClient::GetClientControl() const return const_cast(&fClientControl); } -void JackLoadableInternalClient::Init(const char* so_name) +int JackLoadableInternalClient::Init(const char* so_name) { char path_to_so[JACK_PATH_MAX + 1]; BuildClientPath(path_to_so, sizeof(path_to_so), so_name); @@ -181,58 +181,65 @@ void JackLoadableInternalClient::Init(const char* so_name) if (fHandle == 0) { PrintLoadError(so_name); - throw - 1; + return -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; + return -1; } fDescriptor = (JackDriverDescFunction)GetJackProc(fHandle, "jack_get_descriptor"); if (!fDescriptor) { 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"); if (!fInitialize) { UnloadJackModule(fHandle); 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"); if (!fInitialize) { UnloadJackModule(fHandle); 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) : 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) : JackLoadableInternalClient(server, table) { fParameters = parameters; - Init(so_name); } JackLoadableInternalClient::~JackLoadableInternalClient() diff --git a/common/JackInternalClient.h b/common/JackInternalClient.h index 52b109d8..0a3d9248 100644 --- a/common/JackInternalClient.h +++ b/common/JackInternalClient.h @@ -92,8 +92,6 @@ class JackLoadableInternalClient : public JackInternalClient HANDLE fHandle; FinishCallback fFinish; JackDriverDescFunction fDescriptor; - - virtual void Init(const char* so_name); public: @@ -102,6 +100,8 @@ class JackLoadableInternalClient : public JackInternalClient {} virtual ~JackLoadableInternalClient(); + virtual int Init(const char* so_name); + }; class JackLoadableInternalClient1 : public JackLoadableInternalClient @@ -111,15 +111,14 @@ class JackLoadableInternalClient1 : public JackLoadableInternalClient InitializeCallback fInitialize; char fObjectData[JACK_LOAD_INIT_LIMIT]; - - void Init(const char* so_name); - + public: JackLoadableInternalClient1(JackServer* server, JackSynchro* table, const char* so_name, const char* object_data); 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); }; @@ -131,15 +130,14 @@ class JackLoadableInternalClient2 : public JackLoadableInternalClient InternalInitializeCallback fInitialize; const JSList* fParameters; - - void Init(const char* so_name); - + public: JackLoadableInternalClient2(JackServer* server, JackSynchro* table, const char* so_name, const JSList* parameters); 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); }; diff --git a/common/JackServer.cpp b/common/JackServer.cpp index 667e236e..23bbc9b1 100644 --- a/common/JackServer.cpp +++ b/common/JackServer.cpp @@ -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) { - 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; *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) { - 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; *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) diff --git a/linux/alsa/JackAlsaAdapter.cpp b/linux/alsa/JackAlsaAdapter.cpp index 0734d1e4..ad739f77 100644 --- a/linux/alsa/JackAlsaAdapter.cpp +++ b/linux/alsa/JackAlsaAdapter.cpp @@ -39,6 +39,8 @@ namespace Jack fCaptureChannels = 2; fPlaybackChannels = 2; + fAudioInterface.fPeriod = 2; + for ( node = params; node; node = jack_slist_next ( node ) ) { param = ( const jack_driver_param_t* ) node->data;