use crate::gpu::video_stream_void::{self, VideoStreamConfig};
use crate::gpu::void::{CaptureKind, ParamDef, VoidRegistration};
pub const TYPE_ID: &str = "screenshare";
const PARAMS: &[ParamDef] = &[
ParamDef::Bool {
name: "freeze",
default: false,
},
ParamDef::Int {
name: "frame_divisor",
min: 1,
max: 60,
default: 4,
},
];
static CONFIG: VideoStreamConfig = VideoStreamConfig {
type_id: TYPE_ID,
display_name: "Screen Share",
icon: "tabler:screen-share",
params: PARAMS,
capture_kind: CaptureKind::Display,
default_transform: |_, _| crate::transform::Transform::identity(),
};
pub fn register() -> VoidRegistration {
video_stream_void::registration(&CONFIG, |params, shared| {
video_stream_void::build_void(&CONFIG, params, shared)
})
}
#[cfg(test)]
mod tests {
use super::*;
use crate::gpu::params::ParamValue;
#[test]
fn config_matches_type_id() {
assert_eq!(CONFIG.type_id, TYPE_ID);
let reg = register();
assert_eq!(reg.type_id, "screenshare");
assert_eq!(reg.display_name, "Screen Share");
assert_eq!(reg.capture_kind, Some(CaptureKind::Display));
}
#[test]
fn seeds_identity_transform() {
let t = (CONFIG.default_transform)(200, 100);
assert_eq!(t, crate::transform::Transform::identity());
}
#[test]
fn default_params_round_trip() {
let reg = register();
let defaults: Vec<ParamValue> = reg.params.iter().map(|d| d.default_value()).collect();
assert_eq!(defaults.len(), 2);
assert_eq!(defaults[0], ParamValue::Bool(false));
assert_eq!(defaults[1], ParamValue::Int(4));
}
}