20 Camera
This section covers camera (webcam) capture.
20.1 Driver and Device Enumeration
procedure
procedure
(camera-driver-name index) → (or/c string? #f)
index : exact-nonnegative-integer?
procedure
(current-camera-driver) → (or/c string? #f)
procedure
(for ([id (get-cameras)]) (printf "Camera: ~a (~a)~n" (camera-name id) (camera-position id)))
procedure
(camera-name instance-id) → (or/c string? #f)
instance-id : exact-nonnegative-integer?
procedure
(camera-position instance-id) → symbol?
instance-id : exact-nonnegative-integer?
Values: 'unknown, 'front-facing, 'back-facing.
procedure
(camera-supported-formats instance-id) → (listof camera-spec?)
instance-id : exact-nonnegative-integer?
20.2 Camera Specs
Camera specs describe the format and resolution of a camera.
struct
(struct camera-spec ( format colorspace width height framerate-numerator framerate-denominator)) format : exact-nonnegative-integer? colorspace : exact-nonnegative-integer? width : exact-nonnegative-integer? height : exact-nonnegative-integer? framerate-numerator : exact-nonnegative-integer? framerate-denominator : exact-nonnegative-integer?
procedure
(make-camera-spec format width height [ #:colorspace colorspace #:framerate-numerator num #:framerate-denominator den]) → camera-spec? format : exact-nonnegative-integer? width : exact-nonnegative-integer? height : exact-nonnegative-integer? colorspace : exact-nonnegative-integer? = 0 num : exact-nonnegative-integer? = 0 den : exact-nonnegative-integer? = 0
20.3 Opening Cameras
procedure
(open-camera instance-id [ #:spec spec #:custodian cust]) → camera? instance-id : exact-nonnegative-integer? spec : (or/c camera-spec? #f) = #f cust : custodian? = (current-custodian)
If spec is provided, requests that specific format.
(define cameras (get-cameras)) (when (pair? cameras) (define cam (open-camera (car cameras))))
procedure
(camera-ptr cam) → cpointer?
cam : camera?
procedure
(camera-destroy! cam) → void?
cam : camera?
Note: Cameras are automatically closed when their custodian shuts down.
20.4 Camera Information
procedure
(camera-permission-state cam) → symbol?
cam : camera?
Values: 'approved, 'denied, 'pending.
On some platforms, you must wait for permission before capturing frames.
procedure
(camera-id cam) → exact-nonnegative-integer?
cam : camera?
procedure
cam : camera?
procedure
(camera-format cam) → (or/c camera-spec? #f)
cam : camera?
20.5 Frame Capture
procedure
(camera-acquire-frame cam) → (or/c camera-frame? #f)
cam : camera?
Returns #f if no frame is available yet.
(let loop () (define frame (camera-acquire-frame cam)) (cond [frame ;; Process the frame (define tex (camera-frame->texture ren frame)) (render-texture! ren tex 0 0) (camera-frame-release! frame)] [else (delay! 10)]) (loop))
procedure
(camera-frame? v) → boolean?
v : any/c
procedure
(camera-frame-release! frame) → void?
frame : camera-frame?
You must release frames after processing to allow new frames to be captured.
procedure
(camera-frame->texture renderer frame [ #:custodian cust]) → texture? renderer : renderer? frame : camera-frame? cust : custodian? = (current-custodian)
procedure
(camera-frame-surface frame) → cpointer?
frame : camera-frame?
procedure
(camera-frame-timestamp-ns frame) → exact-nonnegative-integer?
frame : camera-frame?
procedure
(camera-frame-width frame) → exact-integer?
frame : camera-frame?
procedure
(camera-frame-height frame) → exact-integer?
frame : camera-frame?
procedure
(camera-frame-pitch frame) → exact-integer?
frame : camera-frame?
procedure
frame : camera-frame?