commit 55fab1884cf0eae44f06ce97d15c20ca29b8fba2
Author: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
Date: Tue Aug 4 15:35:46 2009 +0100
fix vnc screen corruption bugs and viewer exits
I have been having problems with display corruption using raw
encoding.
I have also been having issues with the vncviewer client exiting with
"rect too big".
These problems appear when there are rapid changes to the framebuffer
contents. [I've been using "find /" in my tests to generate a lot of text
output.]
The root cause of both problems appears to be the changing of
the underlying framebuffer data during the creation of the update.
[Hextile makes multiple passes over the data and gets badly
confused if the data changes..]
The attached patch pulls the pixel data from the "stable" old_data
buffer rather than directly from the (changing) display surface.
Submitted-by: Andrew Thomas <andrew.thomas@xxxxxxxxxx>
Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
(cherry picked from commit 99a5a9155284ab47eda2be738be0115aa97ce0ff)
---
vnc.c | 2 +-
vnchextile.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/vnc.c b/vnc.c
index f8606cb..702ee5d 100644
--- a/vnc.c
+++ b/vnc.c
@@ -499,7 +499,7 @@ static void send_framebuffer_update_raw(VncState *vs, int
x, int y, int w, int h
vnc_framebuffer_update(vs, x, y, w, h, 0);
- row = ds_get_data(vs->ds) + y * ds_get_linesize(vs->ds) + x *
ds_get_bytes_per_pixel(vs->ds);
+ row = vs->old_data + y * ds_get_linesize(vs->ds) + x *
ds_get_bytes_per_pixel(vs->ds);
for (i = 0; i < h; i++) {
vs->write_pixels(vs, row, w * ds_get_bytes_per_pixel(vs->ds));
row += ds_get_linesize(vs->ds);
diff --git a/vnchextile.h b/vnchextile.h
index f3fdfb4..1455886 100644
--- a/vnchextile.h
+++ b/vnchextile.h
@@ -13,7 +13,7 @@ static void CONCAT(send_hextile_tile_, NAME)(VncState *vs,
void *last_fg_,
int *has_bg, int *has_fg)
{
- uint8_t *row = (ds_get_data(vs->ds) + y * ds_get_linesize(vs->ds) + x *
ds_get_bytes_per_pixel(vs->ds));
+ uint8_t *row = (vs->old_data + y * ds_get_linesize(vs->ds) + x *
ds_get_bytes_per_pixel(vs->ds));
pixel_t *irow = (pixel_t *)row;
int j, i;
pixel_t *last_bg = (pixel_t *)last_bg_;
--
generated by git-patchbot for /home/xen/git/qemu-xen-3.4-testing.git
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|