capture(wayland): fix black screen and pts timing on gst-launch#9
Conversation
68dffbf to
8828f58
Compare
|
@omarroth this is ready for review when you have a moment. It swaps the Verified end-to-end mirroring a niri desktop to a non-Apple AirPlay 2 receiver (Hisense), yuv420p, no crash. Happy to adjust anything. |
8828f58 to
c3c728f
Compare
Keep the gst-launch CLI for the Wayland portal path, but fold in two fixes:
- vapostproc ! video/x-raw,format=I420 imports the portal's DMA-BUF via
VA-API (plain videoconvert fails to negotiate DMA-BUF on many drivers)
and forces 4:2:0 — RGB screens otherwise make x264enc emit "High 4:4:4
Predictive", which most receiver decoders reject (black screen).
- videorate drop-only=true skip-to-first=true ! framerate caps re-stamps
buffers onto a regular fps timeline; the portal can deliver pts=0, which
confuses encoder/muxer timing.
Verified end-to-end: mirrors a Wayland desktop to a non-Apple AirPlay 2
receiver (Hisense), yuv420p, no crash.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
c3c728f to
7d30ad9
Compare
|
@omarroth ready for review |
|
Works for me 👍. Could you also provide the player (device and wayland environment) and model of HiSense device you're attempting to stream to? If possible I'd like to start building a compatibility matrix for preventing breakage as things get moved around. Also I expect you're aware from #8, but please make sure you're comfortable providing this code under the terms of the LGPL or later since the license has changed. Otherwise good to merge. |
|
Sure! Sender setup for the compatibility matrix:
Receiver: Hisense 55A6QU. From its AirPlay advertisement: On the license: yes, I'm comfortable contributing this under LGPL-3.0-or-later. |
Keep the gst-launch CLI for the Wayland portal path, but fold in two fixes found while prototyping a go-gst version:
vapostproc ! video/x-raw,format=I420imports the portal's DMA-BUF via VA-API (plainvideoconvertfails to negotiate DMA-BUF on many drivers) and forces 4:2:0. RGB screens otherwise makex264encemit "High 4:4:4 Predictive", which most receiver decoders reject (black screen).videorate drop-only=true skip-to-first=true ! framerate capsre-stamps buffers onto a regular fps timeline; the portal can deliver pts=0, which confuses encoder/muxer timing.No new dependencies — the build stays pure Go (no CGO); GStreamer is still only invoked as the
gst-launch-1.0external binary.Verified end-to-end: mirrors a Wayland desktop to a non-Apple AirPlay 2 receiver (Hisense), yuv420p, no crash.