Skip to content

Commit 642277f

Browse files
committed
Upgrade to new stable pipewire-rs
1 parent c558516 commit 642277f

File tree

3 files changed

+36
-55
lines changed

3 files changed

+36
-55
lines changed

Cargo.lock

Lines changed: 17 additions & 40 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ niri-ipc = { version = "25.8.0", path = "niri-ipc", features = ["clap"] }
8282
ordered-float = "5.1.0"
8383
pango = { version = "0.20.12", features = ["v1_44"] }
8484
pangocairo = "0.20.10"
85-
pipewire = { git = "https://gitlab.freedesktop.org/pipewire/pipewire-rs.git", optional = true, features = ["v0_3_33"] }
85+
pipewire = { version = "0.9.2", optional = true, features = ["v0_3_33"] }
8686
png = "0.18.0"
8787
portable-atomic = { version = "1.11.1", default-features = false, features = ["float"] }
8888
profiling = "1.0.17"

src/pw_utils.rs

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ use std::time::Duration;
1111
use anyhow::Context as _;
1212
use calloop::timer::{TimeoutAction, Timer};
1313
use calloop::RegistrationToken;
14-
use pipewire::context::Context;
15-
use pipewire::core::{Core, PW_ID_CORE};
16-
use pipewire::main_loop::MainLoop;
17-
use pipewire::properties::Properties;
14+
use pipewire::context::ContextRc;
15+
use pipewire::core::{CoreRc, PW_ID_CORE};
16+
use pipewire::main_loop::MainLoopRc;
17+
use pipewire::properties::PropertiesBox;
1818
use pipewire::spa::buffer::DataType;
1919
use pipewire::spa::param::format::{FormatProperties, MediaSubtype, MediaType};
2020
use pipewire::spa::param::format_utils::parse_format;
@@ -28,7 +28,7 @@ use pipewire::spa::utils::{
2828
Choice, ChoiceEnum, ChoiceFlags, Direction, Fraction, Rectangle, SpaTypes,
2929
};
3030
use pipewire::spa::{self};
31-
use pipewire::stream::{Stream, StreamFlags, StreamListener, StreamState};
31+
use pipewire::stream::{Stream, StreamFlags, StreamListener, StreamRc, StreamState};
3232
use pipewire::sys::{pw_buffer, pw_stream_queue_buffer};
3333
use smithay::backend::allocator::dmabuf::{AsDmabuf, Dmabuf};
3434
use smithay::backend::allocator::format::FormatSet;
@@ -55,8 +55,8 @@ use crate::utils::get_monotonic_time;
5555
const CAST_DELAY_ALLOWANCE: Duration = Duration::from_micros(100);
5656

5757
pub struct PipeWire {
58-
_context: Context,
59-
pub core: Core,
58+
_context: ContextRc,
59+
pub core: CoreRc,
6060
pub token: RegistrationToken,
6161
event_loop: LoopHandle<'static, State>,
6262
to_niri: calloop::channel::Sender<PwToNiri>,
@@ -72,7 +72,7 @@ pub struct Cast {
7272
event_loop: LoopHandle<'static, State>,
7373
pub session_id: usize,
7474
pub stream_id: usize,
75-
pub stream: Stream,
75+
pub stream: StreamRc,
7676
_listener: StreamListener<()>,
7777
pub target: CastTarget,
7878
pub dynamic_target: bool,
@@ -158,9 +158,9 @@ impl PipeWire {
158158
event_loop: LoopHandle<'static, State>,
159159
to_niri: calloop::channel::Sender<PwToNiri>,
160160
) -> anyhow::Result<Self> {
161-
let main_loop = MainLoop::new(None).context("error creating MainLoop")?;
162-
let context = Context::new(&main_loop).context("error creating Context")?;
163-
let core = context.connect(None).context("error creating Core")?;
161+
let main_loop = MainLoopRc::new(None).context("error creating MainLoop")?;
162+
let context = ContextRc::new(&main_loop, None).context("error creating Context")?;
163+
let core = context.connect_rc(None).context("error creating Core")?;
164164

165165
let to_niri_ = to_niri.clone();
166166
let listener = core
@@ -178,7 +178,7 @@ impl PipeWire {
178178
.register();
179179
mem::forget(listener);
180180

181-
struct AsFdWrapper(MainLoop);
181+
struct AsFdWrapper(MainLoopRc);
182182
impl AsFd for AsFdWrapper {
183183
fn as_fd(&self) -> BorrowedFd<'_> {
184184
self.0.loop_().fd()
@@ -233,8 +233,12 @@ impl PipeWire {
233233
};
234234
let redraw_ = redraw.clone();
235235

236-
let stream = Stream::new(&self.core, "niri-screen-cast-src", Properties::new())
237-
.context("error creating Stream")?;
236+
let stream = StreamRc::new(
237+
self.core.clone(),
238+
"niri-screen-cast-src",
239+
PropertiesBox::new(),
240+
)
241+
.context("error creating Stream")?;
238242

239243
let pending_size = Size::from((size.w as u32, size.h as u32));
240244

0 commit comments

Comments
 (0)