view .hgtags @ 17036:7b0c0ab0566b

ioemu: Dynamic VNC colour depth.

The qemu vnc server changes its internal colour depth based on the
client request. This way just one colour conversion is done: the one
in vga_template.h, from the guest colour depth and the vnc server
internal colour depth.

This patch is meant to remove this colour conversion to improve
performances. It accomplishes the goal making the qemu internal colour
depth always the same as the guest colour depth.
The basic idea is that the vnc client is the one that should do the
colour conversion, if necessary. In general it should accept the pixel
format suggested by the server during the initial negotiation. This
behaviour can be set in most vnc clients (vncviewer included).

If the guest changes colour depth, the qemu vnc server changes colour
depth too and notifies the client. The problem is that the vnc
protocol doesn't provide a message from the server to the client to
ask for a colour depth change. So what I am doing is either:

1) quietly starting to do the conversion on vnc server (not gaining
any performance here);

2) closing the vnc connection with the client, so the client can
reconnect and choose the new pixel format.

By default I am doing 1), however the second choice can be enabled
passing the -vnc-switch-bpp command line option.
In order to do the colour conversion on the vnc server I had to
improve the colour conversion code already in place because it only
supported conversions from 32 bpp. The patch adds colour conversion
code that support conversions from any resolution to any resolution.

A last note: to get most out of this patch it is best to set Windows
to 16 bit colour depth, because the 24 bit mode is 24 bit depth and 24
bpp, meaning no alpha channel. The vnc protocol doesn't support 24
bpp, only 32 bpp, so this conversion is unavoidable.

From: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
author Keir Fraser <keir.fraser@citrix.com>
date Mon Feb 11 14:55:33 2008 +0000 (2008-02-11)
parents 45d16899a21d
children 0d47762bad38
line source
1 42882b3e0dda89f3a8ec00da568f86e9b3c230f1 RELEASE-2.0.0
2 475a162b66e2c19b1e9468b234a4ba705334905e RELEASE-2.0.1
3 dc2f08429f17e6614fd2f1ab88cc09ca0a850f32 RELEASE-2.0.2
4 6e1bbc13911751efa0b1c018425c1b085820fa02 RELEASE-2.0.3
5 fb875591fd72e15c31879c0e9034d99b80225595 RELEASE-2.0.4
6 1a522944f76540ea9d73fcc1b0d13d0f670183f0 RELEASE-2.0.5
7 2a5814ad2e5634a5fa291b703a152e7fc0b4faf0 RELEASE-2.0.6
8 487b2ee37d1cecb5f3e7a546b05ad097a0226f2f beta1
9 6a65fe0f84c8339b5b89362d0ec34d8abab752b0 ia64-stable
10 3d330e41f41ce1bc118c02346e18949ad5d67f6b latest-semistable
11 30c521db4c71960b0cf1d9c9e1b658e77b535a3e latest-stable
12 9afec5bc14aeb197ef37ea54a57eacd427463fc3 semistable
13 30c521db4c71960b0cf1d9c9e1b658e77b535a3e split-1.0
14 3d330e41f41ce1bc118c02346e18949ad5d67f6b split-1.1
15 c8fdb0caa77b429cf47f9707926e83947778cb48 RELEASE-3.0.0
16 af0573e9e5258db0a9d28aa954dd302ddd2c2d23 3.0.2-rc
17 d0d3fef37685be264a7f52201f8ef44c030daad3 3.0.2-branched
18 6ed4368b4a9e1924c983774c4b1a2b6baf8e98a6 3.0.3-branched
19 057f7c4dbed1c75a3fbe446d346cee04cff31497 3.0.4-branched
20 d2ef85c6bf84cc619ca2d42c2edfc6229e70a6ad 3.1.0-branched
21 bd3d6b4c52ec809f080c89c4ffcf61dc6e445978 sparse-tree-deprecated
22 1f0c6e0d74a4acc1d3796ff705adc8485eba9377 3.2.0-rc1
23 458dc123dd02d38aaa9acb513d6f237a1c6e967e 3.2.0-rc2
24 ed79613b48817d5e0d1f9b3cf104c0e4e8b0d8cf 3.2.0-rc3
25 c5deb251b9dcece9e466a48a66d3528ca1797db4 3.2.0-rc4
26 36bb2ab4722733d919d32e4555eb46cc6a06cb8f 3.2.0-rc5
27 9facc624a238f2b9437b07fa28ff65884aa867f2 3.2.0-rc6