Browse Source

Experimental system port alias use in WIndows JackRouter.

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@4717 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.9.9.5
sletz 14 years ago
parent
commit
72abd49f1d
7 changed files with 99 additions and 27 deletions
  1. +4
    -0
      ChangeLog
  2. +13
    -0
      macosx/Jackdmp.xcodeproj/project.pbxproj
  3. +58
    -12
      windows/JackRouter/JackRouter.cpp
  4. +4
    -2
      windows/JackRouter/JackRouter.h
  5. +2
    -1
      windows/Setup/JackRouter.ini
  6. +17
    -11
      windows/portaudio/JackPortAudioDriver.cpp
  7. +1
    -1
      windows/portaudio/JackPortAudioDriver.h

+ 4
- 0
ChangeLog View File

@@ -36,6 +36,10 @@ John Emmas
Jackdmp changes log
---------------------------

2012-01-20 Stephane Letz <letz@grame.fr>

* Experimental system port alias use in WIndows JackRouter.

2012-01-19 Stephane Letz <letz@grame.fr>

* Implement shutdown for in server clients.


+ 13
- 0
macosx/Jackdmp.xcodeproj/project.pbxproj View File

@@ -1395,6 +1395,13 @@
remoteGlobalIDString = 4BA7FEB90D8E76270017FF73;
remoteInfo = "jack_control Universal";
};
4BAA1A7514CA08FE003269AD /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 4B35C61F0D4731D2000DE7AE /* jack_portaudio 64 bits */;
remoteInfo = "jack_portaudio 64 bits";
};
4BB492A61372A393005F2601 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
@@ -5161,6 +5168,7 @@
buildRules = (
);
dependencies = (
4BAA1A7614CA08FE003269AD /* PBXTargetDependency */,
);
name = "jack_coreaudio 64 bits";
productName = jack_coreaudio;
@@ -8382,6 +8390,11 @@
target = 4BA7FEB90D8E76270017FF73 /* jack_server_control Universal */;
targetProxy = 4BA7FECC0D8E76810017FF73 /* PBXContainerItemProxy */;
};
4BAA1A7614CA08FE003269AD /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 4B35C61F0D4731D2000DE7AE /* jack_portaudio 64 bits */;
targetProxy = 4BAA1A7514CA08FE003269AD /* PBXContainerItemProxy */;
};
4BB492A71372A393005F2601 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 4B8692821371DB4700D2D11B /* Jacknet.framework 64 bits */;


+ 58
- 12
windows/JackRouter/JackRouter.cpp View File

@@ -199,6 +199,8 @@ JackRouter::JackRouter() : AsioDriver()
fAutoConnectOut = get_private_profile_int("AUTO_CONNECT", "output", 1, confPath.c_str());
fFloatSample = get_private_profile_int("IO", "float-sample", 1, confPath.c_str());
fAliasSystem = get_private_profile_int("AUTO_CONNECT", "alias", 1, confPath.c_str());
FreeLibrary(handle);
@@ -300,7 +302,13 @@ static inline jack_default_audio_sample_t ClipFloat(jack_default_audio_sample_t
}
//------------------------------------------------------------------------------------------
void JackRouter::shutdown(void* arg)
void JackRouter::connectCallback(jack_port_id_t a, jack_port_id_t b, int connect, void* arg)
{
JackRouter* driver = (JackRouter*)arg;
}
//------------------------------------------------------------------------------------------
void JackRouter::shutdownCallback(void* arg)
{
JackRouter* driver = (JackRouter*)arg;
/*
@@ -312,7 +320,7 @@ void JackRouter::shutdown(void* arg)
}
//------------------------------------------------------------------------------------------
int JackRouter::process(jack_nframes_t nframes, void* arg)
int JackRouter::processCallback(jack_nframes_t nframes, void* arg)
{
JackRouter* driver = (JackRouter*)arg;
int i,j;
@@ -400,8 +408,10 @@ ASIOBool JackRouter::init(void* sysRef)
fBufferSize = jack_get_buffer_size(fClient);
fSampleRate = jack_get_sample_rate(fClient);
jack_set_process_callback(fClient, process, this);
jack_on_shutdown(fClient, shutdown, this);
jack_set_process_callback(fClient, processCallback, this);
jack_on_shutdown(fClient, shutdownCallback, this);
jack_set_port_connect_callback(fClient, connectCallback, this);
fInputLatency = fBufferSize; // typically
fOutputLatency = fBufferSize * 2;
@@ -566,8 +576,18 @@ ASIOError JackRouter::getChannelInfo(ASIOChannelInfo *info)
break;
}
}
_snprintf(buf, sizeof(buf) - 1, "In%d ", info->channel);
strcpy(info->name, buf);
jack_port_t* port = fInputPorts[i];
char* aliases[2];
// A alias on system is wanted
if (fAliasSystem && jack_port_get_aliases(port, aliases) == 2) {
strncpy(info->name, aliases[1], 32);
} else {
_snprintf(buf, sizeof(buf) - 1, "In%d ", info->channel);
strcpy(info->name, buf);
}
} else {
for (i = 0; i < fActiveOutputs; i++) {
if (fOutMap[i] == info->channel) {
@@ -575,9 +595,19 @@ ASIOError JackRouter::getChannelInfo(ASIOChannelInfo *info)
break;
}
}
_snprintf(buf, sizeof(buf) - 1, "Out%d ", info->channel);
strcpy(info->name, buf);
}
jack_port_t* port = fOutputPorts[i];
char* aliases[2];
// A alias on system is wanted
if (fAliasSystem && jack_port_get_aliases(port, aliases) == 2) {
strncpy(info->name, aliases[1], 32);
} else {
_snprintf(buf, sizeof(buf) - 1, "Out%d ", info->channel);
strcpy(info->name, buf);
}
}
return ASE_OK;
}
@@ -746,7 +776,7 @@ void JackRouter::bufferSwitch()
//---------------------------------------------------------------------------------------------
// asio2 buffer switch
void JackRouter::bufferSwitchX ()
void JackRouter::bufferSwitchX()
{
getSamplePosition (&fAsioTime.timeInfo.samplePosition, &fAsioTime.timeInfo.systemTime);
long offset = fToggle ? fBufferSize : 0;
@@ -846,7 +876,15 @@ void JackRouter::AutoConnect()
break;
} else if (jack_connect(fClient, ports[ASIO_channel], jack_port_name(fInputPorts[i])) != 0) {
printf("Cannot connect input ports\n");
}
} else if (fAliasSystem) {
jack_port_t* input_port = jack_port_by_name(fClient, ports[ASIO_channel]);
if (input_port) {
char* aliases[2];
if (jack_port_get_aliases(input_port, aliases) == 2) {
jack_port_set_alias(fInputPorts[i], aliases[1]);
}
}
}
}
}
jack_free(ports);
@@ -871,7 +909,15 @@ void JackRouter::AutoConnect()
break;
} else if (jack_connect(fClient, jack_port_name(fOutputPorts[i]), ports[ASIO_channel]) != 0) {
printf("Cannot connect output ports\n");
}
} else if (fAliasSystem) {
jack_port_t* output_port = jack_port_by_name(fClient, ports[ASIO_channel]);
if (output_port) {
char* aliases[2];
if (jack_port_get_aliases(output_port, aliases) == 2) {
jack_port_set_alias(fOutputPorts[i], aliases[1]);
}
}
}
}
}
jack_free(ports);


+ 4
- 2
windows/JackRouter/JackRouter.h View File

@@ -84,8 +84,9 @@ public:
~JackRouter();
#endif
static int process(jack_nframes_t nframes, void* arg);
static void shutdown(void* arg);
static int processCallback(jack_nframes_t nframes, void* arg);
static void connectCallback(jack_port_id_t a, jack_port_id_t b, int connect, void* arg);
static void shutdownCallback(void* arg);
ASIOBool init(void* sysRef);
void getDriverName(char *name); // max 32 bytes incl. terminating zero
@@ -146,6 +147,7 @@ private:
long fMilliSeconds;
bool fActive, fStarted;
bool fFloatSample;
bool fAliasSystem;
bool fTimeInfoMode, fTcRead;
char fErrorMessage[128];


+ 2
- 1
windows/Setup/JackRouter.ini View File

@@ -5,4 +5,5 @@ float-sample=1
[AUTO_CONNECT]
input=1
output=1
output=1
alias=1

+ 17
- 11
windows/portaudio/JackPortAudioDriver.cpp View File

@@ -248,30 +248,36 @@ int JackPortAudioDriver::Close()
return res;
}

/*
int JackPortAudioDriver::Attach()
{
if (JackAudioDriver::Attach() == 0) {
char alias[REAL_JACK_PORT_NAME_SIZE];
char* alias;
for (int i = 0; i < fCaptureChannels; i++) {
snprintf(alias, sizeof(alias), "%s:out%d", fPaDevices->GetDeviceName(fInputDevice).c_str(), i + 1);
JackPort* port = fGraphManager->GetPort(fCapturePortList[i]);
port->SetAlias(alias);
if (fPaDevices->GetHostFromDevice(fInputDevice) == "ASIO")
for (int i = 0; i < fCaptureChannels; i++) {
PaError err = PaAsio_GetInputChannelName(fInputDevice, i, &alias);
if (err == paNoError) {
JackPort* port = fGraphManager->GetPort(fCapturePortList[i]);
port->SetAlias(alias);
}
}
}
for (int i = 0; i < fPlaybackChannels; i++) {
snprintf(alias, sizeof(alias), "%s:in%d", fPaDevices->GetDeviceName(fOutputDevice).c_str(), i + 1);
JackPort* port = fGraphManager->GetPort(fPlaybackPortList[i]);
port->SetAlias(alias);
if (fPaDevices->GetHostFromDevice(fOutputDevice) == "ASIO")
for (int i = 0; i < fPlaybackChannels; i++) {
PaError err = PaAsio_GetInputChannelName(fOutputDevice, i, &alias);
if (err == paNoError) {
JackPort* port = fGraphManager->GetPort(fPlaybackPortList[i]);
port->SetAlias(alias);
}
}
}
} else {
return -1;
}
}
*/

int JackPortAudioDriver::Start()
{


+ 1
- 1
windows/portaudio/JackPortAudioDriver.h View File

@@ -80,7 +80,7 @@ class JackPortAudioDriver : public JackMMCSS, public JackAudioDriver

int Close();
//int Attach();
int Attach();

int Start();
int Stop();


Loading…
Cancel
Save