Browse Source

Correct netmaster.

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@4393 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.9.8
sletz 14 years ago
parent
commit
df0958edfc
1 changed files with 25 additions and 25 deletions
  1. +25
    -25
      example-clients/netmaster.c

+ 25
- 25
example-clients/netmaster.c View File

@@ -1,6 +1,6 @@
/* /*
Copyright (C) 2009 Grame Copyright (C) 2009 Grame
This program is free software; you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or the Free Software Foundation; either version 2 of the License, or
@@ -62,7 +62,7 @@ main (int argc, char *argv[])
const char *options = "b:r:a:p:"; const char *options = "b:r:a:p:";
int option_index; int option_index;
int opt; int opt;
struct option long_options[] = struct option long_options[] =
{ {
{"buffer size", 1, 0, 'b'}, {"buffer size", 1, 0, 'b'},
@@ -71,40 +71,40 @@ main (int argc, char *argv[])
{"port", 1, 0, 'p'}, {"port", 1, 0, 'p'},
{0, 0, 0, 0} {0, 0, 0, 0}
}; };
while ((opt = getopt_long (argc, argv, options, long_options, &option_index)) != EOF) { while ((opt = getopt_long (argc, argv, options, long_options, &option_index)) != EOF) {
switch (opt) { switch (opt) {
case 'b': case 'b':
buffer_size = atoi(optarg); buffer_size = atoi(optarg);
break; break;
case 'r': case 'r':
sample_rate = atoi(optarg); sample_rate = atoi(optarg);
break; break;
case 'a': case 'a':
multicast_ip = strdup(optarg); multicast_ip = strdup(optarg);
break; break;
case 'p': case 'p':
port = atoi(optarg); port = atoi(optarg);
break; break;
case 'h': case 'h':
usage(); usage();
return -1; return -1;
} }
} }
int i; int i;
jack_master_t request = { buffer_size, sample_rate, "master" };
jack_master_t request = { -1, -1, -1, -1, buffer_size, sample_rate, "master" };
jack_slave_t result; jack_slave_t result;
float** audio_input_buffer; float** audio_input_buffer;
float** audio_output_buffer; float** audio_output_buffer;
int wait_usec = (int) ((((float)buffer_size) * 1000000) / ((float)sample_rate)); int wait_usec = (int) ((((float)buffer_size) * 1000000) / ((float)sample_rate));
printf("Waiting for a slave...\n"); printf("Waiting for a slave...\n");


if ((net = jack_net_master_open(DEFAULT_MULTICAST_IP, DEFAULT_PORT, "net_master", &request, &result)) == 0) { if ((net = jack_net_master_open(DEFAULT_MULTICAST_IP, DEFAULT_PORT, "net_master", &request, &result)) == 0) {
@@ -113,7 +113,7 @@ main (int argc, char *argv[])
} }


printf("Slave is running...\n"); printf("Slave is running...\n");
/* install a signal handler to properly quits jack client */ /* install a signal handler to properly quits jack client */
#ifdef WIN32 #ifdef WIN32
signal(SIGINT, signal_handler); signal(SIGINT, signal_handler);
@@ -125,37 +125,37 @@ main (int argc, char *argv[])
signal(SIGHUP, signal_handler); signal(SIGHUP, signal_handler);
signal(SIGINT, signal_handler); signal(SIGINT, signal_handler);
#endif #endif
// Allocate buffers // Allocate buffers
audio_input_buffer = calloc(result.audio_input, sizeof(float*)); audio_input_buffer = calloc(result.audio_input, sizeof(float*));
for (i = 0; i < result.audio_input; i++) { for (i = 0; i < result.audio_input; i++) {
audio_input_buffer[i] = calloc(buffer_size, sizeof(float)); audio_input_buffer[i] = calloc(buffer_size, sizeof(float));
} }
audio_output_buffer = calloc(result.audio_output, sizeof(float*)); audio_output_buffer = calloc(result.audio_output, sizeof(float*));
for (i = 0; i < result.audio_output; i++) { for (i = 0; i < result.audio_output; i++) {
audio_output_buffer[i] = calloc(buffer_size, sizeof(float)); audio_output_buffer[i] = calloc(buffer_size, sizeof(float));
} }
/* /*
Run until interrupted. Run until interrupted.
WARNING !! : this code is given for demonstration purpose. For proper timing bevahiour WARNING !! : this code is given for demonstration purpose. For proper timing bevahiour
it has to be called in a real-time context (which is *not* the case here...) it has to be called in a real-time context (which is *not* the case here...)
*/ */
while (1) { while (1) {
// Copy input to output // Copy input to output
for (i = 0; i < result.audio_input; i++) { for (i = 0; i < result.audio_input; i++) {
memcpy(audio_output_buffer[i], audio_input_buffer[i], buffer_size * sizeof(float)); memcpy(audio_output_buffer[i], audio_input_buffer[i], buffer_size * sizeof(float));
} }
if (jack_net_master_send(net, result.audio_output, audio_output_buffer, 0, NULL) < 0) { if (jack_net_master_send(net, result.audio_output, audio_output_buffer, 0, NULL) < 0) {
printf("jack_net_master_send failure, exiting\n"); printf("jack_net_master_send failure, exiting\n");
break; break;
} }
if (jack_net_master_recv(net, result.audio_input, audio_input_buffer, 0, NULL) < 0) { if (jack_net_master_recv(net, result.audio_input, audio_input_buffer, 0, NULL) < 0) {
printf("jack_net_master_recv failure, exiting\n"); printf("jack_net_master_recv failure, exiting\n");
break; break;
@@ -163,19 +163,19 @@ main (int argc, char *argv[])


usleep(wait_usec); usleep(wait_usec);
}; };
// Wait for application end // Wait for application end
jack_net_master_close(net); jack_net_master_close(net);
for (i = 0; i < result.audio_input; i++) { for (i = 0; i < result.audio_input; i++) {
free(audio_input_buffer[i]); free(audio_input_buffer[i]);
} }
free(audio_input_buffer); free(audio_input_buffer);
for (i = 0; i < result.audio_output; i++) { for (i = 0; i < result.audio_output; i++) {
free(audio_output_buffer[i]); free(audio_output_buffer[i]);
} }
free(audio_output_buffer); free(audio_output_buffer);
exit (0); exit (0);
} }

Loading…
Cancel
Save