ce52f64e52
Implement the xdg-desktop-portal ScreenCast backend via libportal: a
blocking portal handshake (interactive source picker), a PipeWire stream
on the portal's node enumerating BGRx/BGRA/RGBx/RGBA, and a latest-frame
slot handing frames to next_frame(). stop() is thread-safe; teardown
follows the order PipeWire requires. All proxy operations run under the
thread-loop lock to satisfy the protocol extension context checks
('impl_ext_end_proxy called from wrong context' otherwise).
The encoder now accepts padded strides for packed RGB inputs (real
PipeWire row pitches) and maps the new PixelFormat::Bgrx to
AV_PIX_FMT_BGRA.
Add tools/capture_smoke: a manual smoke tool (interactive, not in
meson test) that captures N frames, encodes them, and writes a
self-contained Annex-B elementary stream with prepended SPS/PPS.
Validated manually on Wayland/Hyprland: 2256x1504 H.264 elementary
stream, ffprobe clean. Phase 3 marked complete in docs/PHASES.md.
26 lines
494 B
Meson
26 lines
494 B
Meson
project('screen_cast', 'cpp',
|
|
version : '0.1.0',
|
|
default_options : [
|
|
'cpp_std=c++20',
|
|
'warning_level=3',
|
|
'werror=false',
|
|
'buildtype=release',
|
|
])
|
|
|
|
# Public and private include directories are declared in `src/meson.build`.
|
|
subdir('src')
|
|
|
|
# Manual smoke tools
|
|
subdir('tools')
|
|
|
|
# Tests
|
|
enable_tests = get_option('tests')
|
|
if enable_tests
|
|
subdir('tests')
|
|
endif
|
|
|
|
# Summary for the user
|
|
summary({
|
|
'tests': enable_tests,
|
|
}, section: 'Build options')
|