Skip to content

RDP/VNC: Decouple pointer updates from frame updates

The commit message is similar for both backends, quoting it here:

When handling PipeWire buffer contents, it is possible that a frame
contains both frame data and pointer data.
In such case, the frame data might need to be processed on the EGL
thread.
In this particular situation, the pointer data is handled first in the
PipeWire data thread and then a task is pushed into the queue of the
EGL thread.

While the frame data is processed on the EGL thread, a new pointer
update can occur and be directly handled.
If the frame data of the previous PipeWire buffer was now finished
processing, both frame data and pointer data of that PipeWire buffer
are now pushed to the actual frame handling of the respective backend.
The frame data is now new, but the pointer data is not and should be
dropped.

This currently results into old pointer updates replacing newer
updates.
To handle this situation, simply decouple pointer updates from frame
updates.
For that, add a separate GSource for the pointer data, where it is
handled alone.

This is built on top of !161 (merged) (commits included here).

Merge request reports