Browse Source

Improve wrapper code.

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@1914 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/0.71
sletz 17 years ago
parent
commit
dd7af9c6d1
2 changed files with 35 additions and 11 deletions
  1. +1
    -0
      ChangeLog
  2. +34
    -11
      common/JackAPIWrapper.cpp

+ 1
- 0
ChangeLog View File

@@ -21,6 +21,7 @@ Marc-Olivier Barre
2008-03-07 Stephane Letz <letz@grame.fr>
* Define an internal jack_client_open_aux needed for library wrapper feature.
* Improve wrapper code.

2008-03-06 Stephane Letz <letz@grame.fr>


+ 34
- 11
common/JackAPIWrapper.cpp View File

@@ -210,6 +210,9 @@ extern "C"
}
#endif

#define JACK_LIB "libjack.so.0.0"
#define JACKMP_LIB "libjackmp.so"

// Function definition

typedef void* (*jack_port_get_buffer_fun_def)(jack_port_t* port, jack_nframes_t frames);
@@ -858,16 +861,19 @@ EXPORT int jack_client_close(jack_client_t *client)
}

// Library loader
static bool get_jack_library_in_directory(const char* dir_name, char* library_name)
static bool get_jack_library_in_directory(char* dir_name, const char* library_name, char* library_res_name)
{
printf("get_jack_library_in_directory\n");

struct dirent * dir_entry;
DIR * dir_stream = opendir(dir_name);
if (!dir_stream)
return false;

while ((dir_entry = readdir(dir_stream))) {
if (strncmp("libjack.so", dir_entry->d_name, 10) == 0) {
strcpy(library_name, dir_entry->d_name);
if (strncmp(library_name, dir_entry->d_name, strlen(library_name)) == 0) {
printf("found\n");
sprintf(library_res_name, "%s/%s", dir_name, dir_entry->d_name);
closedir(dir_stream);
return true;
}
@@ -876,17 +882,18 @@ static bool get_jack_library_in_directory(const char* dir_name, char* library_na
return false;
}

static bool get_jack_library(char* library_name)
static bool get_jack_library(const char* library_name, char* library_res_name)
{
if (get_jack_library_in_directory("/usr/lib", library_name))
if (get_jack_library_in_directory("/usr/lib", library_name, library_res_name))
return true;
if (get_jack_library_in_directory("/usr/local/lib", library_name))
if (get_jack_library_in_directory("/usr/local/lib", library_name, library_res_name))
return true;
return false;
}

static bool open_library()
{
printf("open_library %ld \n", gClientCount);
if (gClientCount++ == 0) {
return init_library();
} else {
@@ -896,6 +903,7 @@ static bool open_library()

static void close_library()
{
printf("close_library\n");
if (--gClientCount == 0) {
dlclose(gLibrary);
}
@@ -905,6 +913,8 @@ static bool check_client(void* library)
{
jack_client_t* client = 0;

printf("check_library\n");

// Get "new", "open" and "close" entry points...
jack_client_new_fun = (jack_client_new_fun_def)dlsym(library, "jack_client_new");
jack_client_close_fun = (jack_client_close_fun_def)dlsym(library, "jack_client_close");
@@ -912,33 +922,44 @@ static bool check_client(void* library)

// Try opening a client...
if ((client = (*jack_client_new_fun)("dummy"))) { // jackd server is running....
printf("check_library 1 %x\n", jack_client_close_fun);
(*jack_client_close_fun)(client);
printf("check_library 2\n");
return true;
} else {
printf("check_library NO\n");
return false;
}
}

static bool init_library()
{
char library_name[64];
void* jackLibrary = (get_jack_library(library_name)) ? dlopen(library_name, RTLD_LAZY) : 0;
void* jackmpLibrary = dlopen("libjackmp.so", RTLD_LAZY);
char library_res_name[256];
void* jackLibrary = (get_jack_library(JACK_LIB, library_res_name)) ? dlopen(library_res_name, RTLD_LAZY) : 0;
void* jackmpLibrary = (get_jack_library(JACKMP_LIB, library_res_name)) ? dlopen(library_res_name, RTLD_LAZY) : 0;

if (jackLibrary) {

printf("jackLibrary\n");

if (check_client(jackLibrary)) { // jackd is running...
printf("jackd is running\n");
gLibrary = jackLibrary;
if (jackmpLibrary) dlclose(jackmpLibrary);
if (jackmpLibrary)
dlclose(jackmpLibrary);
printf("jackd is running OK\n");
} else if (check_client(jackmpLibrary)) { // jackdmp is running...
gLibrary = jackmpLibrary;
if (jackLibrary) dlclose(jackLibrary);
if (jackLibrary)
dlclose(jackLibrary);
} else {
goto error;
}

} else if (jackmpLibrary) {

printf("jackmpLibrary\n");

if (check_client(jackmpLibrary)) { // jackd is running...
gLibrary = jackmpLibrary;
} else {
@@ -1037,6 +1058,8 @@ static bool init_library()
jack_client_new_fun = (jack_client_new_fun_def)dlsym(gLibrary, "jack_client_new");
jack_client_close_fun = (jack_client_close_fun_def)dlsym(gLibrary, "jack_client_close");

printf("init_library OK\n");

return true;

error:


Loading…
Cancel
Save