diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/pw_utils.rs | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/src/pw_utils.rs b/src/pw_utils.rs index 7cf76058..e41c0713 100644 --- a/src/pw_utils.rs +++ b/src/pw_utils.rs @@ -11,10 +11,10 @@ use std::time::Duration; use anyhow::Context as _; use calloop::timer::{TimeoutAction, Timer}; use calloop::RegistrationToken; -use pipewire::context::Context; -use pipewire::core::{Core, PW_ID_CORE}; -use pipewire::main_loop::MainLoop; -use pipewire::properties::Properties; +use pipewire::context::ContextRc; +use pipewire::core::{CoreRc, PW_ID_CORE}; +use pipewire::main_loop::MainLoopRc; +use pipewire::properties::PropertiesBox; use pipewire::spa::buffer::DataType; use pipewire::spa::param::format::{FormatProperties, MediaSubtype, MediaType}; use pipewire::spa::param::format_utils::parse_format; @@ -28,7 +28,7 @@ use pipewire::spa::utils::{ Choice, ChoiceEnum, ChoiceFlags, Direction, Fraction, Rectangle, SpaTypes, }; use pipewire::spa::{self}; -use pipewire::stream::{Stream, StreamFlags, StreamListener, StreamState}; +use pipewire::stream::{Stream, StreamFlags, StreamListener, StreamRc, StreamState}; use pipewire::sys::{pw_buffer, pw_stream_queue_buffer}; use smithay::backend::allocator::dmabuf::{AsDmabuf, Dmabuf}; use smithay::backend::allocator::format::FormatSet; @@ -55,8 +55,8 @@ use crate::utils::get_monotonic_time; const CAST_DELAY_ALLOWANCE: Duration = Duration::from_micros(100); pub struct PipeWire { - _context: Context, - pub core: Core, + _context: ContextRc, + pub core: CoreRc, pub token: RegistrationToken, event_loop: LoopHandle<'static, State>, to_niri: calloop::channel::Sender<PwToNiri>, @@ -72,7 +72,7 @@ pub struct Cast { event_loop: LoopHandle<'static, State>, pub session_id: usize, pub stream_id: usize, - pub stream: Stream, + pub stream: StreamRc, _listener: StreamListener<()>, pub target: CastTarget, pub dynamic_target: bool, @@ -158,9 +158,9 @@ impl PipeWire { event_loop: LoopHandle<'static, State>, to_niri: calloop::channel::Sender<PwToNiri>, ) -> anyhow::Result<Self> { - let main_loop = MainLoop::new(None).context("error creating MainLoop")?; - let context = Context::new(&main_loop).context("error creating Context")?; - let core = context.connect(None).context("error creating Core")?; + let main_loop = MainLoopRc::new(None).context("error creating MainLoop")?; + let context = ContextRc::new(&main_loop, None).context("error creating Context")?; + let core = context.connect_rc(None).context("error creating Core")?; let to_niri_ = to_niri.clone(); let listener = core @@ -178,7 +178,7 @@ impl PipeWire { .register(); mem::forget(listener); - struct AsFdWrapper(MainLoop); + struct AsFdWrapper(MainLoopRc); impl AsFd for AsFdWrapper { fn as_fd(&self) -> BorrowedFd<'_> { self.0.loop_().fd() @@ -233,8 +233,12 @@ impl PipeWire { }; let redraw_ = redraw.clone(); - let stream = Stream::new(&self.core, "niri-screen-cast-src", Properties::new()) - .context("error creating Stream")?; + let stream = StreamRc::new( + self.core.clone(), + "niri-screen-cast-src", + PropertiesBox::new(), + ) + .context("error creating Stream")?; let pending_size = Size::from((size.w as u32, size.h as u32)); |
