diff --git a/ChangeLog b/ChangeLog index a4b2949f..7accf2fc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -22,6 +22,10 @@ Florian Faber Jackdmp changes log --------------------------- +2008-08-03 Stephane Letz + + * Fix JackFrameTimer::Time2Frames and JackTimer::Frames2Time, jack_cpu compiled again. + 2008-08-01 Stephane Letz * Fix desallocation of remaining clients when server quits. diff --git a/common/JackConstants.h b/common/JackConstants.h index 4127d7ca..3931caf4 100644 --- a/common/JackConstants.h +++ b/common/JackConstants.h @@ -68,9 +68,9 @@ namespace Jack #define ALL_CLIENTS -1 // for notification #if defined(__ppc64__) || defined(__x86_64__) -#define JACK_PROTOCOL_VERSION 5 +#define JACK_PROTOCOL_VERSION 6 #else -#define JACK_PROTOCOL_VERSION 4 +#define JACK_PROTOCOL_VERSION 5 #endif #define SOCKET_TIME_OUT 5 // in sec diff --git a/common/JackFilters.h b/common/JackFilters.h index 89e8f551..638b02ff 100644 --- a/common/JackFilters.h +++ b/common/JackFilters.h @@ -116,13 +116,13 @@ namespace Jack jack_nframes_t Time2Frames(jack_time_t time) { - long delta = (long) rint(((double) (long(time - fCurrentWakeup)) / ((jack_time_t)(fNextWakeUp - fCurrentWakeup))) * fBufferSize); + long delta = (long) rint(((double) ((long long)(time - fCurrentWakeup)) / ((long long)(fNextWakeUp - fCurrentWakeup))) * fBufferSize); return (delta < 0) ? ((fFrames > 0) ? fFrames : 1) : (fFrames + delta); } jack_time_t Frames2Time(jack_nframes_t frames) { - long delta = (long) rint(((double) (long(frames - fFrames)) * ((jack_time_t)(fNextWakeUp - fCurrentWakeup))) / fBufferSize); + long delta = (long) rint(((double) ((long long)(frames - fFrames)) * ((long long)(fNextWakeUp - fCurrentWakeup))) / fBufferSize); return (delta < 0) ? ((fCurrentWakeup > 0) ? fCurrentWakeup : 1) : (fCurrentWakeup + delta); } diff --git a/common/JackFrameTimer.cpp b/common/JackFrameTimer.cpp index b3064851..809c6cdc 100644 --- a/common/JackFrameTimer.cpp +++ b/common/JackFrameTimer.cpp @@ -25,6 +25,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "JackFrameTimer.h" #include "JackError.h" #include +#include namespace Jack { @@ -53,7 +54,7 @@ JackTimer::JackTimer() jack_nframes_t JackTimer::Time2Frames(jack_time_t time, jack_nframes_t buffer_size) { if (fInitialized) { - return fFrames + (long)rint(((double) ((time - fCurrentWakeup)) / ((jack_time_t)(fNextWakeUp - fCurrentWakeup))) * buffer_size); + return fFrames + (long)rint(((double) ((long long)(time - fCurrentWakeup)) / ((long long)(fNextWakeUp - fCurrentWakeup))) * buffer_size); } else { return 0; } @@ -62,7 +63,7 @@ jack_nframes_t JackTimer::Time2Frames(jack_time_t time, jack_nframes_t buffer_si jack_time_t JackTimer::Frames2Time(jack_nframes_t frames, jack_nframes_t buffer_size) { if (fInitialized) { - return fCurrentWakeup + (long)rint(((double) ((frames - fFrames)) * ((jack_time_t)(fNextWakeUp - fCurrentWakeup))) / buffer_size); + return fCurrentWakeup + (long)rint(((double) ((long long)(frames - fFrames)) * ((long long)(fNextWakeUp - fCurrentWakeup))) / buffer_size); } else { return 0; } @@ -115,6 +116,8 @@ void JackFrameTimer::ReadFrameTime(JackTimer* timer) cur_index = next_index; memcpy(timer, ReadCurrentState(), sizeof(JackTimer)); next_index = GetCurrentIndex(); + if (cur_index != next_index) + printf("JackFrameTimer::ReadFrameTime loop\n"); } while (cur_index != next_index); // Until a coherent state has been read } diff --git a/common/JackRequest.h b/common/JackRequest.h index 4c96323d..9c24044c 100644 --- a/common/JackRequest.h +++ b/common/JackRequest.h @@ -130,7 +130,8 @@ struct JackClientCheckRequest : public JackRequest JackClientCheckRequest() {} - JackClientCheckRequest(const char* name, int protocol, int options): JackRequest(JackRequest::kClientCheck), fProtocol(protocol), fOptions(options) + JackClientCheckRequest(const char* name, int protocol, int options) + : JackRequest(JackRequest::kClientCheck), fProtocol(protocol), fOptions(options) { snprintf(fName, sizeof(fName), "%s", name); } @@ -293,7 +294,8 @@ struct JackActivateRequest : public JackRequest JackActivateRequest() {} - JackActivateRequest(int refnum, int state): JackRequest(JackRequest::kActivateClient), fRefNum(refnum), fState(state) + JackActivateRequest(int refnum, int state) + : JackRequest(JackRequest::kActivateClient), fRefNum(refnum), fState(state) {} int Read(JackChannelTransaction* trans) @@ -419,7 +421,8 @@ struct JackPortUnRegisterRequest : public JackRequest JackPortUnRegisterRequest() {} - JackPortUnRegisterRequest(int refnum, int index): JackRequest(JackRequest::kUnRegisterPort), fRefNum(refnum), fPortIndex(index) + JackPortUnRegisterRequest(int refnum, int index) + : JackRequest(JackRequest::kUnRegisterPort), fRefNum(refnum), fPortIndex(index) {} int Read(JackChannelTransaction* trans) @@ -451,7 +454,8 @@ struct JackPortConnectNameRequest : public JackRequest JackPortConnectNameRequest() {} - JackPortConnectNameRequest(int refnum, const char* src_name, const char* dst_name): JackRequest(JackRequest::kConnectNamePorts), fRefNum(refnum) + JackPortConnectNameRequest(int refnum, const char* src_name, const char* dst_name) + : JackRequest(JackRequest::kConnectNamePorts), fRefNum(refnum) { strcpy(fSrc, src_name); strcpy(fDst, dst_name); @@ -489,7 +493,8 @@ struct JackPortDisconnectNameRequest : public JackRequest JackPortDisconnectNameRequest() {} - JackPortDisconnectNameRequest(int refnum, const char* src_name, const char* dst_name): JackRequest(JackRequest::kDisconnectNamePorts), fRefNum(refnum) + JackPortDisconnectNameRequest(int refnum, const char* src_name, const char* dst_name) + : JackRequest(JackRequest::kDisconnectNamePorts), fRefNum(refnum) { strcpy(fSrc, src_name); strcpy(fDst, dst_name); @@ -526,7 +531,8 @@ struct JackPortConnectRequest : public JackRequest JackPortConnectRequest() {} - JackPortConnectRequest(int refnum, jack_port_id_t src, jack_port_id_t dst): JackRequest(JackRequest::kConnectPorts), fRefNum(refnum), fSrc(src), fDst(dst) + JackPortConnectRequest(int refnum, jack_port_id_t src, jack_port_id_t dst) + : JackRequest(JackRequest::kConnectPorts), fRefNum(refnum), fSrc(src), fDst(dst) {} int Read(JackChannelTransaction* trans) @@ -561,7 +567,8 @@ struct JackPortDisconnectRequest : public JackRequest JackPortDisconnectRequest() {} - JackPortDisconnectRequest(int refnum, jack_port_id_t src, jack_port_id_t dst): JackRequest(JackRequest::kDisconnectPorts), fRefNum(refnum), fSrc(src), fDst(dst) + JackPortDisconnectRequest(int refnum, jack_port_id_t src, jack_port_id_t dst) + : JackRequest(JackRequest::kDisconnectPorts), fRefNum(refnum), fSrc(src), fDst(dst) {} int Read(JackChannelTransaction* trans) @@ -594,7 +601,8 @@ struct JackSetBufferSizeRequest : public JackRequest JackSetBufferSizeRequest() {} - JackSetBufferSizeRequest(jack_nframes_t buffer_size): JackRequest(JackRequest::kSetBufferSize), fBufferSize(buffer_size) + JackSetBufferSizeRequest(jack_nframes_t buffer_size) + : JackRequest(JackRequest::kSetBufferSize), fBufferSize(buffer_size) {} int Read(JackChannelTransaction* trans) @@ -620,7 +628,8 @@ struct JackSetFreeWheelRequest : public JackRequest JackSetFreeWheelRequest() {} - JackSetFreeWheelRequest(int onoff): JackRequest(JackRequest::kSetFreeWheel), fOnOff(onoff) + JackSetFreeWheelRequest(int onoff) + : JackRequest(JackRequest::kSetFreeWheel), fOnOff(onoff) {} int Read(JackChannelTransaction* trans) @@ -646,7 +655,8 @@ struct JackReleaseTimebaseRequest : public JackRequest JackReleaseTimebaseRequest() {} - JackReleaseTimebaseRequest(int refnum): JackRequest(JackRequest::kReleaseTimebase), fRefNum(refnum) + JackReleaseTimebaseRequest(int refnum) + : JackRequest(JackRequest::kReleaseTimebase), fRefNum(refnum) {} int Read(JackChannelTransaction* trans) @@ -673,7 +683,8 @@ struct JackSetTimebaseCallbackRequest : public JackRequest JackSetTimebaseCallbackRequest() {} - JackSetTimebaseCallbackRequest(int refnum, int conditional): JackRequest(JackRequest::kSetTimebaseCallback), fRefNum(refnum), fConditionnal(conditional) + JackSetTimebaseCallbackRequest(int refnum, int conditional) + : JackRequest(JackRequest::kSetTimebaseCallback), fRefNum(refnum), fConditionnal(conditional) {} int Read(JackChannelTransaction* trans) diff --git a/tests/jack_cpu.c b/tests/jack_cpu.c index 402bc210..a9e2e066 100644 --- a/tests/jack_cpu.c +++ b/tests/jack_cpu.c @@ -36,14 +36,12 @@ jack_port_t *input_port; jack_port_t *output_port; jack_client_t *client; unsigned long sr; -int idle_time = 0; +jack_nframes_t idle_time = 0; int percent_cpu = 0; int time_to_run = 0; int time_before_run = 0; int time_before_exit = 1; jack_nframes_t cur_buffer_size; -jack_nframes_t start_frame; -jack_nframes_t cur_frame; /* a simple state machine for this client */ volatile enum { @@ -63,12 +61,12 @@ void usage() ); } -JackBufferSizeCallback update_buffer_size() +int update_buffer_size(jack_nframes_t nframes, void *arg) { - cur_buffer_size = jack_get_buffer_size(client); + cur_buffer_size = nframes; printf("Buffer size = %d \n", cur_buffer_size); - idle_time = (int) (cur_buffer_size * percent_cpu / 100); - printf("CPU load applies as %d sample delay.\n",idle_time); + idle_time = (jack_nframes_t) (cur_buffer_size * percent_cpu / 100); + printf("CPU load applies as %d sample delay.\n", idle_time); return 0; } @@ -76,30 +74,29 @@ JackBufferSizeCallback update_buffer_size() * The process callback for this JACK application is called in a * special realtime thread once for each audio cycle. * - * This client follows a simple rule: when the JACK transport is - * running, copy the input port to the output. When it stops, exit. */ int process(jack_nframes_t nframes, void *arg) { jack_default_audio_sample_t *in, *out; - start_frame = jack_frame_time(client); + jack_nframes_t start_frame = jack_frame_time(client); in = (jack_default_audio_sample_t *) jack_port_get_buffer (input_port, nframes); out = (jack_default_audio_sample_t *) jack_port_get_buffer (output_port, nframes); memset(out, 0, sizeof (jack_default_audio_sample_t) * nframes); - + while ((client_state == Run) && (jack_frame_time(client) < (start_frame + idle_time))) {} - return 0; + return 0; } /** * JACK calls this shutdown_callback if the server ever shuts down or * decides to disconnect the client. */ + void jack_shutdown(void *arg) { - printf("Jack_cpu has been kicked out by jackd !"); + printf("Jack_cpu has been kicked out by jackd !\n"); exit (1); } @@ -108,6 +105,7 @@ int main(int argc, char *argv[]) const char **ports; const char *client_name; int got_time = 0; + jack_status_t status; int option_index; int opt; @@ -154,12 +152,18 @@ int main(int argc, char *argv[]) /* open a client connection to the JACK server */ - client = jack_client_new(client_name); - + client = jack_client_open (client_name, JackNoStartServer, &status); + if (client == NULL) { fprintf(stderr, "jack_client_open() failed : is jack server running ?\n"); exit(1); } + + cur_buffer_size = jack_get_buffer_size(client); + printf("engine buffer size = %d \n", cur_buffer_size); + printf("engine sample rate: %d Hz\n", jack_get_sample_rate(client)); + idle_time = (jack_nframes_t) (cur_buffer_size * percent_cpu / 100); + printf("CPU load applies as %d sample delay.\n", idle_time); /* tell the JACK server to call `process()' whenever there is work to be done. @@ -174,12 +178,6 @@ int main(int argc, char *argv[]) jack_on_shutdown(client, jack_shutdown, 0); - /* display the current sample rate. - */ - - printf("engine sample rate: %d Hz\n", jack_get_sample_rate(client)); - printf("computing time in samples : %d \n", idle_time); - /* create two ports */ input_port = jack_port_register (client, "input", JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0); @@ -191,13 +189,11 @@ int main(int argc, char *argv[]) exit(1); } - if (jack_set_buffer_size_callback(client, update_buffer_size(), 0) != 0) { + if (jack_set_buffer_size_callback(client, update_buffer_size, 0) != 0) { printf("Error when calling buffer_size_callback !"); return -1; } - if (time_before_run == 0) - client_state = Run; /* Tell the JACK server that we are ready to roll. Our * process() callback will start running now. */ diff --git a/tests/wscript b/tests/wscript index c60456e8..daf94ceb 100644 --- a/tests/wscript +++ b/tests/wscript @@ -2,11 +2,12 @@ # encoding: utf-8 test_programs = { - 'synchroClient': ['testSynchroClient.cpp'], - 'synchroServer': ['testSynchroServer.cpp'], - 'synchroServerClient': ['testSynchroServerClient.cpp'], + #'synchroClient': ['testSynchroClient.cpp'], + #'synchroServer': ['testSynchroServer.cpp'], + #'synchroServerClient': ['testSynchroServerClient.cpp'], 'testSem': ['testSem.cpp'], 'jack_test': ['jack_test.cpp'], + 'jack_cpu': ['jack_cpu.c'], } def build(bld): @@ -23,5 +24,5 @@ def build(bld): prog.env.append_value("LINKFLAGS", "") prog.uselib_local = 'clientlib' prog.target = test_program - if test_program != 'jack_test': - prog.inst_var = 0 + #if test_program != 'jack_test': + # prog.inst_var = 0