Browse Source

fix location of "tied" flag in port structure - needed to be in shared part

git-svn-id: svn+ssh://jackaudio.org/trunk/jack@246 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/0.109.0
pbd 23 years ago
parent
commit
992d6663e9
5 changed files with 82 additions and 42 deletions
  1. +10
    -3
      configure.in
  2. +50
    -17
      example-clients/metro.c
  3. +14
    -14
      jack/port.h
  4. +1
    -1
      libjack/Makefile.am
  5. +7
    -7
      libjack/client.c

+ 10
- 3
configure.in View File

@@ -5,15 +5,22 @@ AC_CONFIG_AUX_DIR(.)

JACK_MAJOR_VERSION=0
JACK_MINOR_VERSION=38
JACK_MICRO_VERSION=0
JACK_MICRO_VERSION=1

BETA=
JACK_API_CURRENT=0
JACK_API_REVISION=4
JACK_API_AGE=0

AC_SUBST(JACK_MAJOR_VERSION)
AC_SUBST(JACK_MINOR_VERSION)
AC_SUBST(JACK_MICRO_VERSION)

JACK_SO_VERSION=${JACK_MAJOR_VERSION}:${JACK_MINOR_VERSION}:${JACK_MICRO_VERSION}${BETA}
AC_SUBST(JACK_API_MAJOR_VERSION)
AC_SUBST(JACK_API_MINOR_VERSION)
AC_SUBST(JACK_API_MICRO_VERSION)

JACK_SO_VERSION=${JACK_API_CURRENT}:${JACK_API_REVISION}:${JACK_API_AGE}

JACK_VERSION=$JACK_MAJOR_VERSION.$JACK_MINOR_VERSION.${JACK_MICRO_VERSION}${BETA}
JACK_RELEASE=$JACK_MAJOR_VERSION-$JACK_MINOR_VERSION-${JACK_MICRO_VERSION}${BETA}



+ 50
- 17
example-clients/metro.c View File

@@ -22,6 +22,7 @@
#include <unistd.h>
#include <math.h>
#include <jack/jack.h>
#include <jack/transport.h>
#include <glib.h>
#include <getopt.h>
#include <string.h>
@@ -37,7 +38,9 @@ int freq = 880;
int bpm;
jack_nframes_t tone_length, wave_length;
sample_t *wave;
long pos = 0;
long offset = 0;
int transport_aware = 0;
jack_transport_state_t transport_state;

void
usage ()
@@ -51,25 +54,55 @@ usage: jack_metro
[ --attack OR -a attack (in percent of duration) ]
[ --decay OR -d decay (in percent of duration) ]
[ --name OR -n jack name for metronome client ]
[ --transport OR -t transport aware ]
--bpm OR -b beats per minute
");
}

int
process (jack_nframes_t nframes, void *arg)
void
process_silence (jack_nframes_t nframes)
{
sample_t *buffer = (sample_t *) jack_port_get_buffer (output_port, nframes);
memset (buffer, 0, sizeof (jack_default_audio_sample_t) * nframes);
}

void
process_audio (jack_nframes_t nframes)
{
sample_t *buffer = (sample_t *) jack_port_get_buffer(output_port, nframes);

sample_t *buffer = (sample_t *) jack_port_get_buffer (output_port, nframes);
jack_nframes_t frames_left = nframes;
while (wave_length - pos < frames_left) {
memcpy (buffer + (nframes - frames_left), wave + pos, sizeof (sample_t) * (wave_length - pos));
frames_left -= wave_length - pos;
pos = 0;
while (wave_length - offset < frames_left) {
memcpy (buffer + (nframes - frames_left), wave + offset, sizeof (sample_t) * (wave_length - offset));
frames_left -= wave_length - offset;
offset = 0;
}
if (frames_left > 0) {
memcpy (buffer + (nframes - frames_left), wave + pos, sizeof (sample_t) * frames_left);
pos += frames_left;
memcpy (buffer + (nframes - frames_left), wave + offset, sizeof (sample_t) * frames_left);
offset += frames_left;
}
}

int
process (jack_nframes_t nframes, void *arg)
{
jack_transport_info_t ti;
if (transport_aware) {
ti.valid = JackTransportPosition | JackTransportState;
jack_get_transport_info (client, &ti);

// not rolling, bail out
if (ti.state == JackTransportStopped) {
process_silence (nframes);
return 0;
}
offset = ti.position % wave_length;
}

process_audio (nframes);

return 0;
}

@@ -101,7 +134,7 @@ main (int argc, char *argv[])
char *bpm_string = "bpm";
int verbose = 0;

const char *options = "f:A:D:a:d:b:n:hv";
const char *options = "f:A:D:a:d:b:n:thv";
struct option long_options[] =
{
{"frequency", 1, 0, 'f'},
@@ -111,6 +144,7 @@ main (int argc, char *argv[])
{"decay", 1, 0, 'd'},
{"bpm", 1, 0, 'b'},
{"name", 1, 0, 'n'},
{"transport", 0, 0, 't'},
{"help", 0, 0, 'h'},
{"verbose", 0, 0, 'v'},
{0, 0, 0, 0}
@@ -132,7 +166,7 @@ main (int argc, char *argv[])
break;
case 'D':
dur_arg = atoi (optarg);
fprintf (stderr, "durarg = %lu\n", dur_arg);
fprintf (stderr, "durarg = %u\n", dur_arg);
break;
case 'a':
if (((attack_percent = atoi (optarg)) < 0) || (attack_percent > 100)) {
@@ -155,7 +189,6 @@ main (int argc, char *argv[])
bpm_string = (char *) malloc ((strlen (optarg) + 4) * sizeof (char));
strcpy (bpm_string, optarg);
strcat (bpm_string, "_bpm");
fprintf (stderr, "bpm = %lu\n", bpm);
break;
case 'n':
client_name = (char *) malloc (strlen (optarg) * sizeof (char));
@@ -164,6 +197,9 @@ main (int argc, char *argv[])
case 'v':
verbose = 1;
break;
case 't':
transport_aware = 1;
break;
default:
fprintf (stderr, "unknown option %c\n", opt);
case 'h':
@@ -232,9 +268,6 @@ main (int argc, char *argv[])
return 1;
}

if (verbose) {
}

while (1) {
sleep(1);
};


+ 14
- 14
jack/port.h View File

@@ -59,22 +59,23 @@ typedef struct _jack_port_type_info {
*/

typedef struct _jack_port_shared {
int shm_key;
size_t offset;
int shm_key;
size_t offset;
unsigned long flags;
unsigned long buffer_size;
jack_port_id_t id;
char name[JACK_CLIENT_NAME_SIZE+JACK_PORT_NAME_SIZE+2];
jack_port_type_info_t type_info;
jack_client_id_t client_id;
unsigned long flags;
unsigned long buffer_size;
jack_port_id_t id;
char name[JACK_CLIENT_NAME_SIZE+JACK_PORT_NAME_SIZE+2];
jack_port_type_info_t type_info;
jack_client_id_t client_id;

volatile jack_nframes_t latency;
volatile jack_nframes_t total_latency;
volatile unsigned char monitor_requests;
volatile jack_nframes_t latency;
volatile jack_nframes_t total_latency;
volatile unsigned char monitor_requests;

char in_use : 1;
char locked : 1;
char in_use : 1;
char locked : 1;
struct _jack_port *tied;

} jack_port_shared_t;

@@ -88,7 +89,6 @@ struct _jack_port {
struct _jack_port_shared *shared;
pthread_mutex_t connection_lock;
GSList *connections;
struct _jack_port *tied;
};

/* inline would be cleaner, but it needs to be fast even in non-optimized


+ 1
- 1
libjack/Makefile.am View File

@@ -7,5 +7,5 @@ lib_LTLIBRARIES = libjack.la

libjack_la_SOURCES = client.c pool.c driver.c
libjack_la_LIBADD = $(GLIB_LIBS) -lm -lpthread
libjack_la_LDFLAGS = -export-dynamic -release @VERSION@ -version-info 0:0:0
libjack_la_LDFLAGS = -export-dynamic -version-info @JACK_SO_VERSION@


+ 7
- 7
libjack/client.c View File

@@ -1120,7 +1120,7 @@ jack_port_new (jack_client_t *client, jack_port_id_t port_id, jack_control_t *co
port->shared = shared;
pthread_mutex_init (&port->connection_lock, NULL);
port->connections = 0;
port->tied = NULL;
port->shared->tied = NULL;

si = NULL;

@@ -1374,8 +1374,8 @@ jack_port_get_buffer (jack_port_t *port, jack_nframes_t nframes)
*/

if (port->shared->flags & JackPortIsOutput) {
if (port->tied) {
return jack_port_get_buffer (port->tied, nframes);
if (port->shared->tied) {
return jack_port_get_buffer (port->shared->tied, nframes);
}
return jack_port_buffer (port);
}
@@ -1402,7 +1402,7 @@ jack_port_get_buffer (jack_port_t *port, jack_nframes_t nframes)
the buffer of the connected (output) port.
*/

return jack_port_buffer (((jack_port_t *) node->data));
return jack_port_get_buffer (((jack_port_t *) node->data), nframes);
}

/* multiple connections. use a local buffer and mixdown
@@ -1441,7 +1441,7 @@ jack_port_tie (jack_port_t *src, jack_port_t *dst)
return -1;
}

dst->tied = src;
dst->shared->tied = src;
return 0;
}

@@ -1449,11 +1449,11 @@ int
jack_port_untie (jack_port_t *port)

{
if (port->tied == NULL) {
if (port->shared->tied == NULL) {
jack_error ("port \"%s\" is not tied", port->shared->name);
return -1;
}
port->tied = NULL;
port->shared->tied = NULL;
return 0;
}



Loading…
Cancel
Save