aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/pw_utils.rs32
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));