Browse Source

0.74.2 - new transport control files

git-svn-id: svn+ssh://jackaudio.org/trunk/jack@438 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/0.109.0
joq 22 years ago
parent
commit
2bf1032010
8 changed files with 165 additions and 65 deletions
  1. +11
    -1
      configure.in
  2. +1
    -1
      jackd/Makefile.am
  3. +7
    -33
      jackd/engine.c
  4. +63
    -0
      jackd/transengine.c
  5. +24
    -0
      jackd/transengine.h
  6. +2
    -1
      libjack/Makefile.am
  7. +0
    -29
      libjack/client.c
  8. +57
    -0
      libjack/transclient.c

+ 11
- 1
configure.in View File

@@ -14,7 +14,7 @@ dnl changes are made
dnl ---
JACK_MAJOR_VERSION=0
JACK_MINOR_VERSION=74
JACK_MICRO_VERSION=1
JACK_MICRO_VERSION=2

dnl ---
dnl HOWTO: updating the jack protocal version
@@ -164,6 +164,16 @@ AC_ARG_ENABLE(capabilities,
]
)

with_oldtrans=yes
AC_ARG_ENABLE(oldtrans,
[ --disable-oldtrans remove old transport interfaces],
[ if test "x$enable_oldtrans" = "xno" ; then
with_oldtrans=no
fi ])
if test "x$with_oldtrans" != "xno" ; then
AC_DEFINE(OLD_TRANSPORT,,[Include old transport interfaces])
fi

STRIPPED_JACKD=false
AC_ARG_ENABLE(stripped-jackd,
[ --enable-stripped-jackd strip jack before computing its md5 sum ],


+ 1
- 1
jackd/Makefile.am View File

@@ -23,7 +23,7 @@ bin_PROGRAMS = jackd $(CAP_PROGS)

AM_CFLAGS = $(JACK_CFLAGS) -DJACKD_LOCATION=\"$(bindir)/jackd\"

jackd_SOURCES = jackd.c engine.c
jackd_SOURCES = jackd.c engine.c transengine.c
jackd_LDADD = ../libjack/libjack.la -lm -ldl -lrt -lpthread $(CAP_LIBS)

noinst_HEADERS = jack_md5.h md5.h md5_loc.h


+ 7
- 33
jackd/engine.c View File

@@ -59,6 +59,8 @@
#include <sys/capability.h>
#endif

#include "transengine.h"

#define JACK_ERROR_WITH_SOCKETS 10000000

typedef struct {
@@ -395,14 +397,6 @@ jack_set_buffer_size (jack_engine_t *engine, jack_nframes_t nframes)
return 0;
}

static int
jack_set_sample_rate (jack_engine_t *engine, jack_nframes_t nframes)
{
engine->control->current_time.frame_rate = nframes;
engine->control->pending_time.frame_rate = nframes;
return 0;
}

static JSList *
jack_process_internal(jack_engine_t *engine, JSList *node, jack_nframes_t nframes)
{
@@ -711,19 +705,6 @@ jack_remove_clients (jack_engine_t* engine)
jack_engine_reset_rolling_usecs (engine);
}

static void
jack_reset_transport (jack_engine_t *engine)
{
engine->control->current_time.frame = 0;
engine->control->pending_time.frame = 0;
engine->control->current_time.transport_state = JackTransportStopped;
engine->control->pending_time.transport_state = JackTransportStopped;
engine->control->current_time.valid =
JackTransportState|JackTransportPosition;
engine->control->pending_time.valid =
JackTransportState|JackTransportPosition;
}

static void
jack_engine_post_process (jack_engine_t *engine)
{
@@ -732,13 +713,7 @@ jack_engine_post_process (jack_engine_t *engine)
JSList *node;
int need_remove = FALSE;

/* maintain the current_time.usecs and frame_rate values, since clients
are not permitted to set these.
*/

engine->control->pending_time.usecs = engine->control->current_time.usecs;
engine->control->pending_time.frame_rate = engine->control->current_time.frame_rate;
engine->control->current_time = engine->control->pending_time;
jack_transport_cycle_end (engine);
/* find any clients that need removal due to timeouts, etc. */
@@ -1363,7 +1338,7 @@ jack_client_deactivate (jack_engine_t *engine, jack_client_id_t id)

if (client == engine->timebase_client) {
engine->timebase_client = 0;
jack_reset_transport (engine);
jack_transport_reset (engine);
}
for (portnode = client->ports; portnode; portnode = jack_slist_next (portnode)) {
@@ -1828,9 +1803,8 @@ jack_engine_new (int realtime, int rtpriority, int verbose, int client_timeout)
engine->control->cpu_load = 0;
engine->control->buffer_size = 0;
engine->control->current_time.frame_rate = 0;
engine->control->pending_time.frame_rate = 0;
jack_reset_transport (engine);
jack_set_sample_rate (engine, 0);
jack_transport_reset (engine);
engine->control->internal = 0;

engine->control->has_capabilities = 0;
@@ -2337,7 +2311,7 @@ jack_zombify_client (jack_engine_t *engine, jack_client_internal_t *client)
if (client == engine->timebase_client) {
engine->timebase_client = 0;
jack_reset_transport (engine);
jack_transport_reset (engine);
}

jack_client_disconnect (engine, client);


+ 63
- 0
jackd/transengine.c View File

@@ -0,0 +1,63 @@
/*
JACK transport engine -- runs in the server process.

Copyright (C) 2001-2003 Paul Davis
Copyright (C) 2003 Jack O'Quin
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/

#include <config.h>
#include <jack/internal.h>
#include <jack/engine.h>
#include "transengine.h"

int
jack_set_sample_rate (jack_engine_t *engine, jack_nframes_t nframes)
{
engine->control->current_time.frame_rate = nframes;
engine->control->pending_time.frame_rate = nframes;
return 0;
}

void
jack_transport_cycle_end (jack_engine_t *engine)
{
jack_control_t *ctl = engine->control;

/* maintain the current_time.usecs and frame_rate values,
since clients are not permitted to set them.
*/
ctl->pending_time.usecs = ctl->current_time.usecs;
ctl->pending_time.frame_rate = ctl->current_time.frame_rate;
ctl->current_time = ctl->pending_time;
}

void
jack_transport_reset (jack_engine_t *engine)
{
#ifdef OLD_TRANSPORT
jack_control_t *ctl = engine->control;

ctl->current_time.frame = 0;
ctl->pending_time.frame = 0;
ctl->current_time.transport_state = JackTransportStopped;
ctl->pending_time.transport_state = JackTransportStopped;
ctl->current_time.valid =
JackTransportState|JackTransportPosition;
ctl->pending_time.valid =
JackTransportState|JackTransportPosition;
#endif /* OLD_TRANSPORT */
}

+ 24
- 0
jackd/transengine.h View File

@@ -0,0 +1,24 @@
/*
Internal interfaces to JACK transport engine.

Copyright (C) 2003 Jack O'Quin
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.
*/

int jack_set_sample_rate (jack_engine_t *engine,
jack_nframes_t nframes);
void jack_transport_cycle_end (jack_engine_t *engine);
void jack_transport_reset (jack_engine_t *engine);

+ 2
- 1
libjack/Makefile.am View File

@@ -6,7 +6,8 @@ SOURCE_FILES = \
driver.c \
pool.c \
port.c \
timestamps.c
timestamps.c \
transclient.c

lib_LTLIBRARIES = libjack.la



+ 0
- 29
libjack/client.c View File

@@ -1332,18 +1332,6 @@ jack_disconnect (jack_client_t *client, const char *source_port, const char *des
return jack_client_deliver_request (client, &req);
}

int
jack_engine_takeover_timebase (jack_client_t *client)

{
jack_request_t req;

req.type = SetTimeBaseClient;
req.x.client_id = client->control->id;

return jack_client_deliver_request (client, &req);
}

void
jack_set_error_function (void (*func) (const char *))
{
@@ -1567,23 +1555,6 @@ jack_frame_time (const jack_client_t *client)
return current.frames + elapsed;
}


/* TRANSPORT CONTROL */

void
jack_get_transport_info (jack_client_t *client,
jack_transport_info_t *info)
{
*info = client->engine->current_time;
}

void
jack_set_transport_info (jack_client_t *client,
jack_transport_info_t *info)
{
client->engine->pending_time = *info;
}

float
jack_cpu_load (jack_client_t *client)
{


+ 57
- 0
libjack/transclient.c View File

@@ -0,0 +1,57 @@
/*
JACK transport client interface -- runs in the client process.

Copyright (C) 2001-2003 Paul Davis
Copyright (C) 2003 Jack O'Quin
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/

#include <config.h>
#include <jack/internal.h>
#include "local.h"


#ifdef OLD_TRANSPORT

/* * * API functions for compatibility with old transport interface * * */

int
jack_engine_takeover_timebase (jack_client_t *client)

{
jack_request_t req;

req.type = SetTimeBaseClient;
req.x.client_id = client->control->id;

return jack_client_deliver_request (client, &req);
}

void
jack_get_transport_info (jack_client_t *client,
jack_transport_info_t *info)
{
*info = client->engine->current_time;
}

void
jack_set_transport_info (jack_client_t *client,
jack_transport_info_t *info)
{
client->engine->pending_time = *info;
}

#endif /* OLD_TRANSPORT */

Loading…
Cancel
Save