|
|
@@ -1973,7 +1973,7 @@ unsigned int RtApiJack :: getDeviceCount( void ) |
|
|
|
const char **ports; |
|
|
|
std::string port, previousPort; |
|
|
|
unsigned int nChannels = 0, nDevices = 0; |
|
|
|
ports = jack_get_ports( client, NULL, NULL, 0 ); |
|
|
|
ports = jack_get_ports( client, NULL, JACK_DEFAULT_AUDIO_TYPE, 0 ); |
|
|
|
if ( ports ) { |
|
|
|
// Parse the port names up to the first colon (:). |
|
|
|
size_t iColon = 0; |
|
|
@@ -2012,7 +2012,7 @@ RtAudio::DeviceInfo RtApiJack :: getDeviceInfo( unsigned int device ) |
|
|
|
const char **ports; |
|
|
|
std::string port, previousPort; |
|
|
|
unsigned int nPorts = 0, nDevices = 0; |
|
|
|
ports = jack_get_ports( client, NULL, NULL, 0 ); |
|
|
|
ports = jack_get_ports( client, NULL, JACK_DEFAULT_AUDIO_TYPE, 0 ); |
|
|
|
if ( ports ) { |
|
|
|
// Parse the port names up to the first colon (:). |
|
|
|
size_t iColon = 0; |
|
|
@@ -2047,7 +2047,7 @@ RtAudio::DeviceInfo RtApiJack :: getDeviceInfo( unsigned int device ) |
|
|
|
// Count the available ports containing the client name as device |
|
|
|
// channels. Jack "input ports" equal RtAudio output channels. |
|
|
|
unsigned int nChannels = 0; |
|
|
|
ports = jack_get_ports( client, info.name.c_str(), NULL, JackPortIsInput ); |
|
|
|
ports = jack_get_ports( client, info.name.c_str(), JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput ); |
|
|
|
if ( ports ) { |
|
|
|
while ( ports[ nChannels ] ) nChannels++; |
|
|
|
free( ports ); |
|
|
@@ -2056,7 +2056,7 @@ RtAudio::DeviceInfo RtApiJack :: getDeviceInfo( unsigned int device ) |
|
|
|
|
|
|
|
// Jack "output ports" equal RtAudio input channels. |
|
|
|
nChannels = 0; |
|
|
|
ports = jack_get_ports( client, info.name.c_str(), NULL, JackPortIsOutput ); |
|
|
|
ports = jack_get_ports( client, info.name.c_str(), JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput ); |
|
|
|
if ( ports ) { |
|
|
|
while ( ports[ nChannels ] ) nChannels++; |
|
|
|
free( ports ); |
|
|
@@ -2168,7 +2168,7 @@ bool RtApiJack :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigne |
|
|
|
const char **ports; |
|
|
|
std::string port, previousPort, deviceName; |
|
|
|
unsigned int nPorts = 0, nDevices = 0; |
|
|
|
ports = jack_get_ports( client, NULL, NULL, 0 ); |
|
|
|
ports = jack_get_ports( client, NULL, JACK_DEFAULT_AUDIO_TYPE, 0 ); |
|
|
|
if ( ports ) { |
|
|
|
// Parse the port names up to the first colon (:). |
|
|
|
size_t iColon = 0; |
|
|
@@ -2192,22 +2192,24 @@ bool RtApiJack :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigne |
|
|
|
return FAILURE; |
|
|
|
} |
|
|
|
|
|
|
|
// Count the available ports containing the client name as device |
|
|
|
// channels. Jack "input ports" equal RtAudio output channels. |
|
|
|
unsigned int nChannels = 0; |
|
|
|
unsigned long flag = JackPortIsInput; |
|
|
|
if ( mode == INPUT ) flag = JackPortIsOutput; |
|
|
|
ports = jack_get_ports( client, deviceName.c_str(), NULL, flag ); |
|
|
|
if ( ports ) { |
|
|
|
while ( ports[ nChannels ] ) nChannels++; |
|
|
|
free( ports ); |
|
|
|
} |
|
|
|
|
|
|
|
// Compare the jack ports for specified client to the requested number of channels. |
|
|
|
if ( nChannels < (channels + firstChannel) ) { |
|
|
|
errorStream_ << "RtApiJack::probeDeviceOpen: requested number of channels (" << channels << ") + offset (" << firstChannel << ") not found for specified device (" << device << ":" << deviceName << ")."; |
|
|
|
errorText_ = errorStream_.str(); |
|
|
|
return FAILURE; |
|
|
|
if ( ! (options && (options->flags & RTAUDIO_JACK_DONT_CONNECT)) ) { |
|
|
|
// Count the available ports containing the client name as device |
|
|
|
// channels. Jack "input ports" equal RtAudio output channels. |
|
|
|
unsigned int nChannels = 0; |
|
|
|
ports = jack_get_ports( client, deviceName.c_str(), JACK_DEFAULT_AUDIO_TYPE, flag ); |
|
|
|
if ( ports ) { |
|
|
|
while ( ports[ nChannels ] ) nChannels++; |
|
|
|
free( ports ); |
|
|
|
} |
|
|
|
// Compare the jack ports for specified client to the requested number of channels. |
|
|
|
if ( nChannels < (channels + firstChannel) ) { |
|
|
|
errorStream_ << "RtApiJack::probeDeviceOpen: requested number of channels (" << channels << ") + offset (" << firstChannel << ") not found for specified device (" << device << ":" << deviceName << ")."; |
|
|
|
errorText_ = errorStream_.str(); |
|
|
|
return FAILURE; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// Check the jack server sample rate. |
|
|
@@ -2221,7 +2223,7 @@ bool RtApiJack :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigne |
|
|
|
stream_.sampleRate = jackRate; |
|
|
|
|
|
|
|
// Get the latency of the JACK port. |
|
|
|
ports = jack_get_ports( client, deviceName.c_str(), NULL, flag ); |
|
|
|
ports = jack_get_ports( client, deviceName.c_str(), JACK_DEFAULT_AUDIO_TYPE, flag ); |
|
|
|
if ( ports[ firstChannel ] ) { |
|
|
|
// Added by Ge Wang |
|
|
|
jack_latency_callback_mode_t cbmode = (mode == INPUT ? JackCaptureLatency : JackPlaybackLatency); |
|
|
@@ -2453,7 +2455,7 @@ void RtApiJack :: startStream( void ) |
|
|
|
// Get the list of available ports. |
|
|
|
if ( shouldAutoconnect_ && (stream_.mode == OUTPUT || stream_.mode == DUPLEX) ) { |
|
|
|
result = 1; |
|
|
|
ports = jack_get_ports( handle->client, handle->deviceName[0].c_str(), NULL, JackPortIsInput); |
|
|
|
ports = jack_get_ports( handle->client, handle->deviceName[0].c_str(), JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput); |
|
|
|
if ( ports == NULL) { |
|
|
|
errorText_ = "RtApiJack::startStream(): error determining available JACK input ports!"; |
|
|
|
goto unlock; |
|
|
@@ -2477,7 +2479,7 @@ void RtApiJack :: startStream( void ) |
|
|
|
|
|
|
|
if ( shouldAutoconnect_ && (stream_.mode == INPUT || stream_.mode == DUPLEX) ) { |
|
|
|
result = 1; |
|
|
|
ports = jack_get_ports( handle->client, handle->deviceName[1].c_str(), NULL, JackPortIsOutput ); |
|
|
|
ports = jack_get_ports( handle->client, handle->deviceName[1].c_str(), JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput ); |
|
|
|
if ( ports == NULL) { |
|
|
|
errorText_ = "RtApiJack::startStream(): error determining available JACK output ports!"; |
|
|
|
goto unlock; |
|
|
|