feat: add KWin/KDE Plasma screen capture via xdg-desktop-portal ScreenCast + PipeWire
Add a second capture backend for compositors without wlr-screencopy (KWin, GNOME, etc.) using the xdg-desktop-portal ScreenCast interface and PipeWire DMA-BUF streaming. New files: - src/backend_detect.rs: auto-detect wlr-screencopy vs portal backend - src/cap_portal.rs: Portal session setup + PipeWire DMA-BUF thread - src/state_portal.rs: StatePortal encoder pipeline (DMA-BUF → VAAPI) Changes: - Cargo.toml: add ashpd 0.13, tokio 1, pipewire 0.9, libspa 0.9, crossbeam-channel 0.5 - src/args.rs: add --backend CLI flag - src/avhw.rs: extract create_encoder() from inline State code - src/main.rs: route to portal or wlr-screencopy based on backend - src/state.rs: fix params.destroy() on dup failure, cleanup in_flight_surface on copy fail, use create_encoder() - tests/integration_test.rs: add --backend flag tests
This commit is contained in:
@@ -44,10 +44,7 @@ fn test_rejects_invalid_args() {
|
||||
.output()
|
||||
.expect("failed to execute wl-webrtc with invalid args");
|
||||
|
||||
assert!(
|
||||
!output.status.success(),
|
||||
"should reject unrecognized flag"
|
||||
);
|
||||
assert!(!output.status.success(), "should reject unrecognized flag");
|
||||
let stderr = String::from_utf8_lossy(&output.stderr);
|
||||
assert!(
|
||||
stderr.to_lowercase().contains("error")
|
||||
@@ -68,10 +65,7 @@ fn test_rejects_hevc_codec() {
|
||||
.expect("failed to execute wl-webrtc --codec hevc");
|
||||
|
||||
// MVP only supports h264; hevc should be rejected.
|
||||
assert!(
|
||||
!output.status.success(),
|
||||
"should reject hevc codec in MVP"
|
||||
);
|
||||
assert!(!output.status.success(), "should reject hevc codec in MVP");
|
||||
}
|
||||
|
||||
/// Tests requiring a live Wayland compositor and VAAPI hardware.
|
||||
|
||||
Reference in New Issue
Block a user