Browse Source

Singleton behaviour for JackCoreMidiDriver and JackWinMMEDriver.

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@4530 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.9.8
sletz 14 years ago
parent
commit
dd1818ad9c
3 changed files with 29 additions and 8 deletions
  1. +1
    -0
      ChangeLog
  2. +14
    -4
      macosx/coremidi/JackCoreMidiDriver.cpp
  3. +14
    -4
      windows/winmme/JackWinMMEDriver.cpp

+ 1
- 0
ChangeLog View File

@@ -41,6 +41,7 @@ Chris Caudle
* Non blocking notifications in JackEngine::NotifyAddClient and JackEngine::NotifyRemoveClient.
* More robust Control API implementation.
* Add jackctl_driver_get_type in Control API.
* Singleton behaviour for JackCoreMidiDriver and JackWinMMEDriver.

2011-07-29 Stephane Letz <letz@grame.fr>



+ 14
- 4
macosx/coremidi/JackCoreMidiDriver.cpp View File

@@ -275,6 +275,7 @@ JackCoreMidiDriver::Open(bool capturing, bool playing, int in_channels,
return -1;
}
char *client_name = fClientControl.fName;
printf("JackCoreMidiDriver::Open client_name %s\n",client_name);

// Allocate and connect physical inputs
potential_pi_count = MIDIGetNumberOfSources();
@@ -632,6 +633,9 @@ JackCoreMidiDriver::Write()
extern "C" {
#endif

// singleton kind of driver
static Jack::JackDriverClientInterface* driver = NULL;

SERVER_EXPORT jack_driver_desc_t * driver_get_descriptor()
{
jack_driver_desc_t * desc;
@@ -669,11 +673,17 @@ extern "C" {
}
}

Jack::JackDriverClientInterface* driver = new Jack::JackCoreMidiDriver("system_midi", "coremidi", engine, table);
if (driver->Open(1, 1, virtual_in, virtual_out, false, "in", "out", 0, 0) == 0) {
return driver;
// singleton kind of driver
if (!driver) {
driver = new Jack::JackCoreMidiDriver("system_midi", "coremidi", engine, table);
if (driver->Open(1, 1, virtual_in, virtual_out, false, "in", "out", 0, 0) == 0) {
return driver;
} else {
delete driver;
return NULL;
}
} else {
delete driver;
jack_info("JackCoreMidiDriver already allocated, cannot be loaded twice");
return NULL;
}
}


+ 14
- 4
windows/winmme/JackWinMMEDriver.cpp View File

@@ -357,6 +357,9 @@ extern "C"
{
#endif

// singleton kind of driver
static Jack::JackDriverClientInterface* driver = NULL;

SERVER_EXPORT jack_driver_desc_t * driver_get_descriptor()
{
jack_driver_desc_t * desc;
@@ -406,13 +409,20 @@ extern "C"
}
*/

Jack::JackDriverClientInterface* driver = new Jack::JackWinMMEDriver("system_midi", "winmme", engine, table);
if (driver->Open(1, 1, 0, 0, false, "in", "out", 0, 0) == 0) {
return driver;
// singleton kind of driver
if (!driver) {
driver = new Jack::JackWinMMEDriver("system_midi", "winmme", engine, table);
if (driver->Open(1, 1, virtual_in, virtual_out, false, "in", "out", 0, 0) == 0) {
return driver;
} else {
delete driver;
return NULL;
}
} else {
delete driver;
jack_info("JackWinMMEDriver already allocated, cannot be loaded twice");
return NULL;
}

}

#ifdef __cplusplus


Loading…
Cancel
Save