From b01329815ca8f18673ecfea57d2166aabf116bd3 Mon Sep 17 00:00:00 2001 From: sletz Date: Thu, 21 Apr 2011 10:18:35 +0000 Subject: [PATCH 1/9] Fix crash bug in JackWinMMEInputPort constructor. git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@4340 0c269be4-1314-0410-8aa9-9f06e86f4224 --- windows/jackd.workspace | 4 ++-- windows/winmme/JackWinMMEInputPort.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/windows/jackd.workspace b/windows/jackd.workspace index 238330ab..57ed4640 100644 --- a/windows/jackd.workspace +++ b/windows/jackd.workspace @@ -18,13 +18,13 @@ - + - + diff --git a/windows/winmme/JackWinMMEInputPort.cpp b/windows/winmme/JackWinMMEInputPort.cpp index c2895b64..ae4c4927 100644 --- a/windows/winmme/JackWinMMEInputPort.cpp +++ b/windows/winmme/JackWinMMEInputPort.cpp @@ -66,7 +66,7 @@ JackWinMMEInputPort::JackWinMMEInputPort(const char *alias_name, } sysex_header.dwBufferLength = max_bytes; sysex_header.dwFlags = 0; - sysex_header.lpData = (LPSTR)(((LPBYTE) &sysex_header) + sizeof(MIDIHDR)); + sysex_header.lpData = (LPSTR)sysex_buffer; result = midiInPrepareHeader(handle, &sysex_header, sizeof(MIDIHDR)); if (result != MMSYSERR_NOERROR) { GetInErrorString(result, error_message); From 536f482ca2045d0a4aece1b80fbe4d26ce68a733 Mon Sep 17 00:00:00 2001 From: sletz Date: Thu, 21 Apr 2011 11:08:24 +0000 Subject: [PATCH 2/9] Change JackRouter licence. git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@4341 0c269be4-1314-0410-8aa9-9f06e86f4224 --- windows/JackRouter/JackRouter.cpp | 35 +++++++++++++++------------ windows/JackRouter/JackRouter.h | 40 +++++++++++++++---------------- 2 files changed, 40 insertions(+), 35 deletions(-) diff --git a/windows/JackRouter/JackRouter.cpp b/windows/JackRouter/JackRouter.cpp index 6245cfc7..9f6f6b3f 100644 --- a/windows/JackRouter/JackRouter.cpp +++ b/windows/JackRouter/JackRouter.cpp @@ -1,19 +1,24 @@ /* -Copyright (C) 2006 Grame - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + Copyright (C) 2006-2011 Grame + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files + (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, + publish, distribute, sublicense, and/or sell copies of the Software, + and to permit persons to whom the Software is furnished to do so, + subject to the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ diff --git a/windows/JackRouter/JackRouter.h b/windows/JackRouter/JackRouter.h index bf5d44c8..154acfd2 100644 --- a/windows/JackRouter/JackRouter.h +++ b/windows/JackRouter/JackRouter.h @@ -1,19 +1,24 @@ /* -Copyright (C) 2006 Grame - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + Copyright (C) 2006-2011 Grame + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files + (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, + publish, distribute, sublicense, and/or sell copies of the Software, + and to permit persons to whom the Software is furnished to do so, + subject to the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ @@ -22,13 +27,11 @@ Copyright (C) 2006 Grame #include "asiosys.h" - // Globals static int kBlockFrames = 256; static int kNumInputs = 4; static int kNumOutputs = 4; - #if WINDOWS #include "jack.h" @@ -44,9 +47,7 @@ static int kNumOutputs = 4; #include "iasiodrv.h" #define MAX_PORTS 32 - #define LONG_SAMPLE 1 - #define PATH_SEP "\\" #include @@ -77,7 +78,6 @@ public: #include "asiodrvr.h" - //--------------------------------------------------------------------------------------------- class JackRouter : public AsioDriver { From 63068b8231471515d1c903151d77605fbc0b4754 Mon Sep 17 00:00:00 2001 From: sletz Date: Thu, 21 Apr 2011 13:10:47 +0000 Subject: [PATCH 3/9] Cleanup. git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@4342 0c269be4-1314-0410-8aa9-9f06e86f4224 --- common/JackPort.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/common/JackPort.cpp b/common/JackPort.cpp index 870d6ee8..8e3be740 100644 --- a/common/JackPort.cpp +++ b/common/JackPort.cpp @@ -44,6 +44,7 @@ bool JackPort::Allocate(int refnum, const char* port_name, const char* port_type fInUse = true; fLatency = 0; fTotalLatency = 0; + fMonitorRequests = 0; fPlaybackLatency.min = fPlaybackLatency.max = 0; fCaptureLatency.min = fCaptureLatency.max = 0; fTied = NO_PORT; @@ -65,6 +66,8 @@ void JackPort::Release() fLatency = 0; fTotalLatency = 0; fMonitorRequests = 0; + fPlaybackLatency.min = fPlaybackLatency.max = 0; + fCaptureLatency.min = fCaptureLatency.max = 0; fTied = NO_PORT; fAlias1[0] = '\0'; fAlias2[0] = '\0'; @@ -107,7 +110,7 @@ void JackPort::SetLatencyRange(jack_latency_callback_mode_t mode, jack_latency_r if (mode == JackCaptureLatency) { fCaptureLatency = *range; - /* hack to set port->shared->latency up for + /* hack to set latency up for * backend ports */ if ((fFlags & JackPortIsOutput) && (fFlags & JackPortIsPhysical)) @@ -115,7 +118,7 @@ void JackPort::SetLatencyRange(jack_latency_callback_mode_t mode, jack_latency_r } else { fPlaybackLatency = *range; - /* hack to set port->shared->latency up for + /* hack to set latency up for * backend ports */ if ((fFlags & JackPortIsInput) && (fFlags & JackPortIsPhysical)) From 1baad523756748a46742d2b9debd0665876e348b Mon Sep 17 00:00:00 2001 From: sletz Date: Thu, 21 Apr 2011 14:12:37 +0000 Subject: [PATCH 4/9] Activate CELT encoding in JackNetDriver. git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@4343 0c269be4-1314-0410-8aa9-9f06e86f4224 --- common/JackNetDriver.cpp | 415 ++++++++++++++++++++------------------- common/JackNetDriver.h | 12 +- 2 files changed, 218 insertions(+), 209 deletions(-) diff --git a/common/JackNetDriver.cpp b/common/JackNetDriver.cpp index 8bc2ede8..fb004e17 100644 --- a/common/JackNetDriver.cpp +++ b/common/JackNetDriver.cpp @@ -27,22 +27,28 @@ using namespace std; namespace Jack { - JackNetDriver::JackNetDriver ( const char* name, const char* alias, JackLockedEngine* engine, JackSynchro* table, - const char* ip, int port, int mtu, int midi_input_ports, int midi_output_ports, - char* net_name, uint transport_sync, char network_mode ) - : JackAudioDriver ( name, alias, engine, table ), JackNetSlaveInterface ( ip, port ) + JackNetDriver::JackNetDriver(const char* name, const char* alias, JackLockedEngine* engine, JackSynchro* table, + const char* ip, int port, int mtu, int midi_input_ports, int midi_output_ports, + char* net_name, uint transport_sync, char network_mode, int celt_encoding) + : JackAudioDriver(name, alias, engine, table), JackNetSlaveInterface(ip, port) { - jack_log ( "JackNetDriver::JackNetDriver ip %s, port %d", ip, port ); + jack_log("JackNetDriver::JackNetDriver ip %s, port %d", ip, port); // Use the hostname if no name parameter was given - if ( strcmp ( net_name, "" ) == 0 ) - GetHostName ( net_name, JACK_CLIENT_NAME_SIZE ); + if (strcmp(net_name, "") == 0) + GetHostName(net_name, JACK_CLIENT_NAME_SIZE); fParams.fMtu = mtu; fParams.fSendMidiChannels = midi_input_ports; fParams.fReturnMidiChannels = midi_output_ports; - strcpy ( fParams.fName, net_name ); - fSocket.GetName ( fParams.fSlaveNetName ); + if (celt_encoding > 0) { + fParams.fSampleEncoder = JackCeltEncoder; + fParams.fKBps = celt_encoding; + } else { + fParams.fSampleEncoder = JackFloatEncoder; + } + strcpy(fParams.fName, net_name); + fSocket.GetName(fParams.fSlaveNetName); fParams.fTransportSync = transport_sync; fParams.fNetworkMode = network_mode; fSendTransportData.fState = -1; @@ -67,30 +73,28 @@ namespace Jack } //open, close, attach and detach------------------------------------------------------ - int JackNetDriver::Open ( jack_nframes_t buffer_size, jack_nframes_t samplerate, bool capturing, bool playing, - int inchannels, int outchannels, bool monitor, - const char* capture_driver_name, const char* playback_driver_name, - jack_nframes_t capture_latency, jack_nframes_t playback_latency ) + int JackNetDriver::Open(jack_nframes_t buffer_size, jack_nframes_t samplerate, bool capturing, bool playing, + int inchannels, int outchannels, bool monitor, + const char* capture_driver_name, const char* playback_driver_name, + jack_nframes_t capture_latency, jack_nframes_t playback_latency) { - if ( JackAudioDriver::Open ( buffer_size, - samplerate, - capturing, - playing, - inchannels, - outchannels, - monitor, - capture_driver_name, - playback_driver_name, - capture_latency, - playback_latency ) == 0 ) + if (JackAudioDriver::Open(buffer_size, + samplerate, + capturing, + playing, + inchannels, + outchannels, + monitor, + capture_driver_name, + playback_driver_name, + capture_latency, + playback_latency) == 0) { fEngineControl->fPeriod = 0; fEngineControl->fComputation = 500 * 1000; fEngineControl->fConstraint = 500 * 1000; return 0; - } - else - { + } else { return -1; } } @@ -98,7 +102,7 @@ namespace Jack int JackNetDriver::Close() { #ifdef JACK_MONITOR - if ( fNetTimeMon ) + if (fNetTimeMon) fNetTimeMon->Save(); #endif FreeAll(); @@ -139,8 +143,8 @@ namespace Jack fParams.fSlaveSyncMode = fEngineControl->fSyncMode; //display some additional infos - jack_info ( "NetDriver started in %s mode %s Master's transport sync.", - ( fParams.fSlaveSyncMode ) ? "sync" : "async", ( fParams.fTransportSync ) ? "with" : "without" ); + jack_info("NetDriver started in %s mode %s Master's transport sync.", + (fParams.fSlaveSyncMode) ? "sync" : "async", (fParams.fTransportSync) ? "with" : "without"); //init network if (!JackNetSlaveInterface::Init()) { @@ -150,7 +154,7 @@ namespace Jack //set global parameters if (!SetParams()) { - jack_error("SetParams error..." ); + jack_error("SetParams error..."); return false; } @@ -185,48 +189,48 @@ namespace Jack #ifdef JACK_MONITOR string plot_name; //NetTimeMon - plot_name = string ( fParams.fName ); - plot_name += string ( "_slave" ); - plot_name += ( fEngineControl->fSyncMode ) ? string ( "_sync" ) : string ( "_async" ); - switch ( fParams.fNetworkMode ) + plot_name = string(fParams.fName); + plot_name += string("_slave"); + plot_name += (fEngineControl->fSyncMode) ? string("_sync") : string("_async"); + switch (fParams.fNetworkMode) { case 's' : - plot_name += string ( "_slow" ); + plot_name += string("_slow"); break; case 'n' : - plot_name += string ( "_normal" ); + plot_name += string("_normal"); break; case 'f' : - plot_name += string ( "_fast" ); + plot_name += string("_fast"); break; } - fNetTimeMon = new JackGnuPlotMonitor ( 128, 5, plot_name ); + fNetTimeMon = new JackGnuPlotMonitor(128, 5, plot_name); string net_time_mon_fields[] = { - string ( "sync decoded" ), - string ( "end of read" ), - string ( "start of write" ), - string ( "sync send" ), - string ( "end of write" ) + string("sync decoded"), + string("end of read"), + string("start of write"), + string("sync send"), + string("end of write") }; string net_time_mon_options[] = { - string ( "set xlabel \"audio cycles\"" ), - string ( "set ylabel \"% of audio cycle\"" ) + string("set xlabel \"audio cycles\""), + string("set ylabel \"% of audio cycle\"") }; - fNetTimeMon->SetPlotFile ( net_time_mon_options, 2, net_time_mon_fields, 5 ); + fNetTimeMon->SetPlotFile(net_time_mon_options, 2, net_time_mon_fields, 5); #endif //driver parametering - JackAudioDriver::SetBufferSize ( fParams.fPeriodSize ); - JackAudioDriver::SetSampleRate ( fParams.fSampleRate ); + JackAudioDriver::SetBufferSize(fParams.fPeriodSize); + JackAudioDriver::SetSampleRate(fParams.fSampleRate); - JackDriver::NotifyBufferSize ( fParams.fPeriodSize ); - JackDriver::NotifySampleRate ( fParams.fSampleRate ); + JackDriver::NotifyBufferSize(fParams.fPeriodSize); + JackDriver::NotifySampleRate(fParams.fSampleRate); //transport engine parametering - fEngineControl->fTransport.SetNetworkSync ( fParams.fTransportSync ); + fEngineControl->fTransport.SetNetworkSync(fParams.fTransportSync); return true; } @@ -261,7 +265,7 @@ namespace Jack //jack ports and buffers-------------------------------------------------------------- int JackNetDriver::AllocPorts() { - jack_log ( "JackNetDriver::AllocPorts fBufferSize = %ld fSampleRate = %ld", fEngineControl->fBufferSize, fEngineControl->fSampleRate ); + jack_log("JackNetDriver::AllocPorts fBufferSize = %ld fSampleRate = %ld", fEngineControl->fBufferSize, fEngineControl->fSampleRate); JackPort* port; jack_port_id_t port_id; @@ -274,39 +278,39 @@ namespace Jack //audio port_flags = JackPortIsOutput | JackPortIsPhysical | JackPortIsTerminal; - for ( audio_port_index = 0; audio_port_index < fCaptureChannels; audio_port_index++ ) + for (audio_port_index = 0; audio_port_index < fCaptureChannels; audio_port_index++) { - snprintf ( alias, sizeof ( alias ) - 1, "%s:%s:out%d", fAliasName, fCaptureDriverName, audio_port_index + 1 ); - snprintf ( name, sizeof ( name ) - 1, "%s:capture_%d", fClientControl.fName, audio_port_index + 1 ); - if ( ( port_id = fGraphManager->AllocatePort ( fClientControl.fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, - static_cast ( port_flags ), fEngineControl->fBufferSize ) ) == NO_PORT ) + snprintf(alias, sizeof(alias) - 1, "%s:%s:out%d", fAliasName, fCaptureDriverName, audio_port_index + 1); + snprintf(name, sizeof(name) - 1, "%s:capture_%d", fClientControl.fName, audio_port_index + 1); + if ((port_id = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, + static_cast(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; } - port = fGraphManager->GetPort ( port_id ); - port->SetAlias ( alias ); + port = fGraphManager->GetPort(port_id); + port->SetAlias(alias); //port latency range.min = range.max = fEngineControl->fBufferSize; port->SetLatencyRange(JackCaptureLatency, &range); fCapturePortList[audio_port_index] = port_id; - jack_log ( "JackNetDriver::AllocPorts() fCapturePortList[%d] audio_port_index = %ld fPortLatency = %ld", audio_port_index, port_id, port->GetLatency() ); + jack_log("JackNetDriver::AllocPorts() fCapturePortList[%d] audio_port_index = %ld fPortLatency = %ld", audio_port_index, port_id, port->GetLatency()); } port_flags = JackPortIsInput | JackPortIsPhysical | JackPortIsTerminal; - for ( audio_port_index = 0; audio_port_index < fPlaybackChannels; audio_port_index++ ) + for (audio_port_index = 0; audio_port_index < fPlaybackChannels; audio_port_index++) { - snprintf ( alias, sizeof ( alias ) - 1, "%s:%s:in%d", fAliasName, fPlaybackDriverName, audio_port_index + 1 ); - snprintf ( name, sizeof ( name ) - 1, "%s:playback_%d",fClientControl.fName, audio_port_index + 1 ); - if ( ( port_id = fGraphManager->AllocatePort ( fClientControl.fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, - static_cast ( port_flags ), fEngineControl->fBufferSize ) ) == NO_PORT ) + snprintf(alias, sizeof(alias) - 1, "%s:%s:in%d", fAliasName, fPlaybackDriverName, audio_port_index + 1); + snprintf(name, sizeof(name) - 1, "%s:playback_%d",fClientControl.fName, audio_port_index + 1); + if ((port_id = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, + static_cast(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; } - port = fGraphManager->GetPort ( port_id ); - port->SetAlias ( alias ); + port = fGraphManager->GetPort(port_id); + port->SetAlias(alias); //port latency - switch ( fParams.fNetworkMode ) + switch (fParams.fNetworkMode) { case 'f' : range.min = range.max = (fEngineControl->fSyncMode) ? 0 : fEngineControl->fBufferSize; @@ -320,42 +324,42 @@ namespace Jack } port->SetLatencyRange(JackPlaybackLatency, &range); fPlaybackPortList[audio_port_index] = port_id; - jack_log ( "JackNetDriver::AllocPorts() fPlaybackPortList[%d] audio_port_index = %ld fPortLatency = %ld", audio_port_index, port_id, port->GetLatency() ); + jack_log("JackNetDriver::AllocPorts() fPlaybackPortList[%d] audio_port_index = %ld fPortLatency = %ld", audio_port_index, port_id, port->GetLatency()); } //midi port_flags = JackPortIsOutput | JackPortIsPhysical | JackPortIsTerminal; - for ( midi_port_index = 0; midi_port_index < fParams.fSendMidiChannels; midi_port_index++ ) + for (midi_port_index = 0; midi_port_index < fParams.fSendMidiChannels; midi_port_index++) { - snprintf ( alias, sizeof ( alias ) - 1, "%s:%s:out%d", fAliasName, fCaptureDriverName, midi_port_index + 1 ); - snprintf ( name, sizeof ( name ) - 1, "%s:midi_capture_%d", fClientControl.fName, midi_port_index + 1 ); - if ( ( port_id = fGraphManager->AllocatePort ( fClientControl.fRefNum, name, JACK_DEFAULT_MIDI_TYPE, - static_cast ( port_flags ), fEngineControl->fBufferSize ) ) == NO_PORT ) + snprintf(alias, sizeof(alias) - 1, "%s:%s:out%d", fAliasName, fCaptureDriverName, midi_port_index + 1); + snprintf(name, sizeof (name) - 1, "%s:midi_capture_%d", fClientControl.fName, midi_port_index + 1); + if ((port_id = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_MIDI_TYPE, + static_cast(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; } - port = fGraphManager->GetPort ( port_id ); + port = fGraphManager->GetPort(port_id); //port latency range.min = range.max = fEngineControl->fBufferSize; port->SetLatencyRange(JackCaptureLatency, &range); fMidiCapturePortList[midi_port_index] = port_id; - jack_log ( "JackNetDriver::AllocPorts() fMidiCapturePortList[%d] midi_port_index = %ld fPortLatency = %ld", midi_port_index, port_id, port->GetLatency() ); + jack_log("JackNetDriver::AllocPorts() fMidiCapturePortList[%d] midi_port_index = %ld fPortLatency = %ld", midi_port_index, port_id, port->GetLatency()); } port_flags = JackPortIsInput | JackPortIsPhysical | JackPortIsTerminal; - for ( midi_port_index = 0; midi_port_index < fParams.fReturnMidiChannels; midi_port_index++ ) + for (midi_port_index = 0; midi_port_index < fParams.fReturnMidiChannels; midi_port_index++) { - snprintf ( alias, sizeof ( alias ) - 1, "%s:%s:in%d", fAliasName, fPlaybackDriverName, midi_port_index + 1 ); - snprintf ( name, sizeof ( name ) - 1, "%s:midi_playback_%d", fClientControl.fName, midi_port_index + 1 ); - if ( ( port_id = fGraphManager->AllocatePort ( fClientControl.fRefNum, name, JACK_DEFAULT_MIDI_TYPE, - static_cast ( port_flags ), fEngineControl->fBufferSize ) ) == NO_PORT ) + snprintf(alias, sizeof(alias) - 1, "%s:%s:in%d", fAliasName, fPlaybackDriverName, midi_port_index + 1); + snprintf(name, sizeof(name) - 1, "%s:midi_playback_%d", fClientControl.fName, midi_port_index + 1); + if ((port_id = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_MIDI_TYPE, + static_cast(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; } - port = fGraphManager->GetPort ( port_id ); + port = fGraphManager->GetPort(port_id); //port latency - switch ( fParams.fNetworkMode ) + switch (fParams.fNetworkMode) { case 'f' : range.min = range.max = (fEngineControl->fSyncMode) ? 0 : fEngineControl->fBufferSize; @@ -369,7 +373,7 @@ namespace Jack } port->SetLatencyRange(JackPlaybackLatency, &range); fMidiPlaybackPortList[midi_port_index] = port_id; - jack_log ( "JackNetDriver::AllocPorts() fMidiPlaybackPortList[%d] midi_port_index = %ld fPortLatency = %ld", midi_port_index, port_id, port->GetLatency() ); + jack_log("JackNetDriver::AllocPorts() fMidiPlaybackPortList[%d] midi_port_index = %ld fPortLatency = %ld", midi_port_index, port_id, port->GetLatency()); } return 0; @@ -412,14 +416,14 @@ namespace Jack return 0; } - JackMidiBuffer* JackNetDriver::GetMidiInputBuffer ( int port_index ) + JackMidiBuffer* JackNetDriver::GetMidiInputBuffer(int port_index) { - return static_cast ( fGraphManager->GetBuffer ( fMidiCapturePortList[port_index], fEngineControl->fBufferSize ) ); + return static_cast(fGraphManager->GetBuffer(fMidiCapturePortList[port_index], fEngineControl->fBufferSize)); } - JackMidiBuffer* JackNetDriver::GetMidiOutputBuffer ( int port_index ) + JackMidiBuffer* JackNetDriver::GetMidiOutputBuffer(int port_index) { - return static_cast ( fGraphManager->GetBuffer ( fMidiPlaybackPortList[port_index], fEngineControl->fBufferSize ) ); + return static_cast(fGraphManager->GetBuffer(fMidiPlaybackPortList[port_index], fEngineControl->fBufferSize)); } //transport--------------------------------------------------------------------------- @@ -431,35 +435,35 @@ namespace Jack // - conditional request : don't change anything too, the master will know if this slave is actually the timebase master int refnum; bool conditional; - if ( fSendTransportData.fTimebaseMaster == TIMEBASEMASTER ) + if (fSendTransportData.fTimebaseMaster == TIMEBASEMASTER) { - fEngineControl->fTransport.GetTimebaseMaster ( refnum, conditional ); - if ( refnum != -1 ) - fEngineControl->fTransport.ResetTimebase ( refnum ); - jack_info ( "The NetMaster is now the new timebase master." ); + fEngineControl->fTransport.GetTimebaseMaster(refnum, conditional); + if (refnum != -1) + fEngineControl->fTransport.ResetTimebase(refnum); + jack_info("The NetMaster is now the new timebase master."); } //is there a transport state change to handle ? - if ( fSendTransportData.fNewState && ( fSendTransportData.fState != fEngineControl->fTransport.GetState() ) ) + if (fSendTransportData.fNewState &&(fSendTransportData.fState != fEngineControl->fTransport.GetState())) { - switch ( fSendTransportData.fState ) + switch (fSendTransportData.fState) { case JackTransportStopped : - fEngineControl->fTransport.SetCommand ( TransportCommandStop ); - jack_info ( "Master stops transport." ); + fEngineControl->fTransport.SetCommand(TransportCommandStop); + jack_info("Master stops transport."); break; case JackTransportStarting : - fEngineControl->fTransport.RequestNewPos ( &fSendTransportData.fPosition ); - fEngineControl->fTransport.SetCommand ( TransportCommandStart ); - jack_info ( "Master starts transport frame = %d", fSendTransportData.fPosition.frame); + fEngineControl->fTransport.RequestNewPos(&fSendTransportData.fPosition); + fEngineControl->fTransport.SetCommand(TransportCommandStart); + jack_info("Master starts transport frame = %d", fSendTransportData.fPosition.frame); break; case JackTransportRolling : - //fEngineControl->fTransport.SetCommand ( TransportCommandStart ); - fEngineControl->fTransport.SetState ( JackTransportRolling ); - jack_info ( "Master is rolling." ); + //fEngineControl->fTransport.SetCommand(TransportCommandStart); + fEngineControl->fTransport.SetState(JackTransportRolling); + jack_info("Master is rolling."); break; } } @@ -471,20 +475,20 @@ namespace Jack //is there a timebase master change ? int refnum; bool conditional; - fEngineControl->fTransport.GetTimebaseMaster ( refnum, conditional ); - if ( refnum != fLastTimebaseMaster ) + fEngineControl->fTransport.GetTimebaseMaster(refnum, conditional); + if (refnum != fLastTimebaseMaster) { //timebase master has released its function - if ( refnum == -1 ) + if (refnum == -1) { fReturnTransportData.fTimebaseMaster = RELEASE_TIMEBASEMASTER; - jack_info ( "Sending a timebase master release request." ); + jack_info("Sending a timebase master release request."); } //there is a new timebase master else { - fReturnTransportData.fTimebaseMaster = ( conditional ) ? CONDITIONAL_TIMEBASEMASTER : TIMEBASEMASTER; - jack_info ( "Sending a %s timebase master request.", ( conditional ) ? "conditional" : "non-conditional" ); + fReturnTransportData.fTimebaseMaster = (conditional) ? CONDITIONAL_TIMEBASEMASTER : TIMEBASEMASTER; + jack_info("Sending a %s timebase master request.", (conditional) ? "conditional" : "non-conditional"); } fLastTimebaseMaster = refnum; } @@ -493,14 +497,14 @@ namespace Jack */ //update transport state and position - fReturnTransportData.fState = fEngineControl->fTransport.Query ( &fReturnTransportData.fPosition ); + fReturnTransportData.fState = fEngineControl->fTransport.Query(&fReturnTransportData.fPosition); //is it a new state (that the master need to know...) ? - fReturnTransportData.fNewState = (( fReturnTransportData.fState == JackTransportNetStarting) && - ( fReturnTransportData.fState != fLastTransportState ) && - ( fReturnTransportData.fState != fSendTransportData.fState ) ); - if ( fReturnTransportData.fNewState ) - jack_info ( "Sending '%s'.", GetTransportState ( fReturnTransportData.fState ) ); + fReturnTransportData.fNewState = ((fReturnTransportData.fState == JackTransportNetStarting) && + (fReturnTransportData.fState != fLastTransportState) && + (fReturnTransportData.fState != fSendTransportData.fState)); + if (fReturnTransportData.fNewState) + jack_info("Sending '%s'.", GetTransportState(fReturnTransportData.fState)); fLastTransportState = fReturnTransportData.fState; } @@ -511,17 +515,17 @@ namespace Jack int audio_port_index; //buffers - for ( midi_port_index = 0; midi_port_index < fParams.fSendMidiChannels; midi_port_index++ ) - fNetMidiCaptureBuffer->SetBuffer ( midi_port_index, GetMidiInputBuffer ( midi_port_index ) ); - for ( audio_port_index = 0; audio_port_index < fParams.fSendAudioChannels; audio_port_index++ ) - fNetAudioCaptureBuffer->SetBuffer ( audio_port_index, GetInputBuffer ( audio_port_index ) ); + for (midi_port_index = 0; midi_port_index < fParams.fSendMidiChannels; midi_port_index++) + fNetMidiCaptureBuffer->SetBuffer(midi_port_index, GetMidiInputBuffer(midi_port_index)); + for (audio_port_index = 0; audio_port_index < fParams.fSendAudioChannels; audio_port_index++) + fNetAudioCaptureBuffer->SetBuffer(audio_port_index, GetInputBuffer(audio_port_index)); #ifdef JACK_MONITOR fNetTimeMon->New(); #endif //receive sync (launch the cycle) - if ( SyncRecv() == SOCKET_ERROR ) + if (SyncRecv() == SOCKET_ERROR) return 0; #ifdef JACK_MONITOR @@ -534,17 +538,17 @@ namespace Jack DecodeSyncPacket(); #ifdef JACK_MONITOR - fNetTimeMon->Add ( ( ( float ) ( GetMicroSeconds() - fRcvSyncUst ) / ( float ) fEngineControl->fPeriodUsecs ) * 100.f ); + fNetTimeMon->Add(((float)(GetMicroSeconds() - fRcvSyncUst) / (float)fEngineControl->fPeriodUsecs) * 100.f); #endif //audio, midi or sync if driver is late - if ( DataRecv() == SOCKET_ERROR ) + if (DataRecv() == SOCKET_ERROR) return SOCKET_ERROR; //take the time at the beginning of the cycle JackDriver::CycleTakeBeginTime(); #ifdef JACK_MONITOR - fNetTimeMon->Add ( ( ( float ) ( GetMicroSeconds() - fRcvSyncUst ) / ( float ) fEngineControl->fPeriodUsecs ) * 100.f ); + fNetTimeMon->Add(((float)(GetMicroSeconds() - fRcvSyncUst) / (float)fEngineControl->fPeriodUsecs) * 100.f); #endif return 0; @@ -556,32 +560,32 @@ namespace Jack int audio_port_index; //buffers - for ( midi_port_index = 0; midi_port_index < fParams.fReturnMidiChannels; midi_port_index++ ) - fNetMidiPlaybackBuffer->SetBuffer ( midi_port_index, GetMidiOutputBuffer ( midi_port_index ) ); - for ( audio_port_index = 0; audio_port_index < fPlaybackChannels; audio_port_index++ ) - fNetAudioPlaybackBuffer->SetBuffer ( audio_port_index, GetOutputBuffer ( audio_port_index ) ); + for (midi_port_index = 0; midi_port_index < fParams.fReturnMidiChannels; midi_port_index++) + fNetMidiPlaybackBuffer->SetBuffer (midi_port_index, GetMidiOutputBuffer (midi_port_index)); + for (audio_port_index = 0; audio_port_index < fPlaybackChannels; audio_port_index++) + fNetAudioPlaybackBuffer->SetBuffer (audio_port_index, GetOutputBuffer (audio_port_index)); #ifdef JACK_MONITOR - fNetTimeMon->Add ( ( ( float ) ( GetMicroSeconds() - fRcvSyncUst ) / ( float ) fEngineControl->fPeriodUsecs ) * 100.f ); + fNetTimeMon->Add(((float) (GetMicroSeconds() - fRcvSyncUst) / (float)fEngineControl->fPeriodUsecs) * 100.f); #endif //sync EncodeSyncPacket(); //send sync - if ( SyncSend() == SOCKET_ERROR ) + if (SyncSend() == SOCKET_ERROR) return SOCKET_ERROR; #ifdef JACK_MONITOR - fNetTimeMon->Add ( ( ( float ) ( GetMicroSeconds() - fRcvSyncUst ) / ( float ) fEngineControl->fPeriodUsecs ) * 100.f ); + fNetTimeMon->Add(((float)(GetMicroSeconds() - fRcvSyncUst) / (float) fEngineControl->fPeriodUsecs) * 100.f); #endif //send data - if ( DataSend() == SOCKET_ERROR ) + if (DataSend() == SOCKET_ERROR) return SOCKET_ERROR; #ifdef JACK_MONITOR - fNetTimeMon->AddLast ( ( ( float ) ( GetMicroSeconds() - fRcvSyncUst ) / ( float ) fEngineControl->fPeriodUsecs ) * 100.f ); + fNetTimeMon->AddLast(((float)(GetMicroSeconds() - fRcvSyncUst) / (float) fEngineControl->fPeriodUsecs) * 100.f); #endif return 0; @@ -593,103 +597,111 @@ namespace Jack extern "C" { #endif - 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* ) calloc ( 1, sizeof ( jack_driver_desc_t ) ); + jack_driver_desc_t* desc = (jack_driver_desc_t*) calloc(1, sizeof(jack_driver_desc_t)); - strcpy ( desc->name, "net" ); // size MUST be less then JACK_DRIVER_NAME_MAX + 1 - strcpy ( desc->desc, "netjack slave backend component" ); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1 + strcpy(desc->name, "net"); // size MUST be less then JACK_DRIVER_NAME_MAX + 1 + strcpy(desc->desc, "netjack slave backend component"); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1 - desc->nparams = 10; - desc->params = ( jack_driver_param_desc_t* ) calloc ( desc->nparams, sizeof ( jack_driver_param_desc_t ) ); + desc->nparams = 11; + desc->params = (jack_driver_param_desc_t*) calloc(desc->nparams, sizeof(jack_driver_param_desc_t)); int i = 0; - strcpy ( desc->params[i].name, "multicast_ip" ); + strcpy(desc->params[i].name, "multicast_ip"); desc->params[i].character = 'a'; desc->params[i].type = JackDriverParamString; - strcpy ( desc->params[i].value.str, DEFAULT_MULTICAST_IP ); - strcpy ( desc->params[i].short_desc, "Multicast Address" ); - strcpy ( desc->params[i].long_desc, desc->params[i].short_desc ); + strcpy(desc->params[i].value.str, DEFAULT_MULTICAST_IP); + strcpy(desc->params[i].short_desc, "Multicast Address"); + strcpy(desc->params[i].long_desc, desc->params[i].short_desc); i++; - strcpy ( desc->params[i].name, "udp_net_port" ); + strcpy(desc->params[i].name, "udp_net_port"); desc->params[i].character = 'p'; desc->params[i].type = JackDriverParamInt; desc->params[i].value.i = DEFAULT_PORT; - strcpy ( desc->params[i].short_desc, "UDP port" ); - strcpy ( desc->params[i].long_desc, desc->params[i].short_desc ); + strcpy(desc->params[i].short_desc, "UDP port"); + strcpy(desc->params[i].long_desc, desc->params[i].short_desc); i++; - strcpy ( desc->params[i].name, "mtu" ); + strcpy(desc->params[i].name, "mtu"); desc->params[i].character = 'M'; desc->params[i].type = JackDriverParamInt; desc->params[i].value.i = DEFAULT_MTU; - strcpy ( desc->params[i].short_desc, "MTU to the master" ); - strcpy ( desc->params[i].long_desc, desc->params[i].short_desc ); + strcpy(desc->params[i].short_desc, "MTU to the master"); + strcpy(desc->params[i].long_desc, desc->params[i].short_desc); i++; - strcpy ( desc->params[i].name, "input_ports" ); + strcpy(desc->params[i].name, "input_ports"); desc->params[i].character = 'C'; desc->params[i].type = JackDriverParamInt; desc->params[i].value.i = -1; - strcpy ( desc->params[i].short_desc, "Number of audio input ports" ); - strcpy ( desc->params[i].long_desc, "Number of audio input ports. If -1, audio physical input from the master"); + strcpy(desc->params[i].short_desc, "Number of audio input ports"); + strcpy(desc->params[i].long_desc, "Number of audio input ports. If -1, audio physical input from the master"); i++; - strcpy ( desc->params[i].name, "output_ports" ); + strcpy(desc->params[i].name, "output_ports"); desc->params[i].character = 'P'; desc->params[i].type = JackDriverParamInt; desc->params[i].value.i = -1; - strcpy ( desc->params[i].short_desc, "Number of audio output ports" ); - strcpy ( desc->params[i].long_desc, "Number of audio output ports. If -1, audio physical output from the master"); + strcpy(desc->params[i].short_desc, "Number of audio output ports"); + strcpy(desc->params[i].long_desc, "Number of audio output ports. If -1, audio physical output from the master"); i++; - strcpy ( desc->params[i].name, "midi_in_ports" ); + strcpy(desc->params[i].name, "midi_in_ports"); desc->params[i].character = 'i'; desc->params[i].type = JackDriverParamInt; desc->params[i].value.i = 0; - strcpy ( desc->params[i].short_desc, "Number of midi input ports" ); - strcpy ( desc->params[i].long_desc, desc->params[i].short_desc ); + strcpy(desc->params[i].short_desc, "Number of midi input ports"); + strcpy(desc->params[i].long_desc, desc->params[i].short_desc); i++; - strcpy ( desc->params[i].name, "midi_out_ports" ); + strcpy(desc->params[i].name, "midi_out_ports"); desc->params[i].character = 'o'; desc->params[i].type = JackDriverParamInt; desc->params[i].value.i = 0; - strcpy ( desc->params[i].short_desc, "Number of midi output ports" ); - strcpy ( desc->params[i].long_desc, desc->params[i].short_desc ); + strcpy(desc->params[i].short_desc, "Number of midi output ports"); + strcpy(desc->params[i].long_desc, desc->params[i].short_desc); + + i++; + strcpy(desc->params[i].name, "celt"); + desc->params[i].character = 'c'; + desc->params[i].type = JackDriverParamInt; + desc->params[i].value.i = -1; + strcpy(desc->params[i].short_desc, "Set CELT encoding and number of kBits per channel"); + strcpy(desc->params[i].long_desc, desc->params[i].short_desc); i++; - strcpy ( desc->params[i].name, "client_name" ); + strcpy(desc->params[i].name, "client_name"); desc->params[i].character = 'n'; desc->params[i].type = JackDriverParamString; - strcpy ( desc->params[i].value.str, "'hostname'" ); - strcpy ( desc->params[i].short_desc, "Name of the jack client" ); - strcpy ( desc->params[i].long_desc, desc->params[i].short_desc ); + strcpy(desc->params[i].value.str, "'hostname'"); + strcpy(desc->params[i].short_desc, "Name of the jack client"); + strcpy(desc->params[i].long_desc, desc->params[i].short_desc); i++; - strcpy ( desc->params[i].name, "transport_sync" ); + strcpy(desc->params[i].name, "transport_sync"); desc->params[i].character = 't'; desc->params[i].type = JackDriverParamUInt; desc->params[i].value.ui = 1U; - strcpy ( desc->params[i].short_desc, "Sync transport with master's" ); - strcpy ( desc->params[i].long_desc, desc->params[i].short_desc ); + strcpy(desc->params[i].short_desc, "Sync transport with master's"); + strcpy(desc->params[i].long_desc, desc->params[i].short_desc); i++; - strcpy ( desc->params[i].name, "mode" ); + strcpy(desc->params[i].name, "mode"); desc->params[i].character = 'm'; desc->params[i].type = JackDriverParamString; - strcpy ( desc->params[i].value.str, "slow" ); - strcpy ( desc->params[i].short_desc, "Slow, Normal or Fast mode." ); - strcpy ( desc->params[i].long_desc, desc->params[i].short_desc ); + strcpy(desc->params[i].value.str, "slow"); + strcpy(desc->params[i].short_desc, "Slow, Normal or Fast mode."); + strcpy(desc->params[i].long_desc, desc->params[i].short_desc); return desc; } - SERVER_EXPORT Jack::JackDriverClientInterface* driver_initialize ( Jack::JackLockedEngine* engine, Jack::JackSynchro* table, const JSList* params ) + SERVER_EXPORT Jack::JackDriverClientInterface* driver_initialize(Jack::JackLockedEngine* engine, Jack::JackSynchro* table, const JSList* params) { char multicast_ip[16]; - strcpy ( multicast_ip, DEFAULT_MULTICAST_IP ); + strcpy(multicast_ip, DEFAULT_MULTICAST_IP); char net_name[JACK_CLIENT_NAME_SIZE + 1]; int udp_port = DEFAULT_PORT; int mtu = DEFAULT_MTU; @@ -700,6 +712,7 @@ namespace Jack int audio_playback_ports = -1; int midi_input_ports = 0; int midi_output_ports = 0; + int celt_encoding = -1; bool monitor = false; char network_mode = 's'; const JSList* node; @@ -707,13 +720,12 @@ namespace Jack net_name[0] = 0; - for ( node = params; node; node = jack_slist_next ( node ) ) - { - param = ( const jack_driver_param_t* ) node->data; - switch ( param->character ) + for (node = params; node; node = jack_slist_next(node)) { + param = (const jack_driver_param_t*) node->data; + switch (param->character) { case 'a' : - strncpy ( multicast_ip, param->value.str, 15 ); + strncpy(multicast_ip, param->value.str, 15); break; case 'p': udp_port = param->value.ui; @@ -733,46 +745,43 @@ namespace Jack case 'o': midi_output_ports = param->value.i; break; + case 'c': + celt_encoding = param->value.i; + break; case 'n' : - strncpy ( net_name, param->value.str, JACK_CLIENT_NAME_SIZE ); + strncpy(net_name, param->value.str, JACK_CLIENT_NAME_SIZE); break; case 't' : transport_sync = param->value.ui; break; case 'm' : - if ( strcmp ( param->value.str, "normal" ) == 0 ) + if (strcmp(param->value.str, "normal") == 0) network_mode = 'n'; - else if ( strcmp ( param->value.str, "slow" ) == 0 ) + else if (strcmp(param->value.str, "slow") == 0) network_mode = 's'; - else if ( strcmp ( param->value.str, "fast" ) == 0 ) + else if (strcmp(param->value.str, "fast") == 0) network_mode = 'f'; else - jack_error ( "Unknown network mode, using 'normal' mode." ); + jack_error("Unknown network mode, using 'normal' mode."); break; } } - try - { + try { - Jack::JackDriverClientInterface* driver = - new Jack::JackWaitThreadedDriver ( - new Jack::JackNetDriver ( "system", "net_pcm", engine, table, multicast_ip, udp_port, mtu, - midi_input_ports, midi_output_ports, net_name, transport_sync, network_mode ) ); - if ( driver->Open ( period_size, sample_rate, 1, 1, audio_capture_ports, audio_playback_ports, - monitor, "from_master_", "to_master_", 0, 0 ) == 0 ) - { + Jack::JackDriverClientInterface* driver = new Jack::JackWaitThreadedDriver( + new Jack::JackNetDriver("system", "net_pcm", engine, table, multicast_ip, udp_port, mtu, + midi_input_ports, midi_output_ports, + net_name, transport_sync, + network_mode, celt_encoding)); + if (driver->Open(period_size, sample_rate, 1, 1, audio_capture_ports, audio_playback_ports, monitor, "from_master_", "to_master_", 0, 0) == 0) { return driver; - } - else - { + } else { delete driver; return NULL; } - } - catch ( ... ) - { + } catch (...) { return NULL; } } diff --git a/common/JackNetDriver.h b/common/JackNetDriver.h index 7c4635ae..2cb75843 100644 --- a/common/JackNetDriver.h +++ b/common/JackNetDriver.h @@ -68,14 +68,14 @@ namespace Jack public: - JackNetDriver ( const char* name, const char* alias, JackLockedEngine* engine, JackSynchro* table, - const char* ip, int port, int mtu, int midi_input_ports, int midi_output_ports, - char* net_name, uint transport_sync, char network_master_mode ); + JackNetDriver(const char* name, const char* alias, JackLockedEngine* engine, JackSynchro* table, + const char* ip, int port, int mtu, int midi_input_ports, int midi_output_ports, + char* net_name, uint transport_sync, char network_master_mode, int celt_encoding); ~JackNetDriver(); - int Open ( jack_nframes_t frames_per_cycle, jack_nframes_t rate, bool capturing, bool playing, - int inchannels, int outchannels, bool monitor, const char* capture_driver_name, - const char* playback_driver_name, jack_nframes_t capture_latency, jack_nframes_t playback_latency ); + int Open(jack_nframes_t frames_per_cycle, jack_nframes_t rate, bool capturing, bool playing, + int inchannels, int outchannels, bool monitor, const char* capture_driver_name, + const char* playback_driver_name, jack_nframes_t capture_latency, jack_nframes_t playback_latency); int Close(); int Attach(); From cd3073854b1601b9e3572ed42f1f5fca13a7d7fe Mon Sep 17 00:00:00 2001 From: sletz Date: Thu, 21 Apr 2011 14:44:37 +0000 Subject: [PATCH 5/9] Fix XCode projects. git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@4344 0c269be4-1314-0410-8aa9-9f06e86f4224 --- common/JackNetInterface.cpp | 20 ++++++++++++++------ macosx/Jackdmp.xcodeproj/project.pbxproj | 5 +++++ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/common/JackNetInterface.cpp b/common/JackNetInterface.cpp index 5eb0487f..b7fe7a69 100644 --- a/common/JackNetInterface.cpp +++ b/common/JackNetInterface.cpp @@ -265,6 +265,8 @@ namespace Jack } } + assert(fNetAudioCaptureBuffer); + if (fParams.fReturnAudioChannels) { switch (fParams.fSampleEncoder) { @@ -285,6 +287,8 @@ namespace Jack } } + assert(fNetAudioPlaybackBuffer); + } catch (exception&) { jack_error("NetAudioBuffer allocation error..."); return false; @@ -788,41 +792,45 @@ namespace Jack switch (fParams.fSampleEncoder) { case JackFloatEncoder: - fNetAudioCaptureBuffer = new NetFloatAudioBuffer ( &fParams, fParams.fSendAudioChannels, fRxData ); + fNetAudioCaptureBuffer = new NetFloatAudioBuffer(&fParams, fParams.fSendAudioChannels, fRxData); break; case JackIntEncoder: - fNetAudioCaptureBuffer = new NetIntAudioBuffer ( &fParams, fParams.fSendAudioChannels, fRxData ); + fNetAudioCaptureBuffer = new NetIntAudioBuffer(&fParams, fParams.fSendAudioChannels, fRxData); break; case JackCeltEncoder: #ifdef CELT - fNetAudioCaptureBuffer = new NetCeltAudioBuffer ( &fParams, fParams.fSendAudioChannels, fRxData, fParams.fKBps ); + fNetAudioCaptureBuffer = new NetCeltAudioBuffer(&fParams, fParams.fSendAudioChannels, fRxData, fParams.fKBps); #endif break; } } + assert(fNetAudioCaptureBuffer); + if (fParams.fReturnAudioChannels) { switch (fParams.fSampleEncoder) { case JackFloatEncoder: - fNetAudioPlaybackBuffer = new NetFloatAudioBuffer ( &fParams, fParams.fReturnAudioChannels, fTxData ); + fNetAudioPlaybackBuffer = new NetFloatAudioBuffer(&fParams, fParams.fReturnAudioChannels, fTxData); break; case JackIntEncoder: - fNetAudioPlaybackBuffer = new NetIntAudioBuffer ( &fParams, fParams.fReturnAudioChannels, fTxData); + fNetAudioPlaybackBuffer = new NetIntAudioBuffer(&fParams, fParams.fReturnAudioChannels, fTxData); break; case JackCeltEncoder: #ifdef CELT - fNetAudioPlaybackBuffer = new NetCeltAudioBuffer ( &fParams, fParams.fReturnAudioChannels, fTxData, fParams.fKBps ); + fNetAudioPlaybackBuffer = new NetCeltAudioBuffer(&fParams, fParams.fReturnAudioChannels, fTxData, fParams.fKBps); #endif break; } } + assert(fNetAudioPlaybackBuffer); + } catch (exception&) { jack_error("NetAudioBuffer allocation error..."); return false; diff --git a/macosx/Jackdmp.xcodeproj/project.pbxproj b/macosx/Jackdmp.xcodeproj/project.pbxproj index 5961dd82..14178e71 100644 --- a/macosx/Jackdmp.xcodeproj/project.pbxproj +++ b/macosx/Jackdmp.xcodeproj/project.pbxproj @@ -9497,6 +9497,7 @@ "-DUSE_POSIX_SHM", ); OTHER_CPLUSPLUSFLAGS = ( + "-DCELT", "-DSERVER_SIDE", "-DJACK_32_64", "-D__SMP__", @@ -9565,6 +9566,7 @@ "-DUSE_POSIX_SHM", ); OTHER_CPLUSPLUSFLAGS = ( + "-DCELT", "-DSERVER_SIDE", "-DJACK_32_64", "-D__SMP__", @@ -14333,6 +14335,7 @@ "-DUSE_POSIX_SHM", ); OTHER_CPLUSPLUSFLAGS = ( + "-DCELT", "-DSERVER_SIDE", "-D__SMP__", "-DMACH_RPC_MACH_SEMA", @@ -16445,6 +16448,7 @@ "-DUSE_POSIX_SHM", ); OTHER_CPLUSPLUSFLAGS = ( + "-DCELT", "-DJACK_MONITOR", "-DSERVER_SIDE", "-DJACK_32_64", @@ -16513,6 +16517,7 @@ "-DUSE_POSIX_SHM", ); OTHER_CPLUSPLUSFLAGS = ( + "-DCELT", "-DJACK_MONITOR", "-DSERVER_SIDE", "-DJACK_32_64", From 6d7314bade6657e22403ac6facaa3e1ecdba94e5 Mon Sep 17 00:00:00 2001 From: sletz Date: Thu, 21 Apr 2011 15:07:47 +0000 Subject: [PATCH 6/9] Fix CELT compilation. git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@4345 0c269be4-1314-0410-8aa9-9f06e86f4224 --- common/JackNetInterface.cpp | 24 ++++++++++++------------ common/JackNetTool.cpp | 3 ++- common/JackNetTool.h | 2 +- macosx/Jackdmp.xcodeproj/project.pbxproj | 11 ++++++----- 4 files changed, 21 insertions(+), 19 deletions(-) diff --git a/common/JackNetInterface.cpp b/common/JackNetInterface.cpp index b7fe7a69..b9ee5e8e 100644 --- a/common/JackNetInterface.cpp +++ b/common/JackNetInterface.cpp @@ -258,14 +258,14 @@ namespace Jack break; case JackCeltEncoder: - #ifdef CELT + #ifdef HAVE_CELT fNetAudioCaptureBuffer = new NetCeltAudioBuffer(&fParams, fParams.fSendAudioChannels, fTxData, fParams.fKBps); #endif break; } - } - assert(fNetAudioCaptureBuffer); + assert(fNetAudioCaptureBuffer); + } if (fParams.fReturnAudioChannels) { @@ -280,14 +280,14 @@ namespace Jack break; case JackCeltEncoder: - #ifdef CELT + #ifdef HAVE_CELT fNetAudioPlaybackBuffer = new NetCeltAudioBuffer(&fParams, fParams.fReturnAudioChannels, fRxData, fParams.fKBps); #endif break; } - } - assert(fNetAudioPlaybackBuffer); + assert(fNetAudioPlaybackBuffer); + } } catch (exception&) { jack_error("NetAudioBuffer allocation error..."); @@ -800,14 +800,14 @@ namespace Jack break; case JackCeltEncoder: - #ifdef CELT + #ifdef HAVE_CELT fNetAudioCaptureBuffer = new NetCeltAudioBuffer(&fParams, fParams.fSendAudioChannels, fRxData, fParams.fKBps); #endif break; } - } - assert(fNetAudioCaptureBuffer); + assert(fNetAudioCaptureBuffer); + } if (fParams.fReturnAudioChannels) { @@ -822,14 +822,14 @@ namespace Jack break; case JackCeltEncoder: - #ifdef CELT + #ifdef HAVE_CELT fNetAudioPlaybackBuffer = new NetCeltAudioBuffer(&fParams, fParams.fReturnAudioChannels, fTxData, fParams.fKBps); #endif break; } - } - assert(fNetAudioPlaybackBuffer); + assert(fNetAudioPlaybackBuffer); + } } catch (exception&) { jack_error("NetAudioBuffer allocation error..."); diff --git a/common/JackNetTool.cpp b/common/JackNetTool.cpp index 43179844..fe30b2c5 100644 --- a/common/JackNetTool.cpp +++ b/common/JackNetTool.cpp @@ -249,7 +249,7 @@ namespace Jack // Celt audio buffer ********************************************************************************* -#ifdef CELT +#ifdef HAVE_CELT #define KPS 32 #define KPS_DIV 8 @@ -729,6 +729,7 @@ namespace Jack break; case (JackCeltEncoder): jack_info ( "SampleEncoder : %s", "CELT"); + jack_info ( "kBits : %d", params->fKBps); break; }; jack_info ( "Slave mode : %s", ( params->fSlaveSyncMode ) ? "sync" : "async" ); diff --git a/common/JackNetTool.h b/common/JackNetTool.h index 585ec9f1..f7efae9e 100644 --- a/common/JackNetTool.h +++ b/common/JackNetTool.h @@ -558,7 +558,7 @@ namespace Jack int RenderToNetwork (int subcycle, size_t total_size ); }; -#ifdef CELT +#ifdef HAVE_CELT #include diff --git a/macosx/Jackdmp.xcodeproj/project.pbxproj b/macosx/Jackdmp.xcodeproj/project.pbxproj index 14178e71..189f53dd 100644 --- a/macosx/Jackdmp.xcodeproj/project.pbxproj +++ b/macosx/Jackdmp.xcodeproj/project.pbxproj @@ -9497,7 +9497,7 @@ "-DUSE_POSIX_SHM", ); OTHER_CPLUSPLUSFLAGS = ( - "-DCELT", + "-DHAVE_CELT", "-DSERVER_SIDE", "-DJACK_32_64", "-D__SMP__", @@ -9566,7 +9566,7 @@ "-DUSE_POSIX_SHM", ); OTHER_CPLUSPLUSFLAGS = ( - "-DCELT", + "-DHAVE_CELT", "-DSERVER_SIDE", "-DJACK_32_64", "-D__SMP__", @@ -14335,7 +14335,7 @@ "-DUSE_POSIX_SHM", ); OTHER_CPLUSPLUSFLAGS = ( - "-DCELT", + "-DHAVE_CELT", "-DSERVER_SIDE", "-D__SMP__", "-DMACH_RPC_MACH_SEMA", @@ -14396,6 +14396,7 @@ "-DUSE_POSIX_SHM", ); OTHER_CPLUSPLUSFLAGS = ( + "-DHAVE_CELT", "-DSERVER_SIDE", "-D__SMP__", "-DMACH_RPC_MACH_SEMA", @@ -16448,7 +16449,7 @@ "-DUSE_POSIX_SHM", ); OTHER_CPLUSPLUSFLAGS = ( - "-DCELT", + "-DHAVE_CELT", "-DJACK_MONITOR", "-DSERVER_SIDE", "-DJACK_32_64", @@ -16517,7 +16518,7 @@ "-DUSE_POSIX_SHM", ); OTHER_CPLUSPLUSFLAGS = ( - "-DCELT", + "-DHAVE_CELT", "-DJACK_MONITOR", "-DSERVER_SIDE", "-DJACK_32_64", From b14943bb1a01c3905c99306079f30e3945241a0c Mon Sep 17 00:00:00 2001 From: sletz Date: Thu, 21 Apr 2011 15:59:53 +0000 Subject: [PATCH 7/9] Fix alsa_driver_check_card_type. git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@4346 0c269be4-1314-0410-8aa9-9f06e86f4224 --- linux/alsa/alsa_driver.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linux/alsa/alsa_driver.c b/linux/alsa/alsa_driver.c index 5fe3635c..5e274761 100644 --- a/linux/alsa/alsa_driver.c +++ b/linux/alsa/alsa_driver.c @@ -151,7 +151,7 @@ alsa_driver_check_card_type (alsa_driver_t *driver) * should be hw:x where x is the card number */ char tmp[5]; - strncpy(tmp,strstr(driver->alsa_name_playback,"hw"),4); + strncpy(tmp,strcasestr(driver->alsa_name_playback,"hw"),4); tmp[4]='\0'; jack_info("control device %s",tmp); ctl_name = strdup(tmp); From 309c7e99519f540d9ba1c80b8e31debd2118b5de Mon Sep 17 00:00:00 2001 From: sletz Date: Thu, 21 Apr 2011 16:15:21 +0000 Subject: [PATCH 8/9] Correct CELT conditional compilation. git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@4347 0c269be4-1314-0410-8aa9-9f06e86f4224 --- common/JackNetDriver.cpp | 5 ++++- common/JackNetOneDriver.cpp | 3 ++- macosx/Jackdmp.xcodeproj/project.pbxproj | 16 +++++++++++++--- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/common/JackNetDriver.cpp b/common/JackNetDriver.cpp index fb004e17..99c8e243 100644 --- a/common/JackNetDriver.cpp +++ b/common/JackNetDriver.cpp @@ -663,6 +663,7 @@ namespace Jack strcpy(desc->params[i].short_desc, "Number of midi output ports"); strcpy(desc->params[i].long_desc, desc->params[i].short_desc); +#if HAVE_CELT i++; strcpy(desc->params[i].name, "celt"); desc->params[i].character = 'c'; @@ -670,7 +671,7 @@ namespace Jack desc->params[i].value.i = -1; strcpy(desc->params[i].short_desc, "Set CELT encoding and number of kBits per channel"); strcpy(desc->params[i].long_desc, desc->params[i].short_desc); - +#endif i++; strcpy(desc->params[i].name, "client_name"); desc->params[i].character = 'n'; @@ -745,9 +746,11 @@ namespace Jack case 'o': midi_output_ports = param->value.i; break; + #if HAVE_CELT case 'c': celt_encoding = param->value.i; break; + #endif case 'n' : strncpy(net_name, param->value.str, JACK_CLIENT_NAME_SIZE); break; diff --git a/common/JackNetOneDriver.cpp b/common/JackNetOneDriver.cpp index 12bd3141..9e2c95ad 100644 --- a/common/JackNetOneDriver.cpp +++ b/common/JackNetOneDriver.cpp @@ -871,6 +871,7 @@ extern "C" "Factor for sample rate reduction on the upstream"); strcpy (params[i].long_desc, params[i].short_desc); +#if HAVE_CELT i++; strcpy (params[i].name, "celt"); params[i].character = 'c'; @@ -879,7 +880,7 @@ extern "C" strcpy (params[i].short_desc, "sets celt encoding and number of kbits per channel"); strcpy (params[i].long_desc, params[i].short_desc); - +#endif i++; strcpy (params[i].name, "bit-depth"); params[i].character = 'b'; diff --git a/macosx/Jackdmp.xcodeproj/project.pbxproj b/macosx/Jackdmp.xcodeproj/project.pbxproj index 189f53dd..c096e20e 100644 --- a/macosx/Jackdmp.xcodeproj/project.pbxproj +++ b/macosx/Jackdmp.xcodeproj/project.pbxproj @@ -17187,7 +17187,10 @@ LIBRARY_STYLE = DYNAMIC; MACH_O_TYPE = mh_dylib; OTHER_CFLAGS = ""; - OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA"; + OTHER_CPLUSPLUSFLAGS = ( + "-DHAVE_CELT", + "-DMACH_RPC_MACH_SEMA", + ); OTHER_LDFLAGS = ( "-framework", Jackservermp, @@ -17236,6 +17239,7 @@ MACOSX_DEPLOYMENT_TARGET = 10.4; OTHER_CFLAGS = "-DJACK_32_64"; OTHER_CPLUSPLUSFLAGS = ( + "-DHAVE_CELT", "-DSERVER_SIDE", "-DMACH_RPC_MACH_SEMA", "-DJACK_32_64", @@ -18879,7 +18883,10 @@ LIBRARY_STYLE = DYNAMIC; MACH_O_TYPE = mh_dylib; OTHER_CFLAGS = ""; - OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA"; + OTHER_CPLUSPLUSFLAGS = ( + "-DHAVE_CELT", + "-DMACH_RPC_MACH_SEMA", + ); OTHER_LDFLAGS = ( "-framework", Jackservermp, @@ -18929,7 +18936,10 @@ MACH_O_TYPE = mh_dylib; MACOSX_DEPLOYMENT_TARGET = 10.4; OTHER_CFLAGS = ""; - OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA"; + OTHER_CPLUSPLUSFLAGS = ( + "-DHAVE_CELT", + "-DMACH_RPC_MACH_SEMA", + ); OTHER_LDFLAGS = ( "-framework", Jackservermp, From cde8be9f59e602c89d6bcce14dad1537dcad488b Mon Sep 17 00:00:00 2001 From: sletz Date: Thu, 21 Apr 2011 17:10:42 +0000 Subject: [PATCH 9/9] CELT mode for JackNetAdapter. git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@4348 0c269be4-1314-0410-8aa9-9f06e86f4224 --- common/JackNetAdapter.cpp | 276 ++++++++++++----------- macosx/Jackdmp.xcodeproj/project.pbxproj | 22 +- 2 files changed, 160 insertions(+), 138 deletions(-) diff --git a/common/JackNetAdapter.cpp b/common/JackNetAdapter.cpp index 864ddba4..a18fc5ca 100644 --- a/common/JackNetAdapter.cpp +++ b/common/JackNetAdapter.cpp @@ -25,19 +25,19 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. namespace Jack { - JackNetAdapter::JackNetAdapter ( jack_client_t* jack_client, jack_nframes_t buffer_size, jack_nframes_t sample_rate, const JSList* params ) - : JackAudioAdapterInterface ( buffer_size, sample_rate), JackNetSlaveInterface(), fThread ( this ) + JackNetAdapter::JackNetAdapter(jack_client_t* jack_client, jack_nframes_t buffer_size, jack_nframes_t sample_rate, const JSList* params) + : JackAudioAdapterInterface(buffer_size, sample_rate), JackNetSlaveInterface(), fThread(this) { - jack_log ( "JackNetAdapter::JackNetAdapter" ); + jack_log("JackNetAdapter::JackNetAdapter"); //global parametering //we can't call JackNetSlaveInterface constructor with some parameters before //because we don't have full parametering right now //parameters will be parsed from the param list, and then JackNetSlaveInterface will be filled with proper values - strcpy ( fMulticastIP, DEFAULT_MULTICAST_IP ); + strcpy(fMulticastIP, DEFAULT_MULTICAST_IP); uint port = DEFAULT_PORT; - GetHostName ( fParams.fName, JACK_CLIENT_NAME_SIZE ); - fSocket.GetName ( fParams.fSlaveNetName ); + GetHostName(fParams.fName, JACK_CLIENT_NAME_SIZE); + fSocket.GetName(fParams.fSlaveNetName); fParams.fMtu = DEFAULT_MTU; fParams.fTransportSync = 0; int send_audio = -1; @@ -53,19 +53,19 @@ namespace Jack //options parsing const JSList* node; const jack_driver_param_t* param; - for ( node = params; node; node = jack_slist_next ( node ) ) + for (node = params; node; node = jack_slist_next(node)) { - param = ( const jack_driver_param_t* ) node->data; - switch ( param->character ) + param = (const jack_driver_param_t*) node->data; + switch (param->character) { case 'a' : - if (strlen (param->value.str) < 32) + if (strlen(param->value.str) < 32) strcpy(fMulticastIP, param->value.str); else jack_error("Can't use multicast address %s, using default %s", param->value.ui, DEFAULT_MULTICAST_IP); break; case 'p' : - fSocket.SetPort ( param->value.ui ); + fSocket.SetPort(param->value.ui); break; case 'M' : fParams.fMtu = param->value.i; @@ -77,20 +77,30 @@ namespace Jack return_audio = param->value.i; break; case 'n' : - strncpy ( fParams.fName, param->value.str, JACK_CLIENT_NAME_SIZE ); + strncpy(fParams.fName, param->value.str, JACK_CLIENT_NAME_SIZE); break; case 't' : //fParams.fTransportSync = param->value.ui; break; + #if HAVE_CELT + case 'c': + if (param->value.i > 0) { + fParams.fSampleEncoder = JackCeltEncoder; + fParams.fKBps = param->value.i; + } else { + fParams.fSampleEncoder = JackFloatEncoder; + } + break; + #endif case 'm' : - if ( strcmp ( param->value.str, "normal" ) == 0 ) + if (strcmp(param->value.str, "normal") == 0) fParams.fNetworkMode = 'n'; - else if ( strcmp ( param->value.str, "slow" ) == 0 ) + else if (strcmp(param->value.str, "slow") == 0) fParams.fNetworkMode = 's'; - else if ( strcmp ( param->value.str, "fast" ) == 0 ) + else if (strcmp(param->value.str, "fast") == 0) fParams.fNetworkMode = 'f'; else - jack_error ( "Unknown network mode, using 'normal' mode." ); + jack_error("Unknown network mode, using 'normal' mode."); break; case 'q': fQuality = param->value.ui; @@ -103,18 +113,18 @@ namespace Jack } //set the socket parameters - fSocket.SetPort ( port ); - fSocket.SetAddress ( fMulticastIP, port ); - + fSocket.SetPort(port); + fSocket.SetAddress(fMulticastIP, port); + // If not set, takes deafault fParams.fSendAudioChannels = (send_audio == -1) ? 2 : send_audio; - + // If not set, takes deafault fParams.fReturnAudioChannels = (return_audio == -1) ? 2 : return_audio; - + //set the audio adapter interface channel values - SetInputs ( fParams.fSendAudioChannels ); - SetOutputs ( fParams.fReturnAudioChannels ); + SetInputs(fParams.fSendAudioChannels); + SetOutputs(fParams.fReturnAudioChannels); //soft buffers will be allocated later (once network initialization done) fSoftCaptureBuffer = NULL; @@ -123,18 +133,16 @@ namespace Jack JackNetAdapter::~JackNetAdapter() { - jack_log ("JackNetAdapter::~JackNetAdapter"); + jack_log("JackNetAdapter::~JackNetAdapter"); int port_index; - if (fSoftCaptureBuffer) - { + if (fSoftCaptureBuffer) { for (port_index = 0; port_index < fCaptureChannels; port_index++) delete[] fSoftCaptureBuffer[port_index]; delete[] fSoftCaptureBuffer; } - if (fSoftPlaybackBuffer) - { - for ( port_index = 0; port_index < fPlaybackChannels; port_index++) + if (fSoftPlaybackBuffer) { + for (port_index = 0; port_index < fPlaybackChannels; port_index++) delete[] fSoftPlaybackBuffer[port_index]; delete[] fSoftPlaybackBuffer; } @@ -143,14 +151,13 @@ namespace Jack //open/close-------------------------------------------------------------------------- int JackNetAdapter::Open() { - jack_log ( "JackNetAdapter::Open" ); + jack_log("JackNetAdapter::Open"); - jack_info ( "NetAdapter started in %s mode %s Master's transport sync.", - ( fParams.fSlaveSyncMode ) ? "sync" : "async", ( fParams.fTransportSync ) ? "with" : "without" ); + jack_info("NetAdapter started in %s mode %s Master's transport sync.", + (fParams.fSlaveSyncMode) ? "sync" : "async", (fParams.fTransportSync) ? "with" : "without"); - if ( fThread.StartSync() < 0 ) - { - jack_error ( "Cannot start netadapter thread" ); + if (fThread.StartSync() < 0) { + jack_error("Cannot start netadapter thread"); return -1; } @@ -159,30 +166,28 @@ namespace Jack int JackNetAdapter::Close() { - jack_log ( "JackNetAdapter::Close" ); + jack_log("JackNetAdapter::Close"); #ifdef JACK_MONITOR fTable.Save(fHostBufferSize, fHostSampleRate, fAdaptedSampleRate, fAdaptedBufferSize); #endif fSocket.Close(); - switch ( fThread.GetStatus() ) + switch (fThread.GetStatus()) { // Kill the thread in Init phase case JackThread::kStarting: case JackThread::kIniting: - if ( fThread.Kill() < 0 ) - { - jack_error ( "Cannot kill thread" ); + if (fThread.Kill() < 0) { + jack_error("Cannot kill thread"); return -1; } break; // Stop when the thread cycle is finished case JackThread::kRunning: - if ( fThread.Stop() < 0 ) - { - jack_error ( "Cannot stop thread" ); + if (fThread.Stop() < 0) { + jack_error ("Cannot stop thread"); return -1; } break; @@ -194,55 +199,55 @@ namespace Jack return 0; } - int JackNetAdapter::SetBufferSize ( jack_nframes_t buffer_size ) + int JackNetAdapter::SetBufferSize(jack_nframes_t buffer_size) { - JackAudioAdapterInterface::SetHostBufferSize ( buffer_size ); + JackAudioAdapterInterface::SetHostBufferSize(buffer_size); return 0; } //thread------------------------------------------------------------------------------ // TODO : if failure, thread exist... need to restart ? - + bool JackNetAdapter::Init() { - jack_log ( "JackNetAdapter::Init" ); + jack_log("JackNetAdapter::Init"); int port_index; //init network connection if (!JackNetSlaveInterface::Init()) { - jack_error("JackNetSlaveInterface::Init() error..." ); + jack_error("JackNetSlaveInterface::Init() error..."); return false; } //then set global parameters if (!SetParams()) { - jack_error("SetParams error..." ); + jack_error("SetParams error..."); return false; } //set buffers if (fCaptureChannels > 0) { fSoftCaptureBuffer = new sample_t*[fCaptureChannels]; - for ( port_index = 0; port_index < fCaptureChannels; port_index++ ) + for (port_index = 0; port_index < fCaptureChannels; port_index++) { fSoftCaptureBuffer[port_index] = new sample_t[fParams.fPeriodSize]; - fNetAudioCaptureBuffer->SetBuffer ( port_index, fSoftCaptureBuffer[port_index] ); + fNetAudioCaptureBuffer->SetBuffer(port_index, fSoftCaptureBuffer[port_index]); } } - + if (fPlaybackChannels > 0) { fSoftPlaybackBuffer = new sample_t*[fPlaybackChannels]; - for ( port_index = 0; port_index < fPlaybackChannels; port_index++ ) + for (port_index = 0; port_index < fPlaybackChannels; port_index++) { fSoftPlaybackBuffer[port_index] = new sample_t[fParams.fPeriodSize]; - fNetAudioPlaybackBuffer->SetBuffer ( port_index, fSoftPlaybackBuffer[port_index] ); + fNetAudioPlaybackBuffer->SetBuffer(port_index, fSoftPlaybackBuffer[port_index]); } } //set audio adapter parameters - SetAdaptedBufferSize ( fParams.fPeriodSize ); - SetAdaptedSampleRate ( fParams.fSampleRate ); + SetAdaptedBufferSize(fParams.fPeriodSize); + SetAdaptedSampleRate(fParams.fSampleRate); // Will do "something" on OSX only... fThread.SetParams(GetEngineControl()->fPeriod, GetEngineControl()->fComputation, GetEngineControl()->fConstraint); @@ -254,7 +259,7 @@ namespace Jack } //init done, display parameters - SessionParamsDisplay ( &fParams ); + SessionParamsDisplay(&fParams); return true; } @@ -287,26 +292,25 @@ namespace Jack //TODO : we need here to get the actual timebase master to eventually release it from its duty (see JackNetDriver) //is there a new transport state ? - if ( fSendTransportData.fNewState && ( fSendTransportData.fState != jack_transport_query ( fJackClient, NULL ) ) ) - { - switch ( fSendTransportData.fState ) + if (fSendTransportData.fNewState &&(fSendTransportData.fState != jack_transport_query(fJackClient, NULL))) { + switch (fSendTransportData.fState) { case JackTransportStopped : - jack_transport_stop ( fJackClient ); - jack_info ( "NetMaster : transport stops." ); + jack_transport_stop(fJackClient); + jack_info("NetMaster : transport stops."); break; case JackTransportStarting : - jack_transport_reposition ( fJackClient, &fSendTransportData.fPosition ); - jack_transport_start ( fJackClient ); - jack_info ( "NetMaster : transport starts." ); + jack_transport_reposition(fJackClient, &fSendTransportData.fPosition); + jack_transport_start(fJackClient); + jack_info("NetMaster : transport starts."); break; case JackTransportRolling : //TODO , we need to : // - find a way to call TransportEngine->SetNetworkSync() // - turn the transport state to JackTransportRolling - jack_info ( "NetMaster : transport rolls." ); + jack_info("NetMaster : transport rolls."); break; } } @@ -318,33 +322,29 @@ namespace Jack int refnum = -1; bool conditional = 0; //TODO : get the actual timebase master - if ( refnum != fLastTimebaseMaster ) - { + if (refnum != fLastTimebaseMaster) { //timebase master has released its function - if ( refnum == -1 ) - { + if (refnum == -1) { fReturnTransportData.fTimebaseMaster = RELEASE_TIMEBASEMASTER; - jack_info ( "Sending a timebase master release request." ); - } - //there is a new timebase master - else - { - fReturnTransportData.fTimebaseMaster = ( conditional ) ? CONDITIONAL_TIMEBASEMASTER : TIMEBASEMASTER; - jack_info ( "Sending a %s timebase master request.", ( conditional ) ? "conditional" : "non-conditional" ); + jack_info("Sending a timebase master release request."); + } else { + //there is a new timebase master + fReturnTransportData.fTimebaseMaster = (conditional) ? CONDITIONAL_TIMEBASEMASTER : TIMEBASEMASTER; + jack_info("Sending a %s timebase master request.", (conditional) ? "conditional" : "non-conditional"); } fLastTimebaseMaster = refnum; - } - else + } else { fReturnTransportData.fTimebaseMaster = NO_CHANGE; + } //update transport state and position - fReturnTransportData.fState = jack_transport_query ( fJackClient, &fReturnTransportData.fPosition ); + fReturnTransportData.fState = jack_transport_query(fJackClient, &fReturnTransportData.fPosition); //is it a new state (that the master need to know...) ? - fReturnTransportData.fNewState = ( ( fReturnTransportData.fState != fLastTransportState ) && - ( fReturnTransportData.fState != fSendTransportData.fState ) ); - if ( fReturnTransportData.fNewState ) - jack_info ( "Sending transport state '%s'.", GetTransportState ( fReturnTransportData.fState ) ); + fReturnTransportData.fNewState = ((fReturnTransportData.fState != fLastTransportState) && + (fReturnTransportData.fState != fSendTransportData.fState)); + if (fReturnTransportData.fNewState) + jack_info("Sending transport state '%s'.", GetTransportState(fReturnTransportData.fState)); fLastTransportState = fReturnTransportData.fState; } @@ -353,7 +353,7 @@ namespace Jack { //don't return -1 in case of sync recv failure //we need the process to continue for network error detection - if ( SyncRecv() == SOCKET_ERROR ) + if (SyncRecv() == SOCKET_ERROR) return 0; DecodeSyncPacket(); @@ -364,7 +364,7 @@ namespace Jack { EncodeSyncPacket(); - if ( SyncSend() == SOCKET_ERROR ) + if (SyncSend() == SOCKET_ERROR) return SOCKET_ERROR; return DataSend(); @@ -403,77 +403,87 @@ extern "C" SERVER_EXPORT jack_driver_desc_t* jack_get_descriptor() { - jack_driver_desc_t* desc = ( jack_driver_desc_t* ) calloc ( 1, sizeof ( jack_driver_desc_t ) ); + jack_driver_desc_t* desc = (jack_driver_desc_t*) calloc(1, sizeof(jack_driver_desc_t)); strcpy(desc->name, "netadapter"); // size MUST be less then JACK_DRIVER_NAME_MAX + 1 strcpy(desc->desc, "netjack net <==> audio backend adapter"); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1 - desc->nparams = 11; - desc->params = ( jack_driver_param_desc_t* ) calloc ( desc->nparams, sizeof ( jack_driver_param_desc_t ) ); + desc->nparams = 12; + desc->params = (jack_driver_param_desc_t*) calloc(desc->nparams, sizeof(jack_driver_param_desc_t)); int i = 0; - strcpy ( desc->params[i].name, "multicast_ip" ); + strcpy(desc->params[i].name, "multicast_ip"); desc->params[i].character = 'a'; desc->params[i].type = JackDriverParamString; - strcpy ( desc->params[i].value.str, DEFAULT_MULTICAST_IP ); - strcpy ( desc->params[i].short_desc, "Multicast Address" ); - strcpy ( desc->params[i].long_desc, desc->params[i].short_desc ); + strcpy(desc->params[i].value.str, DEFAULT_MULTICAST_IP); + strcpy(desc->params[i].short_desc, "Multicast Address"); + strcpy(desc->params[i].long_desc, desc->params[i].short_desc); i++; - strcpy ( desc->params[i].name, "udp_net_port" ); + strcpy(desc->params[i].name, "udp_net_port"); desc->params[i].character = 'p'; desc->params[i].type = JackDriverParamInt; desc->params[i].value.i = DEFAULT_PORT; - strcpy ( desc->params[i].short_desc, "UDP port" ); - strcpy ( desc->params[i].long_desc, desc->params[i].short_desc ); + strcpy(desc->params[i].short_desc, "UDP port"); + strcpy(desc->params[i].long_desc, desc->params[i].short_desc); i++; - strcpy ( desc->params[i].name, "mtu" ); + strcpy(desc->params[i].name, "mtu"); desc->params[i].character = 'M'; desc->params[i].type = JackDriverParamInt; desc->params[i].value.i = DEFAULT_MTU; - strcpy ( desc->params[i].short_desc, "MTU to the master" ); - strcpy ( desc->params[i].long_desc, desc->params[i].short_desc ); + strcpy(desc->params[i].short_desc, "MTU to the master"); + strcpy(desc->params[i].long_desc, desc->params[i].short_desc); i++; - strcpy ( desc->params[i].name, "input-ports" ); + strcpy(desc->params[i].name, "input-ports"); desc->params[i].character = 'C'; desc->params[i].type = JackDriverParamInt; desc->params[i].value.i = 2; - strcpy ( desc->params[i].short_desc, "Number of audio input ports" ); - strcpy ( desc->params[i].long_desc, desc->params[i].short_desc ); + strcpy(desc->params[i].short_desc, "Number of audio input ports"); + strcpy(desc->params[i].long_desc, desc->params[i].short_desc); i++; - strcpy ( desc->params[i].name, "output-ports" ); + strcpy(desc->params[i].name, "output-ports"); desc->params[i].character = 'P'; desc->params[i].type = JackDriverParamInt; desc->params[i].value.i = 2; - strcpy ( desc->params[i].short_desc, "Number of audio output ports" ); - strcpy ( desc->params[i].long_desc, desc->params[i].short_desc ); + strcpy(desc->params[i].short_desc, "Number of audio output ports"); + strcpy(desc->params[i].long_desc, desc->params[i].short_desc); + #if HAVE_CELT i++; - strcpy ( desc->params[i].name, "client-name" ); + strcpy(desc->params[i].name, "celt"); + desc->params[i].character = 'c'; + desc->params[i].type = JackDriverParamInt; + desc->params[i].value.i = -1; + strcpy(desc->params[i].short_desc, "Set CELT encoding and number of kBits per channel"); + strcpy(desc->params[i].long_desc, desc->params[i].short_desc); + #endif + + i++; + strcpy(desc->params[i].name, "client-name"); desc->params[i].character = 'n'; desc->params[i].type = JackDriverParamString; - strcpy ( desc->params[i].value.str, "'hostname'" ); - strcpy ( desc->params[i].short_desc, "Name of the jack client" ); - strcpy ( desc->params[i].long_desc, desc->params[i].short_desc ); + strcpy(desc->params[i].value.str, "'hostname'"); + strcpy(desc->params[i].short_desc, "Name of the jack client"); + strcpy(desc->params[i].long_desc, desc->params[i].short_desc); i++; - strcpy ( desc->params[i].name, "transport-sync" ); + strcpy(desc->params[i].name, "transport-sync"); desc->params[i].character = 't'; desc->params[i].type = JackDriverParamUInt; desc->params[i].value.ui = 1U; - strcpy ( desc->params[i].short_desc, "Sync transport with master's" ); - strcpy ( desc->params[i].long_desc, desc->params[i].short_desc ); + strcpy(desc->params[i].short_desc, "Sync transport with master's"); + strcpy(desc->params[i].long_desc, desc->params[i].short_desc); i++; - strcpy ( desc->params[i].name, "mode" ); + strcpy(desc->params[i].name, "mode"); desc->params[i].character = 'm'; desc->params[i].type = JackDriverParamString; - strcpy ( desc->params[i].value.str, "slow" ); - strcpy ( desc->params[i].short_desc, "Slow, Normal or Fast mode." ); - strcpy ( desc->params[i].long_desc, desc->params[i].short_desc ); + strcpy(desc->params[i].value.str, "slow"); + strcpy(desc->params[i].short_desc, "Slow, Normal or Fast mode."); + strcpy(desc->params[i].long_desc, desc->params[i].short_desc); i++; strcpy(desc->params[i].name, "quality"); @@ -492,28 +502,28 @@ extern "C" strcpy(desc->params[i].long_desc, "Fixed ringbuffer size (if not set => automatic adaptative)"); i++; - strcpy ( desc->params[i].name, "auto-connect" ); + strcpy (desc->params[i].name, "auto-connect"); desc->params[i].character = 'c'; desc->params[i].type = JackDriverParamBool; desc->params[i].value.i = false; - strcpy ( desc->params[i].short_desc, "Auto connect netmaster to system ports" ); - strcpy ( desc->params[i].long_desc, desc->params[i].short_desc ); + strcpy (desc->params[i].short_desc, "Auto connect netmaster to system ports"); + strcpy (desc->params[i].long_desc, desc->params[i].short_desc); return desc; } - SERVER_EXPORT int jack_internal_initialize ( jack_client_t* jack_client, const JSList* params ) + SERVER_EXPORT int jack_internal_initialize(jack_client_t* jack_client, const JSList* params) { - jack_log ( "Loading netadapter" ); + jack_log("Loading netadapter"); Jack::JackAudioAdapter* adapter; - jack_nframes_t buffer_size = jack_get_buffer_size ( jack_client ); - jack_nframes_t sample_rate = jack_get_sample_rate ( jack_client ); + jack_nframes_t buffer_size = jack_get_buffer_size(jack_client); + jack_nframes_t sample_rate = jack_get_sample_rate(jack_client); try { adapter = new Jack::JackAudioAdapter(jack_client, new Jack::JackNetAdapter(jack_client, buffer_size, sample_rate, params), params, false); - assert ( adapter ); + assert(adapter); if (adapter->Open() == 0) { return 0; @@ -527,30 +537,30 @@ extern "C" } } - SERVER_EXPORT int jack_initialize ( jack_client_t* jack_client, const char* load_init ) + SERVER_EXPORT int jack_initialize(jack_client_t* jack_client, const char* load_init) { JSList* params = NULL; bool parse_params = true; int res = 1; jack_driver_desc_t* desc = jack_get_descriptor(); - Jack::JackArgParser parser ( load_init ); - if ( parser.GetArgc() > 0 ) - parse_params = parser.ParseParams ( desc, ¶ms ); + Jack::JackArgParser parser(load_init); + if (parser.GetArgc() > 0) + parse_params = parser.ParseParams(desc, ¶ms); if (parse_params) { - res = jack_internal_initialize ( jack_client, params ); - parser.FreeParams ( params ); + res = jack_internal_initialize(jack_client, params); + parser.FreeParams(params); } return res; } - SERVER_EXPORT void jack_finish ( void* arg ) + SERVER_EXPORT void jack_finish(void* arg) { - Jack::JackAudioAdapter* adapter = static_cast ( arg ); + Jack::JackAudioAdapter* adapter = static_cast(arg); if (adapter) { - jack_log ( "Unloading netadapter" ); + jack_log("Unloading netadapter"); adapter->Close(); delete adapter; } diff --git a/macosx/Jackdmp.xcodeproj/project.pbxproj b/macosx/Jackdmp.xcodeproj/project.pbxproj index c096e20e..f7295c90 100644 --- a/macosx/Jackdmp.xcodeproj/project.pbxproj +++ b/macosx/Jackdmp.xcodeproj/project.pbxproj @@ -13694,7 +13694,10 @@ LIBRARY_STYLE = DYNAMIC; MACH_O_TYPE = mh_dylib; OTHER_CFLAGS = ""; - OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA"; + OTHER_CPLUSPLUSFLAGS = ( + "-DHAVE_CELT", + "-DMACH_RPC_MACH_SEMA", + ); OTHER_LDFLAGS = ( /usr/local/lib/libsamplerate.a, "-framework", @@ -13745,7 +13748,10 @@ MACH_O_TYPE = mh_dylib; MACOSX_DEPLOYMENT_TARGET = 10.4; OTHER_CFLAGS = ""; - OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA"; + OTHER_CPLUSPLUSFLAGS = ( + "-DHAVE_CELT", + "-DMACH_RPC_MACH_SEMA", + ); OTHER_LDFLAGS = ( /opt/local/lib/libsamplerate.a, "-framework", @@ -17627,8 +17633,13 @@ INSTALL_PATH = /usr/local/lib; LIBRARY_STYLE = DYNAMIC; MACH_O_TYPE = mh_dylib; - OTHER_CFLAGS = ""; - OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA"; + OTHER_CFLAGS = "-DJACK_32_64"; + OTHER_CPLUSPLUSFLAGS = ( + "-DJACK_32_64", + "-DHAVE_CELT", + "-DSERVER_SIDE", + "-DMACH_RPC_MACH_SEMA", + ); OTHER_LDFLAGS = ( /opt/local/lib/libsamplerate.a, "-framework", @@ -17679,9 +17690,10 @@ MACOSX_DEPLOYMENT_TARGET = 10.4; OTHER_CFLAGS = "-DJACK_32_64"; OTHER_CPLUSPLUSFLAGS = ( + "-DJACK_32_64", + "-DHAVE_CELT", "-DSERVER_SIDE", "-DMACH_RPC_MACH_SEMA", - "-DJACK_32_64", ); OTHER_LDFLAGS = ( /opt/local/lib/libsamplerate.a,