Init repo
This commit is contained in:
54
src/main.rs
Normal file
54
src/main.rs
Normal 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(®istry);
|
||||
|
||||
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(())
|
||||
}
|
Reference in New Issue
Block a user