aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2022-07-09 21:20:51 +0200
committerThomas White <taw@physics.org>2022-07-09 21:43:34 +0200
commitcb1cbd96d05dc8978d95ca4685128e033f286c3d (patch)
tree009a8e3bccc623ee0e40abe4850609673344ab91
parent8f863c9b360f6e3593ff1a52da71cee6bfe20104 (diff)
Playback: Factorise start-fixture-playback! and clock logic
-rw-r--r--guile/starlet/clock.scm6
-rw-r--r--guile/starlet/playback.scm32
2 files changed, 20 insertions, 18 deletions
diff --git a/guile/starlet/clock.scm b/guile/starlet/clock.scm
index c139d66..2e6e2ff 100644
--- a/guile/starlet/clock.scm
+++ b/guile/starlet/clock.scm
@@ -92,8 +92,10 @@
(define (clock-expired? clock)
- (> (elapsed-time clock)
- (expiration-time clock)))
+ (and
+ clock
+ (> (elapsed-time clock)
+ (expiration-time clock))))
(define-method (elapsed-time (clock <starlet-clock>))
diff --git a/guile/starlet/playback.scm b/guile/starlet/playback.scm
index 28ad18e..e7beb84 100644
--- a/guile/starlet/playback.scm
+++ b/guile/starlet/playback.scm
@@ -341,23 +341,23 @@
(num-cues (get-playback-cue-list pb)))
-(define-method (update-state! (pb <starlet-playback>))
- (when (and (get-pb-cue-clock pb)
- (clock-expired? (get-pb-cue-clock pb))
- (eq? 'running (atomic-box-ref (state-box pb))))
- (when (eq? 'running (atomic-box-compare-and-swap! (state-box pb)
- 'running
- 'ready))
- (run-hook (state-change-hook pb) 'ready)
-
- ;; Pre-set fixtures
- (let ((st (get-preset-state (get-running-cue pb))))
- (state-for-each
- (lambda (fix attr val)
- (set-in-state! pb fix attr (lambda () val)))
- st))
+(define (start-fixture-preset! pb)
+ (let ((st (get-preset-state (get-running-cue pb))))
+ (state-for-each
+ (lambda (fix attr val)
+ (set-in-state! pb fix attr (lambda () val)))
+ st)))
- (set-running-cue! pb #f))))
+
+(define-method (update-state! (pb <starlet-playback>))
+ (when
+ (and (clock-expired? (get-pb-cue-clock pb))
+ (eq? 'running (atomic-box-compare-and-swap! (state-box pb)
+ 'running
+ 'ready)))
+ (run-hook (state-change-hook pb) 'ready)
+ (start-fixture-preset! pb)
+ (set-running-cue! pb #f)))
(define (next-cue-number pb)