📄 sink/src/lib.rs
//! Output sinks for the rendered virtual-camera view.
//!
//! Pipeline role (PLAN.md, "Pipeline per frame" — sinks):
//!
//! * an egui UI for viewing the virtual-camera image and steering the
//!   virtual camera — [`ViewerModel`] plus the thin eframe shell
//!   [`KinectViewApp`]
//! * on Linux, a v4l2loopback virtual webcam so Teams/Slack can pick the
//!   output up as a regular camera (build-order step 4)
//! * on Windows there is no built-in sink; capture the UI window via OBS
//!   yourself
//!
//! The `kinect-view` binary in this crate is the application entry point.
//!
//! Testing: the UI logic lives in [`ViewerModel`], which drives the whole
//! pipeline (source → render → texture) from `ui(&Context)` and is
//! exercised headlessly with `egui-kittest` — see `tests/ui.rs`.

pub mod app;
pub mod model;

pub use app::KinectViewApp;
pub use model::{FrameStats, ViewerModel, ViewerState};