summaryrefslogtreecommitdiff
path: root/jackd/transengine.c
diff options
context:
space:
mode:
authorpaul <paul@0c269be4-1314-0410-8aa9-9f06e86f4224>2008-09-22 13:45:08 +0000
committerpaul <paul@0c269be4-1314-0410-8aa9-9f06e86f4224>2008-09-22 13:45:08 +0000
commit337b7de1721890e9b1371160ddef05f7ee78e1ac (patch)
tree7d5e7b6d108f8d6fde3bc25e00635c913dbf1af1 /jackd/transengine.c
parent82f40b25d1433934b8ddb0b31be35201614f302d (diff)
downloadjack1-337b7de1721890e9b1371160ddef05f7ee78e1ac.tar.gz
torben's patch for transport-start-at-zero, from ticket #40
git-svn-id: svn+ssh://jackaudio.org/trunk/jack@2939 0c269be4-1314-0410-8aa9-9f06e86f4224
Diffstat (limited to 'jackd/transengine.c')
-rw-r--r--jackd/transengine.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/jackd/transengine.c b/jackd/transengine.c
index 29224b7..52db364 100644
--- a/jackd/transengine.c
+++ b/jackd/transengine.c
@@ -405,6 +405,7 @@ jack_transport_cycle_end (jack_engine_t *engine)
{
jack_control_t *ectl = engine->control;
transport_command_t cmd; /* latest transport command */
+ int dont_trans_advance = FALSE;
/* Promote pending_time to current_time. Maintain the usecs,
* frame_rate and frame values, clients may not set them. */
@@ -419,6 +420,10 @@ jack_transport_cycle_end (jack_engine_t *engine)
if ((ectl->sync_remain == 0) ||
(jack_sync_timeout(engine))) {
ectl->transport_state = JackTransportRolling;
+
+ // dont advance the transport this is a statechange not seen
+ // by the switch statement below
+ dont_trans_advance = TRUE;
VERBOSE (engine, "transport Rolling, %8.6f sec"
" left for poll",
(double) (ectl->sync_time_left / 1000000.0));
@@ -478,7 +483,12 @@ jack_transport_cycle_end (jack_engine_t *engine)
ectl->transport_state = JackTransportStarting;
jack_sync_poll_start(engine);
}
+ } else if ( ! dont_trans_advance ) {
+ // ok... no statechange happened go transport go...
+ ectl->pending_time.frame =
+ ectl->current_time.frame + ectl->buffer_size;
}
+
break;
default:
@@ -486,12 +496,6 @@ jack_transport_cycle_end (jack_engine_t *engine)
ectl->transport_state);
}
- /* Update timebase, if needed. */
- 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. */