Fix ashpd 0.13 API changes for Wayland screencast setup
This commit is contained in:
parent
78b50a2fde
commit
5a82cab03e
3 changed files with 17 additions and 16 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
|
@ -37,6 +37,7 @@ dependencies = [
|
|||
"futures-util",
|
||||
"getrandom",
|
||||
"serde",
|
||||
"serde_repr",
|
||||
"tokio",
|
||||
"zbus",
|
||||
]
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ version = "0.1.0"
|
|||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
ashpd = "0.13.13"
|
||||
ashpd = { version = "0.13.13", features = ["screencast"] }
|
||||
libc = "0.2.189"
|
||||
memmap2 = "0.9.11"
|
||||
minifb = "0.28.0"
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
use crate::capture::{Frame, FrameSource};
|
||||
use ashpd::desktop::screencast::{CursorMode, PersistMode, Screencast, SourceType};
|
||||
use ashpd::WindowIdentifier;
|
||||
use std::os::unix::io::RawFd;
|
||||
use ashpd::desktop::screencast::{CursorMode, Screencast, SourceType};
|
||||
use ashpd::desktop::PersistMode;
|
||||
use std::os::unix::io::{RawFd, IntoRawFd};
|
||||
|
||||
pub struct WaylandCapture {
|
||||
fd: RawFd,
|
||||
|
|
@ -11,22 +11,22 @@ pub struct WaylandCapture {
|
|||
impl WaylandCapture {
|
||||
pub async fn new() -> Result<Self, Box<dyn std::error::Error>> {
|
||||
let proxy = Screencast::new().await?;
|
||||
let session = proxy.create_session().await?;
|
||||
proxy.select_sources(
|
||||
&session,
|
||||
CursorMode::Hidden,
|
||||
SourceType::Monitor | SourceType::Window,
|
||||
true,
|
||||
None,
|
||||
PersistMode::DoNot,
|
||||
).await?;
|
||||
let response = proxy.start(&session, &WindowIdentifier::default()).await?;
|
||||
let session = proxy.create_session(Default::default()).await?;
|
||||
|
||||
let select_opts = ashpd::desktop::screencast::SelectSourcesOptions::default()
|
||||
.set_multiple(true)
|
||||
.set_cursor_mode(CursorMode::Hidden)
|
||||
.set_sources(SourceType::Monitor | SourceType::Window)
|
||||
.set_persist_mode(PersistMode::DoNot);
|
||||
|
||||
proxy.select_sources(&session, select_opts).await?;
|
||||
|
||||
let response = proxy.start(&session, None, Default::default()).await?.response()?;
|
||||
|
||||
// This is as far as we go with ashpd, next we need pipewire
|
||||
let stream = response.streams().first().ok_or("No stream")?;
|
||||
let node_id = stream.pipe_wire_node_id();
|
||||
|
||||
let fd = proxy.open_pipe_wire_remote(&session).await?;
|
||||
let fd = proxy.open_pipe_wire_remote(&session, Default::default()).await?;
|
||||
|
||||
Ok(Self {
|
||||
fd: fd.into_raw_fd(),
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue