xpra icon
Bug tracker and wiki

This bug tracker and wiki are being discontinued
please use https://github.com/Xpra-org/xpra instead.

Opened 9 years ago

Closed 9 years ago

Last modified 17 months ago

#304 closed defect (wontfix)

opengl rendering needs all updates to go via the textures

Reported by: Antoine Martin Owned by: ahuillet
Priority: critical Milestone: 0.9
Component: android Version:
Keywords: Cc:


The current codepath for painting with rgb24/png paints directly onto the GL surface's window, but despite the draws all arriving in the right order (thanks to synchronization via the UI thread and idle_add), the GL updates overwrite the small regions rgb paints that come after it if they happen very quickly (could well be gl double buffer swap happening after our plain rgb paint).

The solution is to tell the server to send those regions as zlibbed YUV and make them go through the same code (updating the texture to paint).
This requires:

  • client to tell the server that it would like small region updates as yuv, only set by the gl window backing
  • padding of the regions so that they satisfy swscale minimum size requirements (width greater than 8, height greater than 2) - preferably by grabbing more pixels than requested rather than padding with empty pixels, though the first approach will do for a PoC
  • adding a generic rgb2yuv utility to the codecs (can be refactored to some common code later)
  • client code to handle YUV painting in GL
  • and also maybe: fallback code so the client can convert to YUV if the server does not support sending YUV data, alternatively we can disable OpenGL when connected to such servers

Attachments (1)

small-regions-as-yuv-paint.patch (23.4 KB) - added by Antoine Martin 9 years ago.
attempts to implement rgb2yuv for small regions

Download all attachments as: .zip

Change History (4)

Changed 9 years ago by Antoine Martin

attempts to implement rgb2yuv for small regions

comment:1 Changed 9 years ago by Antoine Martin

The first stumbling block with the patch above is this line:

*outsize = ysize + usize + vsize + 1024;

It should be instead:

*outsize = ysize + usize + vsize;

But that crashes and I do not understand why.

comment:2 Changed 9 years ago by Antoine Martin

Resolution: wontfix
Status: newclosed

much better solution implemented in r3044

comment:3 Changed 17 months ago by migration script

this ticket has been moved to: https://github.com/Xpra-org/xpra/issues/304

Note: See TracTickets for help on using tickets.