;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;

;; CINEMA.

;;

;; Turn your isight on and away you go :)

;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


(define *canvas* (gfx:make-canvas))


(gfx:start-live-video)


(gfx:clear-canvas (now) *canvas* '(0 0 0 1))


(define range-limit

   (lambda (value min max)

      (cond ((< value min) min)

            ((> value max) max)

            (else value))))


(define loop

   (lambda (r g b)

      (let* ((camera-image (gfx:get-live-frame))

             (params (list (cons "inputBrightness" 3.0)

                           (cons "inputLightPosition" (vector 650 500 100))

                           (cons "inputLightPointsAt"  (vector 0 0 0))

                           (cons "inputColor" (list r g b 1.0))

                           (cons "inputConcentration" .1)))             

             (filtered-image (gfx:filter-image camera-image "CISpotLight" params)))

         (gfx:clear-canvas (now) *canvas* '(0 0 0 1))         

         (gfx:draw-image (+ (now) 10) *canvas* filtered-image 1.0)

         (callback (+ (now) 5000) loop 

                   (range-limit ((random (list + -)) r 0.05) 0.0 1.0)                                      

                   (range-limit ((random (list + -)) g 0.05) 0.0 1.0)                   

                   (range-limit ((random (list + -)) b 0.05) 0.0 1.0)))))


(callback (+ (now) (* *second* 2)) 'loop 1.0 1.0 1.0)