Commit Graph

221 Commits

Author SHA1 Message Date
neatnoise
d14ccf2517 fix(linux): multi-GPU segfault + wlr GPU auto selection, DMA-BUF metadata planes and revert wlr vulkan support (#5030) 2026-04-21 12:20:49 -04:00
Kishi
e39dfb80be refactor(linux/xdgportal): Move elevated privilege check/drop to misc.cpp (#5026) 2026-04-20 13:05:42 -04:00
neatnoise
e180053eab fix(linux/vulkan): remove deprecated FFmpeg Vulkan queue lock/unlock (#5031) 2026-04-19 13:52:03 -04:00
Conn O'Griofa
44bf39be75 fix: Resolve minimum_fps_target related issues on all platforms (#4967) 2026-04-19 13:49:37 -04:00
Kishi
5ffa66ee52 refactor(linux/xdgportal): Split pipewire code into it's own file so it can be reused (#5008) 2026-04-17 16:16:19 -04:00
neatnoise
3210078310 fix(linux): auto-detect GPU with connected display for VAAPI and Vulkan (#4961) 2026-04-17 14:38:06 -04:00
neatnoise
a40f27f34e fix(linux/vulkan): guard deprecated FFmpeg Vulkan queue lock/unlock (#5005) 2026-04-16 21:17:15 -04:00
Vincenzo Mitchell Barroso
225c3e9ee0 fix(linux/vulkan): encoder not working on NVIDIA GPUs (#4994) 2026-04-15 11:17:09 -04:00
neatnoise
75a3bedf5c revert: "feat(linux/vulkan): enable RADV low-latency Vulkan Video encoding" (#4989) 2026-04-14 11:19:31 -04:00
neatnoise
43f973dbf2 feat(linux/vulkan): enable RADV low-latency Vulkan Video encoding (#4984) 2026-04-13 16:28:35 -04:00
Kishi
5a4170790b fix(linux/xdgportal): Additional error handling and minor code improvements (#4979) 2026-04-13 10:32:28 -04:00
Kishi
4ea331e541 fix(linux/xdgportal): Improve multi-monitor support and work around breaking kmsgrab (#4969) 2026-04-10 18:32:23 -04:00
Kishi
d3330d1c8d fix(linux/xdgportal): Properly support multiple screens by exposing pipewire streams as separate displays (#4931) 2026-04-09 13:11:20 -04:00
neatnoise
6c1612de65 fix(linux/vulkan): add 16-bit DRM format support for HDR DMA-BUF import (#4962) 2026-04-08 15:49:27 -04:00
Taimuraz Kaitmazov
a4c253f333 fix(linux): correct "Pulseadio" typo in PulseAudio log messages (#4956) 2026-04-08 15:06:31 -04:00
neatnoise
0752f641b1 feat(linux): Add Vulkan video encoder (#4603) 2026-03-30 22:17:00 -04:00
Conn O'Griofa
3e06afab1f feat(linux): add thread priority support for POSIX systems (#4885) 2026-03-22 23:25:42 -04:00
Conn O'Griofa
ae8adfd8ed feat(linux/glad): implement EGL_IMG_context_priority (#4857) 2026-03-21 20:27:21 -04:00
Thomas Van Laere
0d3be0bb1e feat(macOS): Capture audio on macOS using Tap API (#4209)
Co-authored-by: David Lane <42013603+ReenigneArcher@users.noreply.github.com>
2026-03-20 22:50:52 -04:00
Conn O'Griofa
a7ab814f74 fix(linux/xdgportal): portalgrab capture stability & mutter compatibility (#4875) 2026-03-20 20:59:44 -04:00
mia~
7a30ead471 feat(linux/keyboard): add F13-F24 keycodes (#4833) 2026-03-16 14:26:00 -04:00
Conn O'Griofa
253e624ee8 fix(linux/xdgportal): allow unified systemd service for all capture methods (#4854) 2026-03-16 14:25:30 -04:00
David Lane
ea201155f4 build(linux): generate glad sources at compile time (#4798)
Co-authored-by: Conn O'Griofa <connogriofa@gmail.com>
2026-03-15 21:21:41 -04:00
Conn O'Griofa
99d4e053bf fix(linux/xdgportal): avoid duplicate frame insertion (#4839) 2026-03-14 13:43:17 -04:00
Conn O'Griofa
b3f0e2370c fix(linux/xdgportal): descriptor/pointer cleanups (#4840) 2026-03-11 11:48:09 -04:00
Conn O'Griofa
60158b4712 feat(linux/xdgportal): implement event-driven capture (#4768) 2026-03-09 22:32:28 -04:00
Conn O'Griofa
daa99db662 fix(linux): use FQDN naming for all Linux packaging types (#4779)
Co-authored-by: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com>
2026-03-07 14:15:50 -05:00
Andy Grundman
76c3463d2c fix(linux/wlgrab): add frame_timestamp using wayland's ready timestamp (#4787)
Co-authored-by: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com>
2026-03-07 10:19:03 -05:00
michalzxc
630c57ceb7 fix(linux/portal): set env_width/env_height so touch input works (#4822) 2026-03-06 18:34:27 -05:00
David Lane
5f8dab0988 fix: struct ordering broken in 188f1e2959 (#4802) 2026-03-02 08:38:23 -05:00
David Lane
188f1e2959 style(cpp): separate multiple variable declarations (#4795) 2026-03-01 09:02:17 -05:00
David Lane
2b7af2119d refactor: replace macros with constexpr/consts (#4791) 2026-02-28 18:22:33 -05:00
Vladimir Solomatin
5395a9a515 fix(linux/xdgportal): don't pass external_only argument to eglQueryDmaBufModifiersEXT (#4754) 2026-02-26 15:00:18 -05:00
Conn O'Griofa
502be64682 fix(linux/kmsgrab): fix handle leak in update_cursor (#4757) 2026-02-22 15:56:35 -05:00
Conn O'Griofa
95da4b5c85 feat(linux/xdgportal): implement reactive capture with duplicate detection (#4740)
* feat(linux/xdgportal): implement reactive capture with duplicate detection

Replaces polling-based frame capture with event-driven approach using
condition variables for immediate notification when new frames arrive.

Changes:
- on_process: Notify snapshot() via condition variable on new buffer
- fill_img: Extract and pass through PipeWire seq/pts metadata
- snapshot: Block on condition variable with timeout; detect and skip
  duplicate frames using seq/pts metadata to avoid redundant processing
- capture: Simplify catch-up logic to maintain timeline consistency
  by advancing in delay intervals without resetting origin

This eliminates tight polling loops and reduces unnecessary frame
processing when compositor reuses buffers.

* feat(linux/xdgportal): optimize software path and fix modesetting crashes

This patch addresses a performance bottleneck in the software encoding
path and a race condition during PipeWire stream re-initialization.

1. Performance Optimization (Double-Buffering):
   - Implemented a front/back buffer swapping strategy for the software
     (MemPtr) path.
   - Frame data is copied to a `back_buffer` without holding the
     `frame_mutex`, then swapped with the `front_buffer` under a
     short-lived lock.
   - This prevents memory bandwidth contention and allows the encoder
     and PipeWire threads to work in parallel without blocking.

2. Stability Fixes:
   - Implemented `frame_mutex` protection across `on_process`, `fill_img`,
     and `cleanup_stream` to prevent use-after-free and dangling pointers
     during resolution changes.
   - Enhanced `fill_img` to safely bail out if the stream is dead or
     no new frame is ready.
   - Added explicit state resets (`frame_ready = false`, `current_buffer = nullptr`)
     to ensure the encoder thread ignores stale data during re-init.

Fixes intermittent segfaults during resolution changes and restores
performance on systems using software encoding.

* feat(linux/xdgportal): support x-nv-video[0].clientRefreshRateX100 for requesting fractional NTSC framerates

* fix(linux/xdgportal): improve dbus & pipewire teardown logic

* Close dbus proxy connection; fixes orphaned XDG notification icons after
  mode changes or stream pauses via XDG icon interaction.
* Migrate shared pipewire destructor logic into cleanup_stream() to reduce
  duplication.

---------

Co-authored-by: Andy Grundman <andy@hybridized.org>
2026-02-22 12:43:49 -05:00
herbie
c9bcee4480 fix(linux): fix touch misalignment for wlgrab on scaled outputs (#4665) 2026-02-17 23:40:16 -05:00
Conn O'Griofa
24c5dfd622 fix(linux/xdgportal): stream scaling and mode change support (#4700) 2026-02-15 17:42:11 -05:00
Conn O'Griofa
638cd699d4 fix(linux/xdgportal): improve thread loop (un)locking & teardown logic (#4705) 2026-02-12 10:34:22 -05:00
David Lane
5bd3a2b225 docs: miscellaneous updates (#4597) 2026-02-08 00:12:38 -05:00
Conn O'Griofa
2f61116432 revert: "fix(linux/xdgportal): flag stream as realtime" (#4686)
This reverts commit bf574afdfd.
2026-02-07 22:03:27 -05:00
Conn O'Griofa
bf574afdfd fix(linux/xdgportal): flag stream as realtime (#4684) 2026-02-07 11:32:37 -05:00
Conn O'Griofa
b48a96f9f1 fix(linux/xdgportal): populate host latency statistics (#4685) 2026-02-07 09:40:06 -05:00
David Lane
874880e5ea feat(linux)!: Support streaming through XDG portals and Pipewire (#4417)
Co-authored-by: Carlos Garnacho <carlosg@gnome.org>
Co-authored-by: Carson Katri <Carson.katri@gmail.com>
Co-authored-by: Bond <bond-d@ukr.net>
Co-authored-by: d.bondarev <d.bondarev@crm-onebox.com>
Co-authored-by: Conn O'Griofa <connogriofa@gmail.com>
2026-02-03 08:19:02 -05:00
Cole Leavitt
38a94b3cfd fix(linux/kms): skip NVIDIA cards for VAAPI on hybrid GPU laptops (#4473) 2026-01-25 19:10:11 -05:00
Andy Grundman
3a12f96a86 perf(threads): implement adjust_thread_priority for macOS and add set_thread_name (#4605) 2026-01-22 19:38:09 -05:00
Julio Sanz
aca5d23f4e fix(linux): fix issues with rendering and touchscreens when displays are scaled (#4607) 2026-01-21 18:29:53 -05:00
Julio Sanz
c313851878 fix(linux): added support for logical screen size with zxdg_output_v1 (#4594) 2026-01-17 20:32:24 -05:00
tstokes22
fd2bfaac7e fix(windows): resolve disappearing cursor after KVM switch (#4407) 2026-01-16 19:45:16 -05:00
Dregu
cf7b0dc7d3 fix(linux/wlr): Fix dmabuf buffer params protocol violation/leak (#4588) 2026-01-16 13:19:45 -05:00
Cameron Gutman
4a9f17415b build(vaapi): Add vaMapBuffers2() stub (#4581) 2026-01-12 23:33:00 -06:00