Init repo

This commit is contained in:
2025-03-30 11:38:27 +02:00
commit 085f63e075
6 changed files with 854 additions and 0 deletions

54
src/main.rs Normal file
View File

@@ -0,0 +1,54 @@
use anyhow::{
Result,
};
use pipewire as pw;
use std::{
cell::{
RefCell,
},
rc::{
Rc,
},
};
fn main() -> Result<()> {
let main_loop = pw::main_loop::MainLoop::new(None)?;
let context = pw::context::Context::new(&main_loop)?;
let core = context.connect(None)?;
let registry = Rc::new(core.get_registry()?);
let registry_weak = Rc::downgrade(&registry);
let nodes = RefCell::new(Vec::new());
// Listen for new nodes
let _registry_listener = registry
.add_listener_local()
.global(move |obj| {
if let Some(registry) = registry_weak.upgrade() {
if obj.type_ == pw::types::ObjectType::Node && obj.props.unwrap().get("media.role") == Some("Camera") {
println!("New camera node: {} {}", obj.id, obj.props.unwrap().get("node.description").unwrap());
let node: pw::node::Node = registry.bind(obj).unwrap();
// Listen for camera node changes
let node_listener = node
.add_listener_local()
.info(|info| {
println!("{}: {:?}", info.id(), info.state());
})
.register();
nodes.borrow_mut().push((node, node_listener));
}
}
})
.register();
main_loop.run();
Ok(())
}