Pat Campbell
2008-Feb-26 17:06 UTC
[Xen-devel] vnc client, 16 bit, strange colors when viewing a PV guest
Using tightVNC, the colors are messed up when viewing a PV guest running on a 3.2 hypervisor from a client system with a 16 bit deep display. virt-manager --> viewer works OK. Standalone virt-viewer and other VNC clients have bad colors. This problem is new with Xen 3.2 and the qemu xenfb code. As a short term fix I added a second macro in tools/ioemu/hw/xenfb.c to munge the colors from 32 bit to 16 bit based on an algorithm used by RealVNC. Patch I used is attached, not suggesting it be merged. Is anybody else seeing this problem? By the way, while looking at the original macro I think the last shift for blue should of used BRS instead if GRS. ( Changing that did not make the colors better. ) #define BLT(SRC_T,DST_T,RLS,GLS,BLS,RRS,GRS,BRS,RM,GM,BM) \ for (line = y ; line < h ; line++) { \ SRC_T *src = (SRC_T *)(xenfb->pixels \ + (line * xenfb->row_stride) \ + (x * xenfb->depth / 8)); \ DST_T *dst = (DST_T *)(xenfb->ds->data \ + (line * xenfb->ds->linesize) \ + (x * xenfb->ds->depth / 8)); \ int col; \ for (col = x ; col < w ; col++) { \ *dst = (((*src >> RRS) & RM) << RLS) | \ (((*src >> GRS) & GM) << GLS) | \ - (((*src >> GRS) & BM) << BLS); \ + (((*src >> BRS) & BM) << BLS); \ src++; \ dst++; \ } \ } _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Daniel P. Berrange
2008-Feb-26 17:17 UTC
[Xen-devel] Re: vnc client, 16 bit, strange colors when viewing a PV guest
On Tue, Feb 26, 2008 at 10:06:13AM -0700, Pat Campbell wrote:> > Using tightVNC, the colors are messed up when viewing a PV guest running > on a 3.2 hypervisor from a client system with a 16 bit deep display. > virt-manager --> viewer works OK. > Standalone virt-viewer and other VNC clients have bad colors. > > This problem is new with Xen 3.2 and the qemu xenfb code. > > As a short term fix I added a second macro in tools/ioemu/hw/xenfb.c to > munge the colors from 32 bit to 16 bit based on an algorithm used by > RealVNC. Patch I used is attached, not suggesting it be merged. > > Is anybody else seeing this problem? > > By the way, while looking at the original macro I think the last shift > for blue should of used BRS instead if GRS. ( Changing that did not > make the colors better. )Yes, clearly that last GRS is bogus & should have been BRS.> int col; \ > for (col = x ; col < w ; col++) { \ > *dst = (((*src >> RRS) & RM) << RLS) | \ > (((*src >> GRS) & GM) << GLS) | \ > - (((*src >> GRS) & BM) << BLS); \ > + (((*src >> BRS) & BM) << BLS); \ > src++; \ > dst++; \ > } \ > }Note that there is also a colour shift problem in GTK-VNC (used by virt-viewer & virt-manager) - you need latest GTK-VNC from the source repo to get the fix. So you may have been seeing a cobmo of 2 bugs Dan. -- |=- Red Hat, Engineering, Emerging Technologies, Boston. +1 978 392 2496 -=| |=- Perl modules: http://search.cpan.org/~danberr/ -=| |=- Projects: http://freshmeat.net/~danielpb/ -=| |=- GnuPG: 7D3B9505 F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 -=| _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel