summaryrefslogtreecommitdiff
path: root/jackd/transengine.c
diff options
context:
space:
mode:
Diffstat (limited to 'jackd/transengine.c')
-rw-r--r--jackd/transengine.c108
1 files changed, 60 insertions, 48 deletions
diff --git a/jackd/transengine.c b/jackd/transengine.c
index 8c84639..29c9df6 100644
--- a/jackd/transengine.c
+++ b/jackd/transengine.c
@@ -3,21 +3,21 @@
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 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
Lesser 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.
-*/
+ */
#include <config.h>
#include <errno.h>
@@ -70,7 +70,7 @@ jack_sync_poll_deactivate (jack_engine_t *engine,
}
client->control->active_slowsync = 0;
engine->control->sync_clients--;
- assert(engine->control->sync_clients >= 0);
+ assert (engine->control->sync_clients >= 0);
}
/* stop polling all the slow-sync clients
@@ -80,11 +80,11 @@ static void
jack_sync_poll_stop (jack_engine_t *engine)
{
JSList *node;
- long poll_count = 0; /* count sync_poll clients */
+ long poll_count = 0; /* count sync_poll clients */
for (node = engine->clients; node; node = jack_slist_next (node)) {
jack_client_internal_t *client =
- (jack_client_internal_t *) node->data;
+ (jack_client_internal_t*)node->data;
if (client->control->active_slowsync &&
client->control->sync_poll) {
client->control->sync_poll = 0;
@@ -98,7 +98,7 @@ jack_sync_poll_stop (jack_engine_t *engine)
"sync poll halted with %" PRIu32
" clients and %8.6f secs remaining",
engine->control->sync_remain,
- (double) (engine->control->sync_time_left / 1000000.0));
+ (double)(engine->control->sync_time_left / 1000000.0));
engine->control->sync_remain = 0;
engine->control->sync_time_left = 0;
}
@@ -110,11 +110,11 @@ static void
jack_sync_poll_start (jack_engine_t *engine)
{
JSList *node;
- long sync_count = 0; /* count slow-sync clients */
+ long sync_count = 0; /* count slow-sync clients */
for (node = engine->clients; node; node = jack_slist_next (node)) {
jack_client_internal_t *client =
- (jack_client_internal_t *) node->data;
+ (jack_client_internal_t*)node->data;
if (client->control->active_slowsync) {
client->control->sync_poll = 1;
sync_count++;
@@ -127,7 +127,7 @@ jack_sync_poll_start (jack_engine_t *engine)
engine->control->sync_time_left = engine->control->sync_timeout;
VERBOSE (engine, "transport Starting, sync poll of %" PRIu32
" clients for %8.6f secs", engine->control->sync_remain,
- (double) (engine->control->sync_time_left / 1000000.0));
+ (double)(engine->control->sync_time_left / 1000000.0));
}
/* check for sync timeout */
@@ -136,7 +136,7 @@ jack_sync_timeout (jack_engine_t *engine)
{
jack_control_t *ectl = engine->control;
jack_time_t buf_usecs =
- ((ectl->buffer_size * (jack_time_t) 1000000) /
+ ((ectl->buffer_size * (jack_time_t)1000000) /
ectl->current_time.frame_rate);
/* compare carefully, jack_time_t is unsigned */
@@ -184,8 +184,9 @@ jack_timebase_reset (jack_engine_t *engine, jack_uuid_t client_id)
VERBOSE (engine, "%s resigned as timebase master",
client->control->name);
ret = 0;
- } else
+ } else {
ret = EINVAL;
+ }
jack_unlock_graph (engine);
@@ -205,7 +206,7 @@ jack_timebase_set (jack_engine_t *engine,
client = jack_client_internal_by_id (engine, client_id);
if (client == NULL) {
- VERBOSE (engine, " %" PRIu32 " no longer exists", client_id);
+ VERBOSE (engine, " %" PRIu32 " no longer exists", client_id);
jack_unlock_graph (engine);
return EINVAL;
}
@@ -219,9 +220,10 @@ jack_timebase_set (jack_engine_t *engine,
VERBOSE (engine, " %s is already the master",
engine->timebase_client->control->name);
ret = EBUSY;
- } else
+ } else {
VERBOSE (engine, " %s was already timebase master:",
client->control->name);
+ }
} else {
@@ -231,8 +233,9 @@ jack_timebase_set (jack_engine_t *engine,
}
engine->timebase_client = client;
client->control->is_timebase = 1;
- if (client->control->active)
+ if (client->control->active) {
client->control->timebase_new = 1;
+ }
VERBOSE (engine, "new timebase master: %s",
client->control->name);
}
@@ -249,7 +252,7 @@ void
jack_transport_activate (jack_engine_t *engine, jack_client_internal_t *client)
{
if (client->control->is_slowsync) {
- assert(!client->control->active_slowsync);
+ assert (!client->control->active_slowsync);
client->control->active_slowsync = 1;
engine->control->sync_clients++;
jack_sync_poll_new (engine, client);
@@ -274,13 +277,13 @@ jack_transport_init (jack_engine_t *engine)
memset (&ectl->pending_time, 0, sizeof(ectl->pending_time));
memset (&ectl->request_time, 0, sizeof(ectl->request_time));
ectl->prev_request = 0;
- ectl->seq_number = 1; /* can't start at 0 */
+ ectl->seq_number = 1; /* can't start at 0 */
ectl->new_pos = 0;
ectl->pending_pos = 0;
ectl->pending_frame = 0;
ectl->sync_clients = 0;
ectl->sync_remain = 0;
- ectl->sync_timeout = 2000000; /* 2 second default */
+ ectl->sync_timeout = 2000000; /* 2 second default */
ectl->sync_time_left = 0;
}
@@ -303,15 +306,17 @@ jack_transport_client_exit (jack_engine_t *engine,
}
if (client->control->is_slowsync) {
- if (client->control->active_slowsync)
+ if (client->control->active_slowsync) {
jack_sync_poll_deactivate (engine, client);
- if (client->control->dead)
+ }
+ if (client->control->dead) {
client->control->is_slowsync = 0;
+ }
}
}
/* when a new client is being created */
-void
+void
jack_transport_client_new (jack_client_internal_t *client)
{
client->control->is_timebase = 0;
@@ -320,16 +325,16 @@ jack_transport_client_new (jack_client_internal_t *client)
client->control->active_slowsync = 0;
client->control->sync_poll = 0;
client->control->sync_new = 0;
-
+
client->control->sync_cb_cbset = FALSE;
client->control->timebase_cb_cbset = FALSE;
#if 0
if (client->control->type != ClientExternal) {
- client->sync_cb = NULL;
- client->sync_arg = NULL;
- client->timebase_cb = NULL;
- client->timebase_arg = NULL;
+ client->sync_cb = NULL;
+ client->sync_arg = NULL;
+ client->timebase_cb = NULL;
+ client->timebase_arg = NULL;
}
#endif
}
@@ -347,12 +352,14 @@ jack_transport_client_reset_sync (jack_engine_t *engine,
client = jack_client_internal_by_id (engine, client_id);
if (client && (client->control->is_slowsync)) {
- if (client->control->active_slowsync)
+ if (client->control->active_slowsync) {
jack_sync_poll_deactivate (engine, client);
+ }
client->control->is_slowsync = 0;
ret = 0;
- } else
+ } else {
ret = EINVAL;
+ }
jack_unlock_graph (engine);
@@ -393,8 +400,9 @@ jack_transport_client_set_sync (jack_engine_t *engine,
jack_sync_poll_new (engine, client);
}
ret = 0;
- } else
+ } else {
ret = EINVAL;
+ }
DEBUG ("unlocking write lock for set_sync");
jack_unlock_graph (engine);
@@ -411,10 +419,11 @@ void
jack_transport_cycle_end (jack_engine_t *engine)
{
jack_control_t *ectl = engine->control;
- transport_command_t cmd; /* latest transport command */
+ transport_command_t cmd; /* latest transport command */
/* Promote pending_time to current_time. Maintain the usecs,
* frame_rate and frame values, clients may not set them. */
+
ectl->pending_time.usecs = ectl->current_time.usecs;
ectl->pending_time.frame_rate = ectl->current_time.frame_rate;
ectl->pending_time.frame = ectl->pending_frame;
@@ -424,11 +433,11 @@ jack_transport_cycle_end (jack_engine_t *engine)
/* check sync results from previous cycle */
if (ectl->transport_state == JackTransportStarting) {
if ((ectl->sync_remain == 0) ||
- (jack_sync_timeout(engine))) {
+ (jack_sync_timeout (engine))) {
ectl->transport_state = JackTransportRolling;
VERBOSE (engine, "transport Rolling, %8.6f sec"
" left for poll",
- (double) (ectl->sync_time_left / 1000000.0));
+ (double)(ectl->sync_time_left / 1000000.0));
}
}
@@ -437,9 +446,10 @@ jack_transport_cycle_end (jack_engine_t *engine)
if (cmd != ectl->previous_cmd) {
ectl->previous_cmd = cmd;
VERBOSE (engine, "transport command: %s",
- (cmd == TransportCommandStart? "START": "STOP"));
- } else
+ (cmd == TransportCommandStart ? "START" : "STOP"));
+ } else {
cmd = TransportCommandNone;
+ }
/* state transition switch */
@@ -449,7 +459,7 @@ jack_transport_cycle_end (jack_engine_t *engine)
if (cmd == TransportCommandStart) {
if (ectl->sync_clients) {
ectl->transport_state = JackTransportStarting;
- jack_sync_poll_start(engine);
+ jack_sync_poll_start (engine);
} else {
ectl->transport_state = JackTransportRolling;
VERBOSE (engine, "transport Rolling");
@@ -461,12 +471,13 @@ jack_transport_cycle_end (jack_engine_t *engine)
if (cmd == TransportCommandStop) {
ectl->transport_state = JackTransportStopped;
VERBOSE (engine, "transport Stopped");
- if (ectl->sync_remain)
- jack_sync_poll_stop(engine);
+ if (ectl->sync_remain) {
+ jack_sync_poll_stop (engine);
+ }
} else if (ectl->new_pos) {
if (ectl->sync_clients) {
ectl->transport_state = JackTransportStarting;
- jack_sync_poll_start(engine);
+ jack_sync_poll_start (engine);
} else {
ectl->transport_state = JackTransportRolling;
VERBOSE (engine, "transport Rolling");
@@ -478,12 +489,13 @@ jack_transport_cycle_end (jack_engine_t *engine)
if (cmd == TransportCommandStop) {
ectl->transport_state = JackTransportStopped;
VERBOSE (engine, "transport Stopped");
- if (ectl->sync_remain)
- jack_sync_poll_stop(engine);
+ if (ectl->sync_remain) {
+ jack_sync_poll_stop (engine);
+ }
} else if (ectl->new_pos) {
if (ectl->sync_clients) {
ectl->transport_state = JackTransportStarting;
- jack_sync_poll_start(engine);
+ jack_sync_poll_start (engine);
}
}
break;
@@ -497,15 +509,15 @@ jack_transport_cycle_end (jack_engine_t *engine)
if (ectl->transport_state == JackTransportRolling) {
ectl->pending_time.frame =
ectl->current_time.frame + ectl->buffer_size;
- }
+ }
/* See if an asynchronous position request arrived during the
* last cycle. The request_time could change during the
* guarded copy. If so, we use the newest request. */
ectl->pending_pos = 0;
if (ectl->request_time.unique_1 != ectl->prev_request) {
- jack_transport_copy_position(&ectl->request_time,
- &ectl->pending_time);
+ jack_transport_copy_position (&ectl->request_time,
+ &ectl->pending_time);
VERBOSE (engine, "new transport position: %" PRIu32
", id=0x%" PRIx64, ectl->pending_time.frame,
ectl->pending_time.unique_1);
@@ -518,19 +530,19 @@ jack_transport_cycle_end (jack_engine_t *engine)
}
/* driver callback at start of cycle */
-void
+void
jack_transport_cycle_start (jack_engine_t *engine, jack_time_t time)
{
engine->control->current_time.usecs = time;
}
/* on SetSyncTimeout request */
-int
+int
jack_transport_set_sync_timeout (jack_engine_t *engine,
jack_time_t usecs)
{
engine->control->sync_timeout = usecs;
VERBOSE (engine, "new sync timeout: %8.6f secs",
- (double) (usecs / 1000000.0));
+ (double)(usecs / 1000000.0));
return 0;
}