diff options
author | paul <paul@0c269be4-1314-0410-8aa9-9f06e86f4224> | 2008-09-22 13:45:08 +0000 |
---|---|---|
committer | paul <paul@0c269be4-1314-0410-8aa9-9f06e86f4224> | 2008-09-22 13:45:08 +0000 |
commit | 337b7de1721890e9b1371160ddef05f7ee78e1ac (patch) | |
tree | 7d5e7b6d108f8d6fde3bc25e00635c913dbf1af1 /jackd/transengine.c | |
parent | 82f40b25d1433934b8ddb0b31be35201614f302d (diff) | |
download | jack1-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.c | 16 |
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. */ |