xpra icon
Bug tracker and wiki

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

Version 8 (modified by Antoine Martin, 9 years ago) (diff)


x264 Encoder

x264 is the encoding that supports the most options and tunings. It is the default encoding used when it is available because it offers the best performance and compression out of the box. Hopefully, this will one day be superseded by x265 support: #445

Quality/speed and minimum quality/speed can be set via the command line or via the tray menu. Note that even when using the x264 encoding, some small screen updates may get sent as png or rgb24 to save time/bandwidth (not encoding a full frame).

The following wiki pages are also relevant:


(see wikipedia h264 profiles) x264 supports the following profiles: baseline, main, high, high10, high422 and high444.

At present, we use high or better by default unless the client overrides it.

Quality Option

What this does should be obvious (in x264 speak, this controls the rc.f_rf_constant parameter), but it is more complicated than you think:

  • we support 3 different colourspace modes: YUV420, YUV422 and YUV444 and this affects the quality of the picture too. (YUV420 is used for lowest quality settings). YUV444 uses roughly twice as much bandwidth as YUV420. Switching from one mode to another is expensive, as we then need to send a new key frame and re-initialize both the encoder and the decoder - so the thresholds for going up to the next mode are not the same as the thresholds for going down to the next mode (prevents a yoyo effect).
  • not all modes are supported by all profiles, so we need to switch to a different profile to support YUV422 (high422 or high444) and YUV444 (high444 only).
  • some builds against older versions of libav/ffmpeg only support YUV420, see x264-limited-csc.patch

Speed Option

This option, shown as "latency" via the tray menu, controls how hard the encoder is going to work at compressing the picture. Working harder means lower bandwidth, but also higher latency. x264 supports the following speed settings: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow and placebo. xpra maps the 100% to 0% speed option from ultrafast to slower only. veryslow and placebo are not particularly useful (diminishing returns: much much slower and without sufficient savings for real-time use). ultrafast is only available when setting the encoder speed to 100% manually (via the command line or UI) - note that this setting has side-effects which prevents other settings from behaving as they should if the option is later changed.


Support for x264, especially on the decoding side via avcodec, has provided an almost constant stream of bugs:

  • #462 x264 encoder threading related memory corruption and crash
  • #457 client memory leak
  • #449 Crash when connecting with x264 encoding
  • #427 draw decode failure when attaching to older remote
  • #421 fix support for libav 9.8
  • #398 AVFrameWrapper falling out of scope before being freed by avcodec