From cde8be9f59e602c89d6bcce14dad1537dcad488b Mon Sep 17 00:00:00 2001 From: sletz Date: Thu, 21 Apr 2011 17:10:42 +0000 Subject: [PATCH] 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,