git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@4530 0c269be4-1314-0410-8aa9-9f06e86f4224tags/1.9.8
| @@ -41,6 +41,7 @@ Chris Caudle | |||||
| * Non blocking notifications in JackEngine::NotifyAddClient and JackEngine::NotifyRemoveClient. | * Non blocking notifications in JackEngine::NotifyAddClient and JackEngine::NotifyRemoveClient. | ||||
| * More robust Control API implementation. | * More robust Control API implementation. | ||||
| * Add jackctl_driver_get_type in Control API. | * Add jackctl_driver_get_type in Control API. | ||||
| * Singleton behaviour for JackCoreMidiDriver and JackWinMMEDriver. | |||||
| 2011-07-29 Stephane Letz <letz@grame.fr> | 2011-07-29 Stephane Letz <letz@grame.fr> | ||||
| @@ -275,6 +275,7 @@ JackCoreMidiDriver::Open(bool capturing, bool playing, int in_channels, | |||||
| return -1; | return -1; | ||||
| } | } | ||||
| char *client_name = fClientControl.fName; | char *client_name = fClientControl.fName; | ||||
| printf("JackCoreMidiDriver::Open client_name %s\n",client_name); | |||||
| // Allocate and connect physical inputs | // Allocate and connect physical inputs | ||||
| potential_pi_count = MIDIGetNumberOfSources(); | potential_pi_count = MIDIGetNumberOfSources(); | ||||
| @@ -632,6 +633,9 @@ JackCoreMidiDriver::Write() | |||||
| extern "C" { | extern "C" { | ||||
| #endif | #endif | ||||
| // singleton kind of driver | |||||
| static Jack::JackDriverClientInterface* driver = NULL; | |||||
| SERVER_EXPORT jack_driver_desc_t * driver_get_descriptor() | SERVER_EXPORT jack_driver_desc_t * driver_get_descriptor() | ||||
| { | { | ||||
| jack_driver_desc_t * desc; | 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 { | } else { | ||||
| delete driver; | |||||
| jack_info("JackCoreMidiDriver already allocated, cannot be loaded twice"); | |||||
| return NULL; | return NULL; | ||||
| } | } | ||||
| } | } | ||||
| @@ -357,6 +357,9 @@ extern "C" | |||||
| { | { | ||||
| #endif | #endif | ||||
| // singleton kind of driver | |||||
| static Jack::JackDriverClientInterface* driver = NULL; | |||||
| SERVER_EXPORT jack_driver_desc_t * driver_get_descriptor() | SERVER_EXPORT jack_driver_desc_t * driver_get_descriptor() | ||||
| { | { | ||||
| jack_driver_desc_t * desc; | 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 { | } else { | ||||
| delete driver; | |||||
| jack_info("JackWinMMEDriver already allocated, cannot be loaded twice"); | |||||
| return NULL; | return NULL; | ||||
| } | } | ||||
| } | } | ||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||