Browse Source

New jack_get_client_pid API, implemented on server side.

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2299 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.90
sletz 17 years ago
parent
commit
152a1711ce
53 changed files with 254 additions and 112 deletions
  1. +1
    -0
      ChangeLog
  2. +7
    -7
      common/JackAudioDriver.cpp
  3. +1
    -1
      common/JackAudioDriver.h
  4. +1
    -1
      common/JackChannel.h
  5. +7
    -5
      common/JackClientControl.h
  6. +1
    -1
      common/JackDebugClient.h
  7. +2
    -1
      common/JackDriver.cpp
  8. +4
    -3
      common/JackDriver.h
  9. +1
    -1
      common/JackDummyDriver.cpp
  10. +2
    -2
      common/JackDummyDriver.h
  11. +33
    -15
      common/JackEngine.cpp
  12. +4
    -2
      common/JackEngine.h
  13. +2
    -2
      common/JackExternalClient.cpp
  14. +1
    -1
      common/JackExternalClient.h
  15. +1
    -1
      common/JackFreewheelDriver.h
  16. +3
    -2
      common/JackInternalClient.cpp
  17. +7
    -1
      common/JackLibAPI.cpp
  18. +3
    -3
      common/JackLibClient.cpp
  19. +9
    -2
      common/JackLockedEngine.h
  20. +2
    -2
      common/JackLoopbackDriver.h
  21. +5
    -1
      common/JackRequest.h
  22. +3
    -2
      common/JackServer.cpp
  23. +10
    -1
      common/JackServerAPI.cpp
  24. +2
    -2
      common/JackSocketClientChannel.cpp
  25. +1
    -1
      common/JackSocketClientChannel.h
  26. +3
    -3
      common/JackSocketServerChannel.cpp
  27. +1
    -1
      common/JackSocketServerChannel.h
  28. +5
    -0
      common/jack/jack.h
  29. +5
    -5
      linux/alsa/JackAlsaDriver.cpp
  30. +1
    -1
      linux/alsa/JackAlsaDriver.h
  31. +1
    -1
      linux/firewire/JackFFADODriver.cpp
  32. +2
    -1
      linux/firewire/JackFFADODriver.h
  33. +1
    -1
      linux/freebob/JackFreebobDriver.cpp
  34. +2
    -1
      linux/freebob/JackFreebobDriver.h
  35. +10
    -10
      macosx/JackCoreAudioDriver.cpp
  36. +1
    -1
      macosx/JackCoreAudioDriver.h
  37. +2
    -2
      macosx/JackMacEngineRPC.cpp
  38. +2
    -2
      macosx/JackMachClientChannel.cpp
  39. +1
    -1
      macosx/JackMachClientChannel.h
  40. +2
    -2
      macosx/JackMachServerChannel.cpp
  41. +1
    -1
      macosx/JackMachServerChannel.h
  42. +1
    -1
      macosx/RPC/JackRPCClientServer.c
  43. +1
    -1
      macosx/RPC/JackRPCClientUser.c
  44. +1
    -0
      macosx/RPC/JackRPCEngine.defs
  45. +2
    -0
      macosx/RPC/JackRPCEngine.h
  46. +81
    -6
      macosx/RPC/JackRPCEngineServer.c
  47. +5
    -1
      macosx/RPC/JackRPCEngineUser.c
  48. +1
    -1
      windows/JackPortAudioDriver.cpp
  49. +2
    -2
      windows/JackPortAudioDriver.h
  50. +2
    -2
      windows/JackWinNamedPipeClientChannel.cpp
  51. +1
    -1
      windows/JackWinNamedPipeClientChannel.h
  52. +3
    -3
      windows/JackWinNamedPipeServerChannel.cpp
  53. +1
    -1
      windows/JackWinNamedPipeServerChannel.h

+ 1
- 0
ChangeLog View File

@@ -23,6 +23,7 @@ Fernando Lopez-Lezcano
2008-05-21 Stephane Letz <letz@grame.fr> 2008-05-21 Stephane Letz <letz@grame.fr>


* Correct JackEngine::PortUnRegister, JackEngine::ClientCloseAux and JackEngine::ClientDeactivate to correctly send notifications. * Correct JackEngine::PortUnRegister, JackEngine::ClientCloseAux and JackEngine::ClientDeactivate to correctly send notifications.
* New jack_get_client_pid API, implemented on server side.


2008-05-20 Stephane Letz <letz@grame.fr> 2008-05-20 Stephane Letz <letz@grame.fr>




+ 7
- 7
common/JackAudioDriver.cpp View File

@@ -36,8 +36,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
namespace Jack namespace Jack
{ {


JackAudioDriver::JackAudioDriver(const char* name, JackEngine* engine, JackSynchro** table)
: JackDriver(name, engine, table),
JackAudioDriver::JackAudioDriver(const char* name, const char* alias, JackEngine* engine, JackSynchro** table)
: JackDriver(name, alias, engine, table),
fCaptureChannels(0), fCaptureChannels(0),
fPlaybackChannels(0), fPlaybackChannels(0),
fWithMonitorPorts(false) fWithMonitorPorts(false)
@@ -95,8 +95,8 @@ int JackAudioDriver::Attach()
jack_log("JackAudioDriver::Attach fBufferSize = %ld fSampleRate = %ld", fEngineControl->fBufferSize, fEngineControl->fSampleRate); jack_log("JackAudioDriver::Attach fBufferSize = %ld fSampleRate = %ld", fEngineControl->fBufferSize, fEngineControl->fSampleRate);


for (i = 0; i < fCaptureChannels; i++) { for (i = 0; i < fCaptureChannels; i++) {
snprintf(alias, sizeof(alias) - 1, "%s:%s:out%d", fClientControl->fName, fCaptureDriverName, i + 1);
snprintf(name, sizeof(name) - 1, "system:capture_%d", i + 1);
snprintf(alias, sizeof(alias) - 1, "%s:%s:out%d", fAliasName, fCaptureDriverName, i + 1);
snprintf(name, sizeof(name) - 1, "%s:capture_%d", fClientControl->fName, i + 1);
if ((port_index = fGraphManager->AllocatePort(fClientControl->fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, (JackPortFlags)port_flags, fEngineControl->fBufferSize)) == NO_PORT) { if ((port_index = fGraphManager->AllocatePort(fClientControl->fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, (JackPortFlags)port_flags, fEngineControl->fBufferSize)) == NO_PORT) {
jack_error("driver: cannot register port for %s", name); jack_error("driver: cannot register port for %s", name);
return -1; return -1;
@@ -111,8 +111,8 @@ int JackAudioDriver::Attach()
port_flags = JackPortIsInput | JackPortIsPhysical | JackPortIsTerminal; port_flags = JackPortIsInput | JackPortIsPhysical | JackPortIsTerminal;


for (i = 0; i < fPlaybackChannels; i++) { for (i = 0; i < fPlaybackChannels; i++) {
snprintf(alias, sizeof(alias) - 1, "%s:%s:in%d", fClientControl->fName, fPlaybackDriverName, i + 1);
snprintf(name, sizeof(name) - 1, "system:playback_%d", i + 1);
snprintf(alias, sizeof(alias) - 1, "%s:%s:in%d", fAliasName, fPlaybackDriverName, i + 1);
snprintf(name, sizeof(name) - 1, "%s:playback_%d", fClientControl->fName, i + 1);
if ((port_index = fGraphManager->AllocatePort(fClientControl->fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, (JackPortFlags)port_flags, fEngineControl->fBufferSize)) == NO_PORT) { if ((port_index = fGraphManager->AllocatePort(fClientControl->fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, (JackPortFlags)port_flags, fEngineControl->fBufferSize)) == NO_PORT) {
jack_error("driver: cannot register port for %s", name); jack_error("driver: cannot register port for %s", name);
return -1; return -1;
@@ -127,7 +127,7 @@ int JackAudioDriver::Attach()
// Monitor ports // Monitor ports
if (fWithMonitorPorts) { if (fWithMonitorPorts) {
jack_log("Create monitor port "); jack_log("Create monitor port ");
snprintf(name, sizeof(name) - 1, "%s:%s:monitor_%u", fClientControl->fName, fPlaybackDriverName, i + 1);
snprintf(name, sizeof(name) - 1, "%s:%s:monitor_%u", fAliasName, fPlaybackDriverName, i + 1);
if ((port_index = fGraphManager->AllocatePort(fClientControl->fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, fEngineControl->fBufferSize)) == NO_PORT) { if ((port_index = fGraphManager->AllocatePort(fClientControl->fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, fEngineControl->fBufferSize)) == NO_PORT) {
jack_error("Cannot register monitor port for %s", name); jack_error("Cannot register monitor port for %s", name);
return -1; return -1;


+ 1
- 1
common/JackAudioDriver.h View File

@@ -57,7 +57,7 @@ class EXPORT JackAudioDriver : public JackDriver


public: public:


JackAudioDriver(const char* name, JackEngine* engine, JackSynchro** table);
JackAudioDriver(const char* name, const char* alias, JackEngine* engine, JackSynchro** table);
virtual ~JackAudioDriver(); virtual ~JackAudioDriver();


virtual int Process(); virtual int Process();


+ 1
- 1
common/JackChannel.h View File

@@ -73,7 +73,7 @@ class JackClientChannelInterface


virtual void ClientCheck(const char* name, char* name_res, int protocol, int options, int* status, int* result) virtual void ClientCheck(const char* name, char* name_res, int protocol, int options, int* status, int* result)
{} {}
virtual void ClientOpen(const char* name, int* shared_engine, int* shared_client, int* shared_graph, int* result)
virtual void ClientOpen(const char* name, int pid, int* shared_engine, int* shared_client, int* shared_graph, int* result)
{} {}
virtual void ClientOpen(const char* name, int* ref, JackEngineControl** shared_engine, JackGraphManager** shared_manager, JackClientInterface* client, int* result) virtual void ClientOpen(const char* name, int* ref, JackEngineControl** shared_engine, JackGraphManager** shared_manager, JackClientInterface* client, int* result)
{} {}


+ 7
- 5
common/JackClientControl.h View File

@@ -42,24 +42,25 @@ struct JackClientControl : public JackShmMem
volatile bool fTransportSync; /* Will be true when slow-sync cb has to be called */ volatile bool fTransportSync; /* Will be true when slow-sync cb has to be called */
volatile bool fTransportTimebase; /* Will be true when timebase cb is called with new_pos on */ volatile bool fTransportTimebase; /* Will be true when timebase cb is called with new_pos on */
int fRefNum; int fRefNum;
int fPID;
bool fActive; bool fActive;


JackClientControl(const char* name, int refnum)
JackClientControl(const char* name, int pid, int refnum)
{ {
Init(name, refnum);
Init(name, pid, refnum);
} }


JackClientControl(const char* name) JackClientControl(const char* name)
{ {
Init(name, -1);
Init(name, 0, -1);
} }


JackClientControl() JackClientControl()
{ {
Init("", -1);
Init("", 0, -1);
} }


void Init(const char* name, int refnum)
void Init(const char* name, int pid, int refnum)
{ {
strcpy(fName, name); strcpy(fName, name);
for (int i = 0; i < kMaxNotification; i++) for (int i = 0; i < kMaxNotification; i++)
@@ -72,6 +73,7 @@ struct JackClientControl : public JackShmMem
fCallback[kStartFreewheelCallback] = true; fCallback[kStartFreewheelCallback] = true;
fCallback[kStopFreewheelCallback] = true; fCallback[kStopFreewheelCallback] = true;
fRefNum = refnum; fRefNum = refnum;
fPID = pid;
fTransportState = JackTransportStopped; fTransportState = JackTransportStopped;
fTransportSync = false; fTransportSync = false;
fTransportTimebase = false; fTransportTimebase = false;


+ 1
- 1
common/JackDebugClient.h View File

@@ -58,7 +58,7 @@ class JackDebugClient : public JackClient
int fIsActivated; int fIsActivated;
int fIsDeactivated; int fIsDeactivated;
int fIsClosed; int fIsClosed;
char fClientName[JACK_CLIENT_NAME_SIZE];
char fClientName[JACK_CLIENT_NAME_SIZE + 1];
JackProcessCallback fProcessTimeCallback; JackProcessCallback fProcessTimeCallback;
void* fProcessTimeCallbackArg; void* fProcessTimeCallbackArg;




+ 2
- 1
common/JackDriver.cpp View File

@@ -39,11 +39,12 @@ using namespace std;
namespace Jack namespace Jack
{ {


JackDriver::JackDriver(const char* name, JackEngine* engine, JackSynchro** table)
JackDriver::JackDriver(const char* name, const char* alias, JackEngine* engine, JackSynchro** table)
{ {
assert(strlen(name) < JACK_CLIENT_NAME_SIZE); assert(strlen(name) < JACK_CLIENT_NAME_SIZE);
fSynchroTable = table; fSynchroTable = table;
fClientControl = new JackClientControl(name); fClientControl = new JackClientControl(name);
strcpy(fAliasName, alias);
fEngine = engine; fEngine = engine;
fGraphManager = NULL; fGraphManager = NULL;
fLastWaitUst = 0; fLastWaitUst = 0;


+ 4
- 3
common/JackDriver.h View File

@@ -143,8 +143,9 @@ class EXPORT JackDriver : public JackDriverClient


protected: protected:


char fCaptureDriverName[JACK_CLIENT_NAME_SIZE];
char fPlaybackDriverName[JACK_CLIENT_NAME_SIZE];
char fCaptureDriverName[JACK_CLIENT_NAME_SIZE + 1];
char fPlaybackDriverName[JACK_CLIENT_NAME_SIZE + 1];
char fAliasName[JACK_CLIENT_NAME_SIZE + 1];
jack_nframes_t fCaptureLatency; jack_nframes_t fCaptureLatency;
jack_nframes_t fPlaybackLatency; jack_nframes_t fPlaybackLatency;
jack_time_t fLastWaitUst; jack_time_t fLastWaitUst;
@@ -159,7 +160,7 @@ class EXPORT JackDriver : public JackDriverClient


public: public:


JackDriver(const char* name, JackEngine* engine, JackSynchro** table);
JackDriver(const char* name, const char* alias, JackEngine* engine, JackSynchro** table);
JackDriver(); JackDriver();
virtual ~JackDriver(); virtual ~JackDriver();




+ 1
- 1
common/JackDummyDriver.cpp View File

@@ -178,7 +178,7 @@ extern "C"
if (wait_time == 0) // Not set if (wait_time == 0) // Not set
wait_time = (unsigned long)((((float)period_size) / ((float)sample_rate)) * 1000000.0f); wait_time = (unsigned long)((((float)period_size) / ((float)sample_rate)) * 1000000.0f);


Jack::JackDriverClientInterface* driver = new Jack::JackThreadedDriver(new Jack::JackDummyDriver("dummy_pcm", engine, table, wait_time));
Jack::JackDriverClientInterface* driver = new Jack::JackThreadedDriver(new Jack::JackDummyDriver("system", "dummy_pcm", engine, table, wait_time));
if (driver->Open(period_size, sample_rate, 1, 1, capture_ports, playback_ports, monitor, "dummy", "dummy", 0, 0) == 0) { if (driver->Open(period_size, sample_rate, 1, 1, capture_ports, playback_ports, monitor, "dummy", "dummy", 0, 0) == 0) {
return driver; return driver;
} else { } else {


+ 2
- 2
common/JackDummyDriver.h View File

@@ -38,8 +38,8 @@ class JackDummyDriver : public JackAudioDriver


public: public:


JackDummyDriver(const char* name, JackEngine* engine, JackSynchro** table, unsigned long wait_time)
: JackAudioDriver(name, engine, table), fWaitTime(wait_time)
JackDummyDriver(const char* name, const char* alias, JackEngine* engine, JackSynchro** table, unsigned long wait_time)
: JackAudioDriver(name, alias, engine, table), fWaitTime(wait_time)
{} {}
virtual ~JackDummyDriver() virtual ~JackDummyDriver()
{} {}


+ 33
- 15
common/JackEngine.cpp View File

@@ -447,8 +447,19 @@ bool JackEngine::ClientCheckName(const char* name)
return false; return false;
} }


int JackEngine::GetClientPID(const char* name)
{
for (int i = 0; i < CLIENT_NUM; i++) {
JackClientInterface* client = fClientTable[i];
if (client && (strcmp(client->GetClientControl()->fName, name) == 0))
return client->GetClientControl()->fPID;
}
return 0;
}

// Used for external clients // Used for external clients
int JackEngine::ClientExternalOpen(const char* name, int* ref, int* shared_engine, int* shared_client, int* shared_graph_manager)
int JackEngine::ClientExternalOpen(const char* name, int pid, int* ref, int* shared_engine, int* shared_client, int* shared_graph_manager)
{ {
jack_log("JackEngine::ClientOpen: name = %s ", name); jack_log("JackEngine::ClientOpen: name = %s ", name);


@@ -465,7 +476,7 @@ int JackEngine::ClientExternalOpen(const char* name, int* ref, int* shared_engin
goto error; goto error;
} }


if (client->Open(name, refnum, shared_client) < 0) {
if (client->Open(name, pid, refnum, shared_client) < 0) {
jack_error("Cannot open client"); jack_error("Cannot open client");
goto error; goto error;
} }
@@ -476,12 +487,13 @@ int JackEngine::ClientExternalOpen(const char* name, int* ref, int* shared_engin
goto error; goto error;
} }


fClientTable[refnum] = client;

if (NotifyAddClient(client, name, refnum) < 0) { if (NotifyAddClient(client, name, refnum) < 0) {
jack_error("Cannot notify add client"); jack_error("Cannot notify add client");
goto error; goto error;
} }

fClientTable[refnum] = client;
fGraphManager->InitRefNum(refnum); fGraphManager->InitRefNum(refnum);
fEngineControl->ResetRollingUsecs(); fEngineControl->ResetRollingUsecs();
*shared_engine = fEngineControl->GetShmIndex(); *shared_engine = fEngineControl->GetShmIndex();
@@ -490,7 +502,9 @@ int JackEngine::ClientExternalOpen(const char* name, int* ref, int* shared_engin
return 0; return 0;


error: error:
ClientCloseAux(refnum, client, false);
// Cleanup...
fSynchroTable[refnum]->Destroy();
fClientTable[refnum] = 0;
client->Close(); client->Close();
delete client; delete client;
return -1; return -1;
@@ -504,32 +518,39 @@ int JackEngine::ClientInternalOpen(const char* name, int* ref, JackEngineControl
int refnum = AllocateRefnum(); int refnum = AllocateRefnum();
if (refnum < 0) { if (refnum < 0) {
jack_error("No more refnum available"); jack_error("No more refnum available");
return -1;
goto error;
} }


if (!fSynchroTable[refnum]->Allocate(name, fEngineControl->fServerName, 0)) { if (!fSynchroTable[refnum]->Allocate(name, fEngineControl->fServerName, 0)) {
jack_error("Cannot allocate synchro"); jack_error("Cannot allocate synchro");
return -1;
goto error;
} }


if (wait && !fSignal->TimedWait(DRIVER_OPEN_TIMEOUT * 1000000)) { if (wait && !fSignal->TimedWait(DRIVER_OPEN_TIMEOUT * 1000000)) {
// Failure if RT thread is not running (problem with the driver...) // Failure if RT thread is not running (problem with the driver...)
jack_error("Driver is not running"); jack_error("Driver is not running");
return -1;
goto error;
} }


fClientTable[refnum] = client;

if (NotifyAddClient(client, name, refnum) < 0) { if (NotifyAddClient(client, name, refnum) < 0) {
jack_error("Cannot notify add client"); jack_error("Cannot notify add client");
return -1;
goto error;
} }


fClientTable[refnum] = client;
fGraphManager->InitRefNum(refnum); fGraphManager->InitRefNum(refnum);
fEngineControl->ResetRollingUsecs(); fEngineControl->ResetRollingUsecs();
*shared_engine = fEngineControl; *shared_engine = fEngineControl;
*shared_manager = fGraphManager; *shared_manager = fGraphManager;
*ref = refnum; *ref = refnum;
return 0; return 0;

error:
// Cleanup...
fSynchroTable[refnum]->Destroy();
fClientTable[refnum] = 0;
return -1;
} }


// Used for external clients // Used for external clients
@@ -556,9 +577,7 @@ int JackEngine::ClientInternalClose(int refnum, bool wait)


int JackEngine::ClientCloseAux(int refnum, JackClientInterface* client, bool wait) int JackEngine::ClientCloseAux(int refnum, JackClientInterface* client, bool wait)
{ {
jack_log("JackEngine::ClientCloseAux ref = %ld name = %s",
refnum,
(client->GetClientControl()) ? client->GetClientControl()->fName : "No name");
jack_log("JackEngine::ClientCloseAux ref = %ld", refnum);


// Unregister all ports ==> notifications are sent // Unregister all ports ==> notifications are sent
jack_int_t ports[PORT_NUM_FOR_CLIENT]; jack_int_t ports[PORT_NUM_FOR_CLIENT];
@@ -588,8 +607,7 @@ int JackEngine::ClientCloseAux(int refnum, JackClientInterface* client, bool wai
} }


// Notify running clients // Notify running clients
if (client->GetClientControl()) // When called in error cases, client may not be completely allocated
NotifyRemoveClient(client->GetClientControl()->fName, client->GetClientControl()->fRefNum);
NotifyRemoveClient(client->GetClientControl()->fName, client->GetClientControl()->fRefNum);


// Cleanup... // Cleanup...
fSynchroTable[refnum]->Destroy(); fSynchroTable[refnum]->Destroy();


+ 4
- 2
common/JackEngine.h View File

@@ -80,7 +80,7 @@ class JackEngine


// Client management // Client management
virtual int ClientCheck(const char* name, char* name_res, int protocol, int options, int* status); virtual int ClientCheck(const char* name, char* name_res, int protocol, int options, int* status);
virtual int ClientExternalOpen(const char* name, int* ref, int* shared_engine, int* shared_client, int* shared_graph_manager);
virtual int ClientExternalOpen(const char* name, int pid, int* ref, int* shared_engine, int* shared_client, int* shared_graph_manager);
virtual int ClientInternalOpen(const char* name, int* ref, JackEngineControl** shared_engine, JackGraphManager** shared_manager, JackClientInterface* client, bool wait); virtual int ClientInternalOpen(const char* name, int* ref, JackEngineControl** shared_engine, JackGraphManager** shared_manager, JackClientInterface* client, bool wait);


virtual int ClientExternalClose(int refnum); virtual int ClientExternalClose(int refnum);
@@ -88,7 +88,9 @@ class JackEngine


virtual int ClientActivate(int refnum, bool state); virtual int ClientActivate(int refnum, bool state);
virtual int ClientDeactivate(int refnum); virtual int ClientDeactivate(int refnum);

virtual int GetClientPID(const char* name);
// Internal client management // Internal client management
virtual int GetInternalClientName(int int_ref, char* name_res); virtual int GetInternalClientName(int int_ref, char* name_res);
virtual int InternalClientHandle(const char* client_name, int* status, int* int_ref); virtual int InternalClientHandle(const char* client_name, int* status, int* int_ref);


+ 2
- 2
common/JackExternalClient.cpp View File

@@ -44,7 +44,7 @@ int JackExternalClient::ClientNotify(int refnum, const char* name, int notify, i
return result; return result;
} }


int JackExternalClient::Open(const char* name, int refnum, int* shared_client)
int JackExternalClient::Open(const char* name, int pid, int refnum, int* shared_client)
{ {
try { try {


@@ -53,7 +53,7 @@ int JackExternalClient::Open(const char* name, int refnum, int* shared_client)
return -1; return -1;
} }


fClientControl = new JackClientControl(name, refnum);
fClientControl = new JackClientControl(name, pid, refnum);
if (!fClientControl) { if (!fClientControl) {
jack_error("Cannot allocate client shared memory segment"); jack_error("Cannot allocate client shared memory segment");
return -1; return -1;


+ 1
- 1
common/JackExternalClient.h View File

@@ -46,7 +46,7 @@ class JackExternalClient : public JackClientInterface
JackExternalClient(); JackExternalClient();
virtual ~JackExternalClient(); virtual ~JackExternalClient();


int Open(const char* name, int refnum, int* shared_client);
int Open(const char* name, int pid, int refnum, int* shared_client);
int Close(); int Close();


int ClientNotify(int refnum, const char* name, int notify, int sync, int value1, int value2); int ClientNotify(int refnum, const char* name, int notify, int sync, int value1, int value2);


+ 1
- 1
common/JackFreewheelDriver.h View File

@@ -35,7 +35,7 @@ class JackFreewheelDriver : public JackDriver


public: public:


JackFreewheelDriver(const char* name, JackEngine* engine, JackSynchro** table): JackDriver(name, engine, table)
JackFreewheelDriver(JackEngine* engine, JackSynchro** table): JackDriver("freewheel", "", engine, table)
{} {}
virtual ~JackFreewheelDriver() virtual ~JackFreewheelDriver()
{} {}


+ 3
- 2
common/JackInternalClient.cpp View File

@@ -35,6 +35,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#include "JackEngineControl.h" #include "JackEngineControl.h"
#include "JackClientControl.h" #include "JackClientControl.h"
#include "JackInternalClientChannel.h" #include "JackInternalClientChannel.h"
#include "JackTools.h"
#include <assert.h> #include <assert.h>


namespace Jack namespace Jack
@@ -74,7 +75,7 @@ JackInternalClient::~JackInternalClient()
int JackInternalClient::Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status) int JackInternalClient::Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status)
{ {
int result; int result;
char name_res[JACK_CLIENT_NAME_SIZE];
char name_res[JACK_CLIENT_NAME_SIZE + 1];
jack_log("JackInternalClient::Open name = %s", name); jack_log("JackInternalClient::Open name = %s", name);


snprintf(fServerName, sizeof(fServerName), server_name); snprintf(fServerName, sizeof(fServerName), server_name);
@@ -97,7 +98,7 @@ int JackInternalClient::Open(const char* server_name, const char* name, jack_opt
jack_error("Cannot open client name = %s", name_res); jack_error("Cannot open client name = %s", name_res);
goto error; goto error;
} }
SetupDriverSync(false); SetupDriverSync(false);
return 0; return 0;




+ 7
- 1
common/JackLibAPI.cpp View File

@@ -46,6 +46,7 @@ extern "C"
jack_options_t options, jack_options_t options,
jack_status_t *status, ...); jack_status_t *status, ...);
EXPORT int jack_client_close (jack_client_t *client); EXPORT int jack_client_close (jack_client_t *client);
EXPORT int jack_get_client_pid (const char *name);


#ifdef __cplusplus #ifdef __cplusplus
} }
@@ -59,7 +60,7 @@ EXPORT jack_client_t* jack_client_open_aux(const char* ext_client_name, jack_opt
jack_varargs_t va; /* variable arguments */ jack_varargs_t va; /* variable arguments */
jack_status_t my_status; jack_status_t my_status;
JackClient* client; JackClient* client;
char client_name[JACK_CLIENT_NAME_SIZE];
char client_name[JACK_CLIENT_NAME_SIZE + 1];


if (ext_client_name == NULL) { if (ext_client_name == NULL) {
jack_error("jack_client_open called with a NULL client_name"); jack_error("jack_client_open called with a NULL client_name");
@@ -143,4 +144,9 @@ EXPORT int jack_client_close(jack_client_t* ext_client)
} }
} }


EXPORT int jack_get_client_pid(const char *name)
{
jack_error("jack_get_client_pid : not implemented on library side");
return 0;
}



+ 3
- 3
common/JackLibClient.cpp View File

@@ -22,6 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "JackLibGlobals.h" #include "JackLibGlobals.h"
#include "JackGlobals.h" #include "JackGlobals.h"
#include "JackChannel.h" #include "JackChannel.h"
#include "JackTools.h"


namespace Jack namespace Jack
{ {
@@ -50,7 +51,6 @@ JackSynchro** GetSynchroTable()
return (JackLibGlobals::fGlobals ? JackLibGlobals::fGlobals->fSynchroTable : 0); return (JackLibGlobals::fGlobals ? JackLibGlobals::fGlobals->fSynchroTable : 0);
} }



//------------------- //-------------------
// Client management // Client management
//------------------- //-------------------
@@ -75,7 +75,7 @@ int JackLibClient::Open(const char* server_name, const char* name, jack_options_
snprintf(fServerName, sizeof(fServerName), server_name); snprintf(fServerName, sizeof(fServerName), server_name);


// Open server/client channel // Open server/client channel
char name_res[JACK_CLIENT_NAME_SIZE];
char name_res[JACK_CLIENT_NAME_SIZE + 1];
if (fChannel->Open(server_name, name, name_res, this, options, status) < 0) { if (fChannel->Open(server_name, name, name_res, this, options, status) < 0) {
jack_error("Cannot connect to the server"); jack_error("Cannot connect to the server");
goto error; goto error;
@@ -88,7 +88,7 @@ int JackLibClient::Open(const char* server_name, const char* name, jack_options_
} }


// Require new client // Require new client
fChannel->ClientOpen(name_res, &shared_engine, &shared_client, &shared_graph, &result);
fChannel->ClientOpen(name_res, JackTools::GetPID(), &shared_engine, &shared_client, &shared_graph, &result);
if (result < 0) { if (result < 0) {
jack_error("Cannot open %s client", name_res); jack_error("Cannot open %s client", name_res);
goto error; goto error;


+ 9
- 2
common/JackLockedEngine.h View File

@@ -62,10 +62,10 @@ class JackLockedEngine : public JackEngine, public JackLockAble
JackLock lock(this); JackLock lock(this);
return fEngine->ClientCheck(name, name_res, protocol, options, status); return fEngine->ClientCheck(name, name_res, protocol, options, status);
} }
int ClientExternalOpen(const char* name, int* ref, int* shared_engine, int* shared_client, int* shared_graph_manager)
int ClientExternalOpen(const char* name, int pid, int* ref, int* shared_engine, int* shared_client, int* shared_graph_manager)
{ {
JackLock lock(this); JackLock lock(this);
return fEngine->ClientExternalOpen(name, ref, shared_engine, shared_client, shared_graph_manager);
return fEngine->ClientExternalOpen(name, pid, ref, shared_engine, shared_client, shared_graph_manager);
} }
int ClientInternalOpen(const char* name, int* ref, JackEngineControl** shared_engine, JackGraphManager** shared_manager, JackClientInterface* client, bool wait) int ClientInternalOpen(const char* name, int* ref, JackEngineControl** shared_engine, JackGraphManager** shared_manager, JackClientInterface* client, bool wait)
{ {
@@ -195,6 +195,13 @@ class JackLockedEngine : public JackEngine, public JackLockAble
JackLock lock(this); JackLock lock(this);
fEngine->NotifyActivate(refnum); fEngine->NotifyActivate(refnum);
} }
int GetClientPID(const char* name)
{
JackLock lock(this);
return fEngine->GetClientPID(name);
}
}; };






+ 2
- 2
common/JackLoopbackDriver.h View File

@@ -35,8 +35,8 @@ class JackLoopbackDriver : public JackAudioDriver


public: public:


JackLoopbackDriver(const char* name, JackEngine* engine, JackSynchro** table)
: JackAudioDriver(name, engine, table)
JackLoopbackDriver(JackEngine* engine, JackSynchro** table)
: JackAudioDriver("loopback", "", engine, table)
{} {}
virtual ~JackLoopbackDriver() virtual ~JackLoopbackDriver()
{} {}


+ 5
- 1
common/JackRequest.h View File

@@ -192,23 +192,27 @@ struct JackClientCheckResult : public JackResult
struct JackClientOpenRequest : public JackRequest struct JackClientOpenRequest : public JackRequest
{ {


int fPID;
char fName[JACK_CLIENT_NAME_SIZE + 1]; char fName[JACK_CLIENT_NAME_SIZE + 1];


JackClientOpenRequest() JackClientOpenRequest()
{} {}
JackClientOpenRequest(const char* name): JackRequest(JackRequest::kClientOpen)
JackClientOpenRequest(const char* name, int pid): JackRequest(JackRequest::kClientOpen)
{ {
snprintf(fName, sizeof(fName), "%s", name); snprintf(fName, sizeof(fName), "%s", name);
fPID = pid;
} }


int Read(JackChannelTransaction* trans) int Read(JackChannelTransaction* trans)
{ {
CheckRes(trans->Read(&fPID, sizeof(int)));
return trans->Read(&fName, JACK_CLIENT_NAME_SIZE + 1); return trans->Read(&fName, JACK_CLIENT_NAME_SIZE + 1);
} }


int Write(JackChannelTransaction* trans) int Write(JackChannelTransaction* trans)
{ {
CheckRes(JackRequest::Write(trans)); CheckRes(JackRequest::Write(trans));
CheckRes(trans->Write(&fPID, sizeof(int)));
return trans->Write(&fName, JACK_CLIENT_NAME_SIZE + 1); return trans->Write(&fName, JACK_CLIENT_NAME_SIZE + 1);
} }
}; };


+ 3
- 2
common/JackServer.cpp View File

@@ -50,8 +50,8 @@ JackServer::JackServer(bool sync, bool temporary, long timeout, bool rt, long pr
fGraphManager = new JackGraphManager(); fGraphManager = new JackGraphManager();
fEngineControl = new JackEngineControl(sync, temporary, timeout, rt, priority, verbose, server_name); fEngineControl = new JackEngineControl(sync, temporary, timeout, rt, priority, verbose, server_name);
fEngine = new JackLockedEngine(new JackEngine(fGraphManager, fSynchroTable, fEngineControl)); fEngine = new JackLockedEngine(new JackEngine(fGraphManager, fSynchroTable, fEngineControl));
fFreewheelDriver = new JackThreadedDriver(new JackFreewheelDriver("freewheel", fEngine, fSynchroTable));
fLoopbackDriver = new JackLoopbackDriver("loopback", fEngine, fSynchroTable);
fFreewheelDriver = new JackThreadedDriver(new JackFreewheelDriver(fEngine, fSynchroTable));
fLoopbackDriver = new JackLoopbackDriver(fEngine, fSynchroTable);
fChannel = JackGlobals::MakeServerChannel(); fChannel = JackGlobals::MakeServerChannel();
fFreewheel = false; fFreewheel = false;
fLoopback = loopback; fLoopback = loopback;
@@ -303,6 +303,7 @@ JackGraphManager* JackServer::GetGraphManager()
{ {
return fGraphManager; return fGraphManager;
} }


} // end of namespace } // end of namespace



+ 10
- 1
common/JackServerAPI.cpp View File

@@ -30,6 +30,7 @@ This program is free software; you can redistribute it and/or modify
#include "JackError.h" #include "JackError.h"
#include "JackServerLaunch.h" #include "JackServerLaunch.h"
#include "JackTools.h" #include "JackTools.h"
#include "JackEngine.h"


#ifdef WIN32 #ifdef WIN32
#define EXPORT __declspec(dllexport) #define EXPORT __declspec(dllexport)
@@ -49,6 +50,7 @@ extern "C"
jack_options_t options, jack_options_t options,
jack_status_t *status, ...); jack_status_t *status, ...);
EXPORT int jack_client_close (jack_client_t *client); EXPORT int jack_client_close (jack_client_t *client);
EXPORT int jack_get_client_pid (const char *name);


#ifdef __cplusplus #ifdef __cplusplus
} }
@@ -61,7 +63,7 @@ EXPORT jack_client_t* jack_client_open_aux(const char* ext_client_name, jack_opt
jack_varargs_t va; /* variable arguments */ jack_varargs_t va; /* variable arguments */
jack_status_t my_status; jack_status_t my_status;
JackClient* client; JackClient* client;
char client_name[JACK_CLIENT_NAME_SIZE];
char client_name[JACK_CLIENT_NAME_SIZE + 1];


if (ext_client_name == NULL) { if (ext_client_name == NULL) {
jack_error("jack_client_open called with a NULL client_name"); jack_error("jack_client_open called with a NULL client_name");
@@ -141,3 +143,10 @@ EXPORT int jack_client_close(jack_client_t* ext_client)
} }
} }


EXPORT int jack_get_client_pid(const char *name)
{
return (JackServer::fInstance != NULL)
? JackServer::fInstance->GetEngine()->GetClientPID(name)
: 0;
}


+ 2
- 2
common/JackSocketClientChannel.cpp View File

@@ -148,9 +148,9 @@ void JackSocketClientChannel::ClientCheck(const char* name, char* name_res, int
strcpy(name_res, res.fName); strcpy(name_res, res.fName);
} }


void JackSocketClientChannel::ClientOpen(const char* name, int* shared_engine, int* shared_client, int* shared_graph, int* result)
void JackSocketClientChannel::ClientOpen(const char* name, int pid, int* shared_engine, int* shared_client, int* shared_graph, int* result)
{ {
JackClientOpenRequest req(name);
JackClientOpenRequest req(name, pid);
JackClientOpenResult res; JackClientOpenResult res;
ServerSyncCall(&req, &res, result); ServerSyncCall(&req, &res, result);
*shared_engine = res.fSharedEngine; *shared_engine = res.fSharedEngine;


+ 1
- 1
common/JackSocketClientChannel.h View File

@@ -60,7 +60,7 @@ class JackSocketClientChannel : public JackClientChannelInterface, public JackRu
int ServerCheck(const char* server_name); int ServerCheck(const char* server_name);


void ClientCheck(const char* name, char* name_res, int protocol, int options, int* status, int* result); void ClientCheck(const char* name, char* name_res, int protocol, int options, int* status, int* result);
void ClientOpen(const char* name, int* shared_engine, int* shared_client, int* shared_graph, int* result);
void ClientOpen(const char* name, int pid, int* shared_engine, int* shared_client, int* shared_graph, int* result);
void ClientClose(int refnum, int* result); void ClientClose(int refnum, int* result);


void ClientActivate(int refnum, int state, int* result); void ClientActivate(int refnum, int state, int* result);


+ 3
- 3
common/JackSocketServerChannel.cpp View File

@@ -89,11 +89,11 @@ void JackSocketServerChannel::ClientCreate()
} }
} }


void JackSocketServerChannel::ClientAdd(int fd, char* name, int* shared_engine, int* shared_client, int* shared_graph, int* result)
void JackSocketServerChannel::ClientAdd(int fd, char* name, int pid, int* shared_engine, int* shared_client, int* shared_graph, int* result)
{ {
jack_log("JackSocketServerChannel::ClientAdd"); jack_log("JackSocketServerChannel::ClientAdd");
int refnum = -1; int refnum = -1;
*result = fServer->GetEngine()->ClientExternalOpen(name, &refnum, shared_engine, shared_client, shared_graph);
*result = fServer->GetEngine()->ClientExternalOpen(name, pid, &refnum, shared_engine, shared_client, shared_graph);
if (*result == 0) { if (*result == 0) {
fSocketTable[fd].first = refnum; fSocketTable[fd].first = refnum;
fRebuild = true; fRebuild = true;
@@ -167,7 +167,7 @@ bool JackSocketServerChannel::HandleRequest(int fd)
JackClientOpenRequest req; JackClientOpenRequest req;
JackClientOpenResult res; JackClientOpenResult res;
if (req.Read(socket) == 0) if (req.Read(socket) == 0)
ClientAdd(fd, req.fName, &res.fSharedEngine, &res.fSharedClient, &res.fSharedGraph, &res.fResult);
ClientAdd(fd, req.fName, req.fPID, &res.fSharedEngine, &res.fSharedClient, &res.fSharedGraph, &res.fResult);
if (res.Write(socket) < 0) if (res.Write(socket) < 0)
jack_error("JackRequest::ClientOpen write error name = %s", req.fName); jack_error("JackRequest::ClientOpen write error name = %s", req.fName);
break; break;


+ 1
- 1
common/JackSocketServerChannel.h View File

@@ -49,7 +49,7 @@ class JackSocketServerChannel : public JackServerChannelInterface, public JackRu
void BuildPoolTable(); void BuildPoolTable();


void ClientCreate(); void ClientCreate();
void ClientAdd(int fd, char* name, int* shared_engine, int* shared_client, int* shared_graph, int* result);
void ClientAdd(int fd, char* name, int pid, int* shared_engine, int* shared_client, int* shared_graph, int* result);
void ClientRemove(int fd, int refnum); void ClientRemove(int fd, int refnum);
void ClientKill(int fd); void ClientKill(int fd);




+ 5
- 0
common/jack/jack.h View File

@@ -105,6 +105,11 @@ extern "C"
* name will differ from the @a client_name requested. * name will differ from the @a client_name requested.
*/ */
char * jack_get_client_name (jack_client_t *client); char * jack_get_client_name (jack_client_t *client);
/**
* @return pid of client. If not available, 0 will be returned.
*/
int jack_get_client_pid (const char *name);


/** /**
* Load an internal client into the Jack server. * Load an internal client into the Jack server.


+ 5
- 5
linux/alsa/JackAlsaDriver.cpp View File

@@ -2126,8 +2126,8 @@ int JackAlsaDriver::Attach()
jack_log("JackAudioDriver::Attach fBufferSize %ld fSampleRate %ld", fEngineControl->fBufferSize, fEngineControl->fSampleRate); jack_log("JackAudioDriver::Attach fBufferSize %ld fSampleRate %ld", fEngineControl->fBufferSize, fEngineControl->fSampleRate);


for (int i = 0; i < fCaptureChannels; i++) { for (int i = 0; i < fCaptureChannels; i++) {
snprintf(alias, sizeof(alias) - 1, "%s:capture_%u", fClientControl->fName, i + 1);
snprintf(name, sizeof(name) - 1, "system:capture_%d", i + 1);
snprintf(alias, sizeof(alias) - 1, "%s:capture_%u", fAliasName, i + 1);
snprintf(name, sizeof(name) - 1, "%s:capture_%d", fClientControl->fName, i + 1);
if ((port_index = fGraphManager->AllocatePort(fClientControl->fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, (JackPortFlags)port_flags, fEngineControl->fBufferSize)) == NO_PORT) { if ((port_index = fGraphManager->AllocatePort(fClientControl->fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, (JackPortFlags)port_flags, fEngineControl->fBufferSize)) == NO_PORT) {
jack_error("driver: cannot register port for %s", name); jack_error("driver: cannot register port for %s", name);
return -1; return -1;
@@ -2142,8 +2142,8 @@ int JackAlsaDriver::Attach()
port_flags = JackPortIsInput | JackPortIsPhysical | JackPortIsTerminal; port_flags = JackPortIsInput | JackPortIsPhysical | JackPortIsTerminal;


for (int i = 0; i < fPlaybackChannels; i++) { for (int i = 0; i < fPlaybackChannels; i++) {
snprintf(alias, sizeof(alias) - 1, "%s:playback_%u", fClientControl->fName, i + 1);
snprintf(name, sizeof(name) - 1, "system:playback_%d", i + 1);
snprintf(alias, sizeof(alias) - 1, "%s:playback_%u", fAliasName, i + 1);
snprintf(name, sizeof(name) - 1, "%s:playback_%d", fClientControl->fName, i + 1);
if ((port_index = fGraphManager->AllocatePort(fClientControl->fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, (JackPortFlags)port_flags, fEngineControl->fBufferSize)) == NO_PORT) { if ((port_index = fGraphManager->AllocatePort(fClientControl->fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, (JackPortFlags)port_flags, fEngineControl->fBufferSize)) == NO_PORT) {
jack_error("driver: cannot register port for %s", name); jack_error("driver: cannot register port for %s", name);
return -1; return -1;
@@ -2723,7 +2723,7 @@ extern "C"
playback = TRUE; playback = TRUE;
} }


Jack::JackAlsaDriver* alsa_driver = new Jack::JackAlsaDriver("alsa_pcm", engine, table);
Jack::JackAlsaDriver* alsa_driver = new Jack::JackAlsaDriver("system", "alsa_pcm", engine, table);
Jack::JackDriverClientInterface* threaded_driver = new Jack::JackThreadedDriver(alsa_driver); Jack::JackDriverClientInterface* threaded_driver = new Jack::JackThreadedDriver(alsa_driver);
// Special open for ALSA driver... // Special open for ALSA driver...
if (alsa_driver->Open(frames_per_interrupt, user_nperiods, srate, hw_monitoring, hw_metering, capture, playback, dither, soft_mode, monitor, if (alsa_driver->Open(frames_per_interrupt, user_nperiods, srate, hw_monitoring, hw_metering, capture, playback, dither, soft_mode, monitor,


+ 1
- 1
linux/alsa/JackAlsaDriver.h View File

@@ -116,7 +116,7 @@ class JackAlsaDriver : public JackAudioDriver


public: public:


JackAlsaDriver(const char* name, JackEngine* engine, JackSynchro** table): JackAudioDriver(name, engine, table)
JackAlsaDriver(const char* name, const char* alias, JackEngine* engine, JackSynchro** table): JackAudioDriver(name, alias, engine, table)
{} {}
virtual ~JackAlsaDriver() virtual ~JackAlsaDriver()
{} {}


+ 1
- 1
linux/firewire/JackFFADODriver.cpp View File

@@ -993,7 +993,7 @@ extern "C"
cmlparams.capture_ports = TRUE; cmlparams.capture_ports = TRUE;
} }


Jack::JackFFADODriver* ffado_driver = new Jack::JackFFADODriver("firewire_pcm", engine, table);
Jack::JackFFADODriver* ffado_driver = new Jack::JackFFADODriver("system", "firewire_pcm", engine, table);
Jack::JackDriverClientInterface* threaded_driver = new Jack::JackThreadedDriver(ffado_driver); Jack::JackDriverClientInterface* threaded_driver = new Jack::JackThreadedDriver(ffado_driver);
// Special open for FFADO driver... // Special open for FFADO driver...
if (ffado_driver->Open(&cmlparams) == 0) { if (ffado_driver->Open(&cmlparams) == 0) {


+ 2
- 1
linux/firewire/JackFFADODriver.h View File

@@ -62,7 +62,8 @@ class JackFFADODriver : public JackAudioDriver


public: public:


JackFFADODriver(const char* name, JackEngine* engine, JackSynchro** table): JackAudioDriver(name, engine, table)
JackFFADODriver(const char* name, const char* alias, JackEngine* engine, JackSynchro** table)
: JackAudioDriver(name, alias,engine, table)
{} {}
virtual ~JackFFADODriver() virtual ~JackFFADODriver()
{} {}


+ 1
- 1
linux/freebob/JackFreebobDriver.cpp View File

@@ -1141,7 +1141,7 @@ extern "C"


jack_error("Freebob using Firewire port %d, node %d", cmlparams.port, cmlparams.node_id); jack_error("Freebob using Firewire port %d, node %d", cmlparams.port, cmlparams.node_id);


Jack::JackFreebobDriver* freebob_driver = new Jack::JackFreebobDriver("freebob_pcm", engine, table);
Jack::JackFreebobDriver* freebob_driver = new Jack::JackFreebobDriver("system", "freebob_pcm", engine, table);
Jack::JackDriverClientInterface* threaded_driver = new Jack::JackThreadedDriver(freebob_driver); Jack::JackDriverClientInterface* threaded_driver = new Jack::JackThreadedDriver(freebob_driver);
// Special open for FreeBoB driver... // Special open for FreeBoB driver...
if (freebob_driver->Open(&cmlparams) == 0) { if (freebob_driver->Open(&cmlparams) == 0) {


+ 2
- 1
linux/freebob/JackFreebobDriver.h View File

@@ -69,7 +69,8 @@ class JackFreebobDriver : public JackAudioDriver


public: public:


JackFreebobDriver(const char* name, JackEngine* engine, JackSynchro** table): JackAudioDriver(name, engine, table)
JackFreebobDriver(const char* name, const char* alias, JackEngine* engine, JackSynchro** table)
:JackAudioDriver(name, alias, engine, table)
{} {}
virtual ~JackFreebobDriver() virtual ~JackFreebobDriver()
{} {}


+ 10
- 10
macosx/JackCoreAudioDriver.cpp View File

@@ -419,8 +419,8 @@ OSStatus JackCoreAudioDriver::GetTotalChannels(AudioDeviceID device, int* channe
return err; return err;
} }


JackCoreAudioDriver::JackCoreAudioDriver(const char* name, JackEngine* engine, JackSynchro** table)
: JackAudioDriver(name, engine, table), fJackInputData(NULL), fDriverOutputData(NULL), fState(false), fIOUsage(1.f)
JackCoreAudioDriver::JackCoreAudioDriver(const char* name, const char* alias, JackEngine* engine, JackSynchro** table)
: JackAudioDriver(name, alias, engine, table), fJackInputData(NULL), fDriverOutputData(NULL), fState(false), fIOUsage(1.f)
{} {}


JackCoreAudioDriver::~JackCoreAudioDriver() JackCoreAudioDriver::~JackCoreAudioDriver()
@@ -967,12 +967,12 @@ int JackCoreAudioDriver::Attach()
err = AudioDeviceGetProperty(fDeviceID, i + 1, true, kAudioDevicePropertyChannelName, &size, channel_name); err = AudioDeviceGetProperty(fDeviceID, i + 1, true, kAudioDevicePropertyChannelName, &size, channel_name);
if (err != noErr) if (err != noErr)
jack_log("AudioDeviceGetProperty kAudioDevicePropertyChannelName error "); jack_log("AudioDeviceGetProperty kAudioDevicePropertyChannelName error ");
snprintf(alias, sizeof(alias) - 1, "%s:%s:out_%s%u", fClientControl->fName, fCaptureDriverName, channel_name, i + 1);
snprintf(alias, sizeof(alias) - 1, "%s:%s:out_%s%u", fAliasName, fCaptureDriverName, channel_name, i + 1);
} else { } else {
snprintf(alias, sizeof(alias) - 1, "%s:%s:out%u", fClientControl->fName, fCaptureDriverName, i + 1);
snprintf(alias, sizeof(alias) - 1, "%s:%s:out%u", fAliasName, fCaptureDriverName, i + 1);
} }


snprintf(name, sizeof(name) - 1, "system:capture_%d", i + 1);
snprintf(name, sizeof(name) - 1, "%s:capture_%d", fClientControl->fName, i + 1);


if ((port_index = fGraphManager->AllocatePort(fClientControl->fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, (JackPortFlags)port_flags, fEngineControl->fBufferSize)) == NO_PORT) { if ((port_index = fGraphManager->AllocatePort(fClientControl->fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, (JackPortFlags)port_flags, fEngineControl->fBufferSize)) == NO_PORT) {
jack_error("Cannot register port for %s", name); jack_error("Cannot register port for %s", name);
@@ -1006,12 +1006,12 @@ int JackCoreAudioDriver::Attach()
err = AudioDeviceGetProperty(fDeviceID, i + 1, false, kAudioDevicePropertyChannelName, &size, channel_name); err = AudioDeviceGetProperty(fDeviceID, i + 1, false, kAudioDevicePropertyChannelName, &size, channel_name);
if (err != noErr) if (err != noErr)
jack_log("AudioDeviceGetProperty kAudioDevicePropertyChannelName error "); jack_log("AudioDeviceGetProperty kAudioDevicePropertyChannelName error ");
snprintf(alias, sizeof(alias) - 1, "%s:%s:in_%s%u", fClientControl->fName, fPlaybackDriverName, channel_name, i + 1);
snprintf(alias, sizeof(alias) - 1, "%s:%s:in_%s%u", fAliasName, fPlaybackDriverName, channel_name, i + 1);
} else { } else {
snprintf(alias, sizeof(alias) - 1, "%s:%s:in%u", fClientControl->fName, fPlaybackDriverName, i + 1);
snprintf(alias, sizeof(alias) - 1, "%s:%s:in%u", fAliasName, fPlaybackDriverName, i + 1);
} }


snprintf(name, sizeof(name) - 1, "system:playback_%d", i + 1);
snprintf(name, sizeof(name) - 1, "%s:playback_%d", fClientControl->fName, i + 1);


if ((port_index = fGraphManager->AllocatePort(fClientControl->fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, (JackPortFlags)port_flags, fEngineControl->fBufferSize)) == NO_PORT) { if ((port_index = fGraphManager->AllocatePort(fClientControl->fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, (JackPortFlags)port_flags, fEngineControl->fBufferSize)) == NO_PORT) {
jack_error("Cannot register port for %s", name); jack_error("Cannot register port for %s", name);
@@ -1037,7 +1037,7 @@ int JackCoreAudioDriver::Attach()
// Monitor ports // Monitor ports
if (fWithMonitorPorts) { if (fWithMonitorPorts) {
jack_log("Create monitor port "); jack_log("Create monitor port ");
snprintf(name, sizeof(name) - 1, "%s:%s:monitor_%u", fClientControl->fName, fPlaybackDriverName, i + 1);
snprintf(name, sizeof(name) - 1, "%s:%s:monitor_%u", fAliasName, fPlaybackDriverName, i + 1);
if ((port_index = fGraphManager->AllocatePort(fClientControl->fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, fEngineControl->fBufferSize)) == NO_PORT) { if ((port_index = fGraphManager->AllocatePort(fClientControl->fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, fEngineControl->fBufferSize)) == NO_PORT) {
jack_error("Cannot register monitor port for %s", name); jack_error("Cannot register monitor port for %s", name);
return -1; return -1;
@@ -1336,7 +1336,7 @@ extern "C"
playback = TRUE; playback = TRUE;
} }


Jack::JackCoreAudioDriver* driver = new Jack::JackCoreAudioDriver("coreaudio", engine, table);
Jack::JackCoreAudioDriver* driver = new Jack::JackCoreAudioDriver("system", "coreaudio", engine, table);
if (driver->Open(frames_per_interrupt, srate, capture, playback, chan_in, chan_out, monitor, capture_pcm_name, if (driver->Open(frames_per_interrupt, srate, capture, playback, chan_in, chan_out, monitor, capture_pcm_name,
playback_pcm_name, systemic_input_latency, systemic_output_latency, async_output_latency) == 0) { playback_pcm_name, systemic_input_latency, systemic_output_latency, async_output_latency) == 0) {
return driver; return driver;


+ 1
- 1
macosx/JackCoreAudioDriver.h View File

@@ -143,7 +143,7 @@ class JackCoreAudioDriver : public JackAudioDriver


public: public:


JackCoreAudioDriver(const char* name, JackEngine* engine, JackSynchro** table);
JackCoreAudioDriver(const char* name, const char* alias, JackEngine* engine, JackSynchro** table);
virtual ~JackCoreAudioDriver(); virtual ~JackCoreAudioDriver();


int Open(jack_nframes_t frames_per_cycle, int Open(jack_nframes_t frames_per_cycle,


+ 2
- 2
macosx/JackMacEngineRPC.cpp View File

@@ -40,12 +40,12 @@ rpc_type server_rpc_jack_client_check(mach_port_t private_port, client_name_t na
return KERN_SUCCESS; return KERN_SUCCESS;
} }


rpc_type server_rpc_jack_client_open(mach_port_t server_port, client_name_t name, mach_port_t* private_port, int* shared_engine, int* shared_client, int* shared_graph, int* result)
rpc_type server_rpc_jack_client_open(mach_port_t server_port, client_name_t name, int pid, mach_port_t* private_port, int* shared_engine, int* shared_client, int* shared_graph, int* result)
{ {
jack_log("rpc_jack_client_new %s", name); jack_log("rpc_jack_client_new %s", name);
JackMachServerChannel* channel = JackMachServerChannel::fPortTable[server_port]; JackMachServerChannel* channel = JackMachServerChannel::fPortTable[server_port];
assert(channel); assert(channel);
channel->ClientOpen((char*)name, private_port, shared_engine, shared_client, shared_graph, result);
channel->ClientOpen((char*)name, pid, private_port, shared_engine, shared_client, shared_graph, result);
return KERN_SUCCESS; return KERN_SUCCESS;
} }




+ 2
- 2
macosx/JackMachClientChannel.cpp View File

@@ -134,9 +134,9 @@ void JackMachClientChannel::ClientCheck(const char* name, char* name_res, int pr
} }
} }


void JackMachClientChannel::ClientOpen(const char* name, int* shared_engine, int* shared_client, int* shared_graph, int* result)
void JackMachClientChannel::ClientOpen(const char* name, int pid, int* shared_engine, int* shared_client, int* shared_graph, int* result)
{ {
kern_return_t res = rpc_jack_client_open(fServerPort.GetPort(), (char*)name, &fPrivatePort, shared_engine, shared_client, shared_graph, result);
kern_return_t res = rpc_jack_client_open(fServerPort.GetPort(), (char*)name, pid, &fPrivatePort, shared_engine, shared_client, shared_graph, result);
if (res != KERN_SUCCESS) { if (res != KERN_SUCCESS) {
*result = -1; *result = -1;
jack_error("JackMachClientChannel::ClientOpen err = %s", mach_error_string(res)); jack_error("JackMachClientChannel::ClientOpen err = %s", mach_error_string(res));


+ 1
- 1
macosx/JackMachClientChannel.h View File

@@ -57,7 +57,7 @@ class JackMachClientChannel : public JackClientChannelInterface, public JackRunn
int ServerCheck(const char* server_name); int ServerCheck(const char* server_name);


void ClientCheck(const char* name, char* name_res, int protocol, int options, int* status, int* result); void ClientCheck(const char* name, char* name_res, int protocol, int options, int* status, int* result);
void ClientOpen(const char* name, int* shared_engine, int* shared_client, int* shared_graph, int* result);
void ClientOpen(const char* name, int pid, int* shared_engine, int* shared_client, int* shared_graph, int* result);
void ClientClose(int refnum, int* result); void ClientClose(int refnum, int* result);


void ClientActivate(int refnum, int state, int* result); void ClientActivate(int refnum, int state, int* result);


+ 2
- 2
macosx/JackMachServerChannel.cpp View File

@@ -85,10 +85,10 @@ void JackMachServerChannel::ClientCheck(char* name, char* name_res, int protocol
*result = GetEngine()->ClientCheck(name, name_res, protocol, options, status); *result = GetEngine()->ClientCheck(name, name_res, protocol, options, status);
} }


void JackMachServerChannel::ClientOpen(char* name, mach_port_t* private_port, int* shared_engine, int* shared_client, int* shared_graph, int* result)
void JackMachServerChannel::ClientOpen(char* name, int pid, mach_port_t* private_port, int* shared_engine, int* shared_client, int* shared_graph, int* result)
{ {
int refnum = -1; int refnum = -1;
*result = GetEngine()->ClientExternalOpen(name, &refnum, shared_engine, shared_client, shared_graph);
*result = GetEngine()->ClientExternalOpen(name, pid, &refnum, shared_engine, shared_client, shared_graph);


if (*result == 0) { if (*result == 0) {
mach_port_t port = fServerPort.AddPort(); mach_port_t port = fServerPort.AddPort();


+ 1
- 1
macosx/JackMachServerChannel.h View File

@@ -59,7 +59,7 @@ class JackMachServerChannel : public JackServerChannelInterface, public JackRunn
JackServer* GetServer(); JackServer* GetServer();


void ClientCheck(char* name, char* name_res, int protocol, int options, int* status, int* result); void ClientCheck(char* name, char* name_res, int protocol, int options, int* status, int* result);
void ClientOpen(char* name, mach_port_t* private_port, int* shared_engine, int* shared_client, int* shared_graph, int* result);
void ClientOpen(char* name, int pid, mach_port_t* private_port, int* shared_engine, int* shared_client, int* shared_graph, int* result);
void ClientClose(mach_port_t private_port, int refnum); void ClientClose(mach_port_t private_port, int refnum);
void ClientKill(mach_port_t private_port); void ClientKill(mach_port_t private_port);




+ 1
- 1
macosx/RPC/JackRPCClientServer.c View File

@@ -1,6 +1,6 @@
/* /*
* IDENTIFICATION: * IDENTIFICATION:
* stub generated Fri May 16 09:21:55 2008
* stub generated Wed May 21 10:43:25 2008
* with a MiG generated Tue Feb 19 02:01:43 PST 2008 by root@b75.local * with a MiG generated Tue Feb 19 02:01:43 PST 2008 by root@b75.local
* OPTIONS: * OPTIONS:
*/ */


+ 1
- 1
macosx/RPC/JackRPCClientUser.c View File

@@ -1,6 +1,6 @@
/* /*
* IDENTIFICATION: * IDENTIFICATION:
* stub generated Fri May 16 09:21:55 2008
* stub generated Wed May 21 10:43:25 2008
* with a MiG generated Tue Feb 19 02:01:43 PST 2008 by root@b75.local * with a MiG generated Tue Feb 19 02:01:43 PST 2008 by root@b75.local
* OPTIONS: * OPTIONS:
*/ */


+ 1
- 0
macosx/RPC/JackRPCEngine.defs View File

@@ -34,6 +34,7 @@ type objet_data_t = c_string[1024];
routine rpc_jack_client_open( routine rpc_jack_client_open(
server_port : mach_port_t; server_port : mach_port_t;
client_name : client_name_t; client_name : client_name_t;
pid : int;
out private_port : mach_port_make_send_t; out private_port : mach_port_make_send_t;
out shared_engine : int; out shared_engine : int;
out shared_client : int; out shared_client : int;


+ 2
- 0
macosx/RPC/JackRPCEngine.h View File

@@ -53,6 +53,7 @@ kern_return_t rpc_jack_client_open
( (
mach_port_t server_port, mach_port_t server_port,
client_name_t client_name, client_name_t client_name,
int pid,
mach_port_t *private_port, mach_port_t *private_port,
int *shared_engine, int *shared_engine,
int *shared_client, int *shared_client,
@@ -367,6 +368,7 @@ __END_DECLS
mach_msg_header_t Head; mach_msg_header_t Head;
NDR_record_t NDR; NDR_record_t NDR;
client_name_t client_name; client_name_t client_name;
int pid;
} __Request__rpc_jack_client_open_t; } __Request__rpc_jack_client_open_t;
#ifdef __MigPackStructs #ifdef __MigPackStructs
#pragma pack() #pragma pack()


+ 81
- 6
macosx/RPC/JackRPCEngineServer.c View File

@@ -1,6 +1,6 @@
/* /*
* IDENTIFICATION: * IDENTIFICATION:
* stub generated Fri May 16 09:21:56 2008
* stub generated Wed May 21 10:43:25 2008
* with a MiG generated Tue Feb 19 02:01:43 PST 2008 by root@b75.local * with a MiG generated Tue Feb 19 02:01:43 PST 2008 by root@b75.local
* OPTIONS: * OPTIONS:
*/ */
@@ -111,6 +111,7 @@
mach_msg_header_t Head; mach_msg_header_t Head;
NDR_record_t NDR; NDR_record_t NDR;
client_name_t client_name; client_name_t client_name;
int pid;
} __Request__rpc_jack_client_open_t; } __Request__rpc_jack_client_open_t;
#ifdef __MigPackStructs #ifdef __MigPackStructs
#pragma pack() #pragma pack()
@@ -767,6 +768,26 @@ mig_internal novalue _Xrpc_jack_client_rt_notify
#endif /* defined(__NDR_convert__*__defined) */ #endif /* defined(__NDR_convert__*__defined) */
#endif /* __NDR_convert__int_rep__Request__rpc_jack_client_open_t__client_name__defined */ #endif /* __NDR_convert__int_rep__Request__rpc_jack_client_open_t__client_name__defined */


#ifndef __NDR_convert__int_rep__Request__rpc_jack_client_open_t__pid__defined
#if defined(__NDR_convert__int_rep__JackRPCEngine__int__defined)
#define __NDR_convert__int_rep__Request__rpc_jack_client_open_t__pid__defined
#define __NDR_convert__int_rep__Request__rpc_jack_client_open_t__pid(a, f) \
__NDR_convert__int_rep__JackRPCEngine__int((int *)(a), f)
#elif defined(__NDR_convert__int_rep__int__defined)
#define __NDR_convert__int_rep__Request__rpc_jack_client_open_t__pid__defined
#define __NDR_convert__int_rep__Request__rpc_jack_client_open_t__pid(a, f) \
__NDR_convert__int_rep__int((int *)(a), f)
#elif defined(__NDR_convert__int_rep__JackRPCEngine__int32_t__defined)
#define __NDR_convert__int_rep__Request__rpc_jack_client_open_t__pid__defined
#define __NDR_convert__int_rep__Request__rpc_jack_client_open_t__pid(a, f) \
__NDR_convert__int_rep__JackRPCEngine__int32_t((int32_t *)(a), f)
#elif defined(__NDR_convert__int_rep__int32_t__defined)
#define __NDR_convert__int_rep__Request__rpc_jack_client_open_t__pid__defined
#define __NDR_convert__int_rep__Request__rpc_jack_client_open_t__pid(a, f) \
__NDR_convert__int_rep__int32_t((int32_t *)(a), f)
#endif /* defined(__NDR_convert__*__defined) */
#endif /* __NDR_convert__int_rep__Request__rpc_jack_client_open_t__pid__defined */

#ifndef __NDR_convert__char_rep__Request__rpc_jack_client_open_t__client_name__defined #ifndef __NDR_convert__char_rep__Request__rpc_jack_client_open_t__client_name__defined
#if defined(__NDR_convert__char_rep__JackRPCEngine__client_name_t__defined) #if defined(__NDR_convert__char_rep__JackRPCEngine__client_name_t__defined)
#define __NDR_convert__char_rep__Request__rpc_jack_client_open_t__client_name__defined #define __NDR_convert__char_rep__Request__rpc_jack_client_open_t__client_name__defined
@@ -787,6 +808,26 @@ mig_internal novalue _Xrpc_jack_client_rt_notify
#endif /* defined(__NDR_convert__*__defined) */ #endif /* defined(__NDR_convert__*__defined) */
#endif /* __NDR_convert__char_rep__Request__rpc_jack_client_open_t__client_name__defined */ #endif /* __NDR_convert__char_rep__Request__rpc_jack_client_open_t__client_name__defined */


#ifndef __NDR_convert__char_rep__Request__rpc_jack_client_open_t__pid__defined
#if defined(__NDR_convert__char_rep__JackRPCEngine__int__defined)
#define __NDR_convert__char_rep__Request__rpc_jack_client_open_t__pid__defined
#define __NDR_convert__char_rep__Request__rpc_jack_client_open_t__pid(a, f) \
__NDR_convert__char_rep__JackRPCEngine__int((int *)(a), f)
#elif defined(__NDR_convert__char_rep__int__defined)
#define __NDR_convert__char_rep__Request__rpc_jack_client_open_t__pid__defined
#define __NDR_convert__char_rep__Request__rpc_jack_client_open_t__pid(a, f) \
__NDR_convert__char_rep__int((int *)(a), f)
#elif defined(__NDR_convert__char_rep__JackRPCEngine__int32_t__defined)
#define __NDR_convert__char_rep__Request__rpc_jack_client_open_t__pid__defined
#define __NDR_convert__char_rep__Request__rpc_jack_client_open_t__pid(a, f) \
__NDR_convert__char_rep__JackRPCEngine__int32_t((int32_t *)(a), f)
#elif defined(__NDR_convert__char_rep__int32_t__defined)
#define __NDR_convert__char_rep__Request__rpc_jack_client_open_t__pid__defined
#define __NDR_convert__char_rep__Request__rpc_jack_client_open_t__pid(a, f) \
__NDR_convert__char_rep__int32_t((int32_t *)(a), f)
#endif /* defined(__NDR_convert__*__defined) */
#endif /* __NDR_convert__char_rep__Request__rpc_jack_client_open_t__pid__defined */

#ifndef __NDR_convert__float_rep__Request__rpc_jack_client_open_t__client_name__defined #ifndef __NDR_convert__float_rep__Request__rpc_jack_client_open_t__client_name__defined
#if defined(__NDR_convert__float_rep__JackRPCEngine__client_name_t__defined) #if defined(__NDR_convert__float_rep__JackRPCEngine__client_name_t__defined)
#define __NDR_convert__float_rep__Request__rpc_jack_client_open_t__client_name__defined #define __NDR_convert__float_rep__Request__rpc_jack_client_open_t__client_name__defined
@@ -807,6 +848,26 @@ mig_internal novalue _Xrpc_jack_client_rt_notify
#endif /* defined(__NDR_convert__*__defined) */ #endif /* defined(__NDR_convert__*__defined) */
#endif /* __NDR_convert__float_rep__Request__rpc_jack_client_open_t__client_name__defined */ #endif /* __NDR_convert__float_rep__Request__rpc_jack_client_open_t__client_name__defined */


#ifndef __NDR_convert__float_rep__Request__rpc_jack_client_open_t__pid__defined
#if defined(__NDR_convert__float_rep__JackRPCEngine__int__defined)
#define __NDR_convert__float_rep__Request__rpc_jack_client_open_t__pid__defined
#define __NDR_convert__float_rep__Request__rpc_jack_client_open_t__pid(a, f) \
__NDR_convert__float_rep__JackRPCEngine__int((int *)(a), f)
#elif defined(__NDR_convert__float_rep__int__defined)
#define __NDR_convert__float_rep__Request__rpc_jack_client_open_t__pid__defined
#define __NDR_convert__float_rep__Request__rpc_jack_client_open_t__pid(a, f) \
__NDR_convert__float_rep__int((int *)(a), f)
#elif defined(__NDR_convert__float_rep__JackRPCEngine__int32_t__defined)
#define __NDR_convert__float_rep__Request__rpc_jack_client_open_t__pid__defined
#define __NDR_convert__float_rep__Request__rpc_jack_client_open_t__pid(a, f) \
__NDR_convert__float_rep__JackRPCEngine__int32_t((int32_t *)(a), f)
#elif defined(__NDR_convert__float_rep__int32_t__defined)
#define __NDR_convert__float_rep__Request__rpc_jack_client_open_t__pid__defined
#define __NDR_convert__float_rep__Request__rpc_jack_client_open_t__pid(a, f) \
__NDR_convert__float_rep__int32_t((int32_t *)(a), f)
#endif /* defined(__NDR_convert__*__defined) */
#endif /* __NDR_convert__float_rep__Request__rpc_jack_client_open_t__pid__defined */



mig_internal kern_return_t __MIG_check__Request__rpc_jack_client_open_t(__attribute__((__unused__)) __Request__rpc_jack_client_open_t *In0P) mig_internal kern_return_t __MIG_check__Request__rpc_jack_client_open_t(__attribute__((__unused__)) __Request__rpc_jack_client_open_t *In0P)
{ {
@@ -818,27 +879,39 @@ mig_internal kern_return_t __MIG_check__Request__rpc_jack_client_open_t(__attrib
return MIG_BAD_ARGUMENTS; return MIG_BAD_ARGUMENTS;
#endif /* __MigTypeCheck */ #endif /* __MigTypeCheck */


#if defined(__NDR_convert__int_rep__Request__rpc_jack_client_open_t__client_name__defined)
#if defined(__NDR_convert__int_rep__Request__rpc_jack_client_open_t__client_name__defined) || \
defined(__NDR_convert__int_rep__Request__rpc_jack_client_open_t__pid__defined)
if (In0P->NDR.int_rep != NDR_record.int_rep) { if (In0P->NDR.int_rep != NDR_record.int_rep) {
#if defined(__NDR_convert__int_rep__Request__rpc_jack_client_open_t__client_name__defined) #if defined(__NDR_convert__int_rep__Request__rpc_jack_client_open_t__client_name__defined)
__NDR_convert__int_rep__Request__rpc_jack_client_open_t__client_name(&In0P->client_name, In0P->NDR.int_rep); __NDR_convert__int_rep__Request__rpc_jack_client_open_t__client_name(&In0P->client_name, In0P->NDR.int_rep);
#endif /* __NDR_convert__int_rep__Request__rpc_jack_client_open_t__client_name__defined */ #endif /* __NDR_convert__int_rep__Request__rpc_jack_client_open_t__client_name__defined */
#if defined(__NDR_convert__int_rep__Request__rpc_jack_client_open_t__pid__defined)
__NDR_convert__int_rep__Request__rpc_jack_client_open_t__pid(&In0P->pid, In0P->NDR.int_rep);
#endif /* __NDR_convert__int_rep__Request__rpc_jack_client_open_t__pid__defined */
} }
#endif /* defined(__NDR_convert__int_rep...) */ #endif /* defined(__NDR_convert__int_rep...) */


#if defined(__NDR_convert__char_rep__Request__rpc_jack_client_open_t__client_name__defined)
#if defined(__NDR_convert__char_rep__Request__rpc_jack_client_open_t__client_name__defined) || \
defined(__NDR_convert__char_rep__Request__rpc_jack_client_open_t__pid__defined)
if (In0P->NDR.char_rep != NDR_record.char_rep) { if (In0P->NDR.char_rep != NDR_record.char_rep) {
#if defined(__NDR_convert__char_rep__Request__rpc_jack_client_open_t__client_name__defined) #if defined(__NDR_convert__char_rep__Request__rpc_jack_client_open_t__client_name__defined)
__NDR_convert__char_rep__Request__rpc_jack_client_open_t__client_name(&In0P->client_name, In0P->NDR.char_rep); __NDR_convert__char_rep__Request__rpc_jack_client_open_t__client_name(&In0P->client_name, In0P->NDR.char_rep);
#endif /* __NDR_convert__char_rep__Request__rpc_jack_client_open_t__client_name__defined */ #endif /* __NDR_convert__char_rep__Request__rpc_jack_client_open_t__client_name__defined */
#if defined(__NDR_convert__char_rep__Request__rpc_jack_client_open_t__pid__defined)
__NDR_convert__char_rep__Request__rpc_jack_client_open_t__pid(&In0P->pid, In0P->NDR.char_rep);
#endif /* __NDR_convert__char_rep__Request__rpc_jack_client_open_t__pid__defined */
} }
#endif /* defined(__NDR_convert__char_rep...) */ #endif /* defined(__NDR_convert__char_rep...) */


#if defined(__NDR_convert__float_rep__Request__rpc_jack_client_open_t__client_name__defined)
#if defined(__NDR_convert__float_rep__Request__rpc_jack_client_open_t__client_name__defined) || \
defined(__NDR_convert__float_rep__Request__rpc_jack_client_open_t__pid__defined)
if (In0P->NDR.float_rep != NDR_record.float_rep) { if (In0P->NDR.float_rep != NDR_record.float_rep) {
#if defined(__NDR_convert__float_rep__Request__rpc_jack_client_open_t__client_name__defined) #if defined(__NDR_convert__float_rep__Request__rpc_jack_client_open_t__client_name__defined)
__NDR_convert__float_rep__Request__rpc_jack_client_open_t__client_name(&In0P->client_name, In0P->NDR.float_rep); __NDR_convert__float_rep__Request__rpc_jack_client_open_t__client_name(&In0P->client_name, In0P->NDR.float_rep);
#endif /* __NDR_convert__float_rep__Request__rpc_jack_client_open_t__client_name__defined */ #endif /* __NDR_convert__float_rep__Request__rpc_jack_client_open_t__client_name__defined */
#if defined(__NDR_convert__float_rep__Request__rpc_jack_client_open_t__pid__defined)
__NDR_convert__float_rep__Request__rpc_jack_client_open_t__pid(&In0P->pid, In0P->NDR.float_rep);
#endif /* __NDR_convert__float_rep__Request__rpc_jack_client_open_t__pid__defined */
} }
#endif /* defined(__NDR_convert__float_rep...) */ #endif /* defined(__NDR_convert__float_rep...) */


@@ -859,6 +932,7 @@ kern_return_t server_rpc_jack_client_open
( (
mach_port_t server_port, mach_port_t server_port,
client_name_t client_name, client_name_t client_name,
int pid,
mach_port_t *private_port, mach_port_t *private_port,
int *shared_engine, int *shared_engine,
int *shared_client, int *shared_client,
@@ -878,6 +952,7 @@ mig_internal novalue _Xrpc_jack_client_open
mach_msg_header_t Head; mach_msg_header_t Head;
NDR_record_t NDR; NDR_record_t NDR;
client_name_t client_name; client_name_t client_name;
int pid;
mach_msg_trailer_t trailer; mach_msg_trailer_t trailer;
} Request; } Request;
#ifdef __MigPackStructs #ifdef __MigPackStructs
@@ -928,7 +1003,7 @@ mig_internal novalue _Xrpc_jack_client_open
#endif /* UseStaticTemplates */ #endif /* UseStaticTemplates */




RetCode = server_rpc_jack_client_open(In0P->Head.msgh_request_port, In0P->client_name, &OutP->private_port.name, &OutP->shared_engine, &OutP->shared_client, &OutP->shared_graph, &OutP->result);
RetCode = server_rpc_jack_client_open(In0P->Head.msgh_request_port, In0P->client_name, In0P->pid, &OutP->private_port.name, &OutP->shared_engine, &OutP->shared_client, &OutP->shared_graph, &OutP->result);
if (RetCode != KERN_SUCCESS) { if (RetCode != KERN_SUCCESS) {
MIG_RETURN_ERROR(OutP, RetCode); MIG_RETURN_ERROR(OutP, RetCode);
} }
@@ -6198,7 +6273,7 @@ const struct server_JackRPCEngine_subsystem {
(vm_address_t)0, (vm_address_t)0,
{ {
{ (mig_impl_routine_t) 0, { (mig_impl_routine_t) 0,
(mig_stub_routine_t) _Xrpc_jack_client_open, 7, 0, (routine_arg_descriptor_t)0, (mach_msg_size_t)sizeof(__Reply__rpc_jack_client_open_t)},
(mig_stub_routine_t) _Xrpc_jack_client_open, 8, 0, (routine_arg_descriptor_t)0, (mach_msg_size_t)sizeof(__Reply__rpc_jack_client_open_t)},
{ (mig_impl_routine_t) 0, { (mig_impl_routine_t) 0,
(mig_stub_routine_t) _Xrpc_jack_client_check, 7, 0, (routine_arg_descriptor_t)0, (mach_msg_size_t)sizeof(__Reply__rpc_jack_client_check_t)}, (mig_stub_routine_t) _Xrpc_jack_client_check, 7, 0, (routine_arg_descriptor_t)0, (mach_msg_size_t)sizeof(__Reply__rpc_jack_client_check_t)},
{ (mig_impl_routine_t) 0, { (mig_impl_routine_t) 0,


+ 5
- 1
macosx/RPC/JackRPCEngineUser.c View File

@@ -1,6 +1,6 @@
/* /*
* IDENTIFICATION: * IDENTIFICATION:
* stub generated Fri May 16 09:21:56 2008
* stub generated Wed May 21 10:43:25 2008
* with a MiG generated Tue Feb 19 02:01:43 PST 2008 by root@b75.local * with a MiG generated Tue Feb 19 02:01:43 PST 2008 by root@b75.local
* OPTIONS: * OPTIONS:
*/ */
@@ -475,6 +475,7 @@ mig_external kern_return_t rpc_jack_client_open
( (
mach_port_t server_port, mach_port_t server_port,
client_name_t client_name, client_name_t client_name,
int pid,
mach_port_t *private_port, mach_port_t *private_port,
int *shared_engine, int *shared_engine,
int *shared_client, int *shared_client,
@@ -490,6 +491,7 @@ mig_external kern_return_t rpc_jack_client_open
mach_msg_header_t Head; mach_msg_header_t Head;
NDR_record_t NDR; NDR_record_t NDR;
client_name_t client_name; client_name_t client_name;
int pid;
} Request; } Request;
#ifdef __MigPackStructs #ifdef __MigPackStructs
#pragma pack() #pragma pack()
@@ -561,6 +563,8 @@ mig_external kern_return_t rpc_jack_client_open


(void) mig_strncpy(InP->client_name, client_name, 128); (void) mig_strncpy(InP->client_name, client_name, 128);


InP->pid = pid;

InP->Head.msgh_bits = InP->Head.msgh_bits =
MACH_MSGH_BITS(19, MACH_MSG_TYPE_MAKE_SEND_ONCE); MACH_MSGH_BITS(19, MACH_MSG_TYPE_MAKE_SEND_ONCE);
/* msgh_size passed as argument */ /* msgh_size passed as argument */


+ 1
- 1
windows/JackPortAudioDriver.cpp View File

@@ -656,7 +656,7 @@ extern "C"
playback = TRUE; playback = TRUE;
} }


Jack::JackDriverClientInterface* driver = new Jack::JackPortAudioDriver("portaudio", engine, table);
Jack::JackDriverClientInterface* driver = new Jack::JackPortAudioDriver("system", "portaudio", engine, table);
if (driver->Open(frames_per_interrupt, srate, capture, playback, chan_in, chan_out, monitor, capture_pcm_name, playback_pcm_name, systemic_input_latency, systemic_output_latency) == 0) { if (driver->Open(frames_per_interrupt, srate, capture, playback, chan_in, chan_out, monitor, capture_pcm_name, playback_pcm_name, systemic_input_latency, systemic_output_latency) == 0) {
return driver; return driver;
} else { } else {


+ 2
- 2
windows/JackPortAudioDriver.h View File

@@ -53,8 +53,8 @@ class JackPortAudioDriver : public JackAudioDriver


public: public:


JackPortAudioDriver(const char* name, JackEngine* engine, JackSynchro** table)
: JackAudioDriver(name, engine, table), fStream(NULL), fInputBuffer(NULL), fOutputBuffer(NULL),
JackPortAudioDriver(const char* name, const char* alias, JackEngine* engine, JackSynchro** table)
: JackAudioDriver(name, alias, engine, table), fStream(NULL), fInputBuffer(NULL), fOutputBuffer(NULL),
fInputDevice(paNoDevice), fOutputDevice(paNoDevice) fInputDevice(paNoDevice), fOutputDevice(paNoDevice)
{} {}




+ 2
- 2
windows/JackWinNamedPipeClientChannel.cpp View File

@@ -151,9 +151,9 @@ void JackWinNamedPipeClientChannel::ClientCheck(const char* name, char* name_res
strcpy(name_res, res.fName); strcpy(name_res, res.fName);
} }


void JackWinNamedPipeClientChannel::ClientOpen(const char* name, int* shared_engine, int* shared_client, int* shared_graph, int* result)
void JackWinNamedPipeClientChannel::ClientOpen(const char* name, int pid, int* shared_engine, int* shared_client, int* shared_graph, int* result)
{ {
JackClientOpenRequest req(name);
JackClientOpenRequest req(name, pid);
JackClientOpenResult res; JackClientOpenResult res;
ServerSyncCall(&req, &res, result); ServerSyncCall(&req, &res, result);
*shared_engine = res.fSharedEngine; *shared_engine = res.fSharedEngine;


+ 1
- 1
windows/JackWinNamedPipeClientChannel.h View File

@@ -59,7 +59,7 @@ class JackWinNamedPipeClientChannel : public JackClientChannelInterface, public
int ServerCheck(const char* server_name); int ServerCheck(const char* server_name);


void ClientCheck(const char* name, char* name_res, int protocol, int options, int* status, int* result); void ClientCheck(const char* name, char* name_res, int protocol, int options, int* status, int* result);
void ClientOpen(const char* name, int* shared_engine, int* shared_client, int* shared_graph, int* result);
void ClientOpen(const char* name, int pid, int* shared_engine, int* shared_client, int* shared_graph, int* result);
void ClientClose(int refnum, int* result); void ClientClose(int refnum, int* result);


void ClientActivate(int refnum, int state, int* result); void ClientActivate(int refnum, int state, int* result);


+ 3
- 3
windows/JackWinNamedPipeServerChannel.cpp View File

@@ -122,7 +122,7 @@ bool JackClientPipeThread::HandleRequest()
JackClientOpenRequest req; JackClientOpenRequest req;
JackClientOpenResult res; JackClientOpenResult res;
if (req.Read(fPipe) == 0) if (req.Read(fPipe) == 0)
ClientAdd(req.fName, &res.fSharedEngine, &res.fSharedClient, &res.fSharedGraph, &res.fResult);
ClientAdd(req.fName, req.fPID, &res.fSharedEngine, &res.fSharedClient, &res.fSharedGraph, &res.fResult);
res.Write(fPipe); res.Write(fPipe);
break; break;
} }
@@ -318,11 +318,11 @@ bool JackClientPipeThread::HandleRequest()
return ret; return ret;
} }


void JackClientPipeThread::ClientAdd(char* name, int* shared_engine, int* shared_client, int* shared_graph, int* result)
void JackClientPipeThread::ClientAdd(char* name, int pid, int* shared_engine, int* shared_client, int* shared_graph, int* result)
{ {
jack_log("JackClientPipeThread::ClientAdd %s", name); jack_log("JackClientPipeThread::ClientAdd %s", name);
fRefNum = -1; fRefNum = -1;
*result = fServer->GetEngine()->ClientExternalOpen(name, &fRefNum, shared_engine, shared_client, shared_graph);
*result = fServer->GetEngine()->ClientExternalOpen(name, pid, &fRefNum, shared_engine, shared_client, shared_graph);
} }


void JackClientPipeThread::ClientRemove() void JackClientPipeThread::ClientRemove()


+ 1
- 1
windows/JackWinNamedPipeServerChannel.h View File

@@ -39,7 +39,7 @@ class JackClientPipeThread : public JackRunnableInterface
JackThread* fThread; JackThread* fThread;
int fRefNum; int fRefNum;


void ClientAdd(char* name, int* shared_engine, int* shared_client, int* shared_graph, int* result);
void ClientAdd(char* name, int pid, int* shared_engine, int* shared_client, int* shared_graph, int* result);
void ClientRemove(); void ClientRemove();
void ClientKill(); void ClientKill();




Loading…
Cancel
Save