# gst-plugin-gphoto2 Andreas Frisch GStreamer Conference October 10, 2026, Prague --- # A revenant from the past * A photobooth hobby project from 2016 * [presented](https://gstconf.ubicast.tv/videos/photobooth-an-exemplary-multi-disciplinary-project/) at GStreamer conf. 2017 in Prague * was used a lot until COVID, then stowed away ---- ![](https://pads.schaffenburg.org/uploads/a47297ef-b027-45d9-aaa5-2ef24e22d147.jpg) --- # Original design * monolithic C application with GTK UI * video preview from USB-tethered DSLR * everything done in GStreamer, EXCEPT: * image acquisition in a thread with libgphoto2 + fdsrc --- # Rewrite it in Rust 🦀 * application rewritten in client-server style * GUI runs in a browser window * WebRTC for preview video, snapshots, control messages --- # libgphoto2 * library with USB-PTP support for huge (3k+) number of DSLR/photo cameras * [rust bindings](https://crates.io/crates/gphoto2) are available --- # gphoto2src * a live `Source/Video` element (`PushSrc`) * always pad 'src' live view as MJPEG ("viewfinder") * `gst-launch-1.0 gphoto2src ! jpegparse ! jpegdec ! autovideosink` * internally a `PushSrc` inside a bin, modelled after `GstBaseCameraSrc` --- # Taking still photos * exposure of single shots or bursts * asynchronously through element action signals * `prepare-capture` * `capture-image` * `resume-preview` * actual payload appears on `image` request pad (ANY caps, JPEG or RAW) --- # Challenges * no live video during exposure: variable framerate / GAP events * flaky USB-PTP connections, multiple cameras / Device Provider * TBD: Camera controls interface (focus, aperture, exposure time, ISO) --- # Is this worth upstreaming? <gstreamer@fraxinas.dev> <style> .reveal :not(pre) > code { background: #3a3a3a; color: #ffd866; padding: 0 0.2em; border-radius: 0.15em; } .reveal h1 { font-size: 2em; } </style>
{}