Hi all,
the patch I am attaching enables buffer sharing for vnc when the
linesize != width * depth.
Best Regards,
Stefano Stabellini
Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
diff -r d1e91aba2758 tools/ioemu/hw/vga.c
--- a/tools/ioemu/hw/vga.c Wed Mar 19 12:41:48 2008 +0000
+++ b/tools/ioemu/hw/vga.c Wed Mar 19 17:19:18 2008 +0000
@@ -1148,7 +1148,7 @@ static void vga_draw_text(VGAState *s, i
cw != s->last_cw || cheight != s->last_ch) {
s->last_scr_width = width * cw;
s->last_scr_height = height * cheight;
- dpy_resize(s->ds, s->last_scr_width, s->last_scr_height,
s->last_scr_width * (depth / 8));
+ dpy_resize(s->ds, s->last_scr_width, s->last_scr_height,
s->last_scr_width * (s->ds->depth / 8));
s->last_width = width;
s->last_height = height;
s->last_ch = cheight;
@@ -1571,7 +1571,7 @@ static void vga_draw_graphic(VGAState *s
vga_draw_line = vga_draw_line_table[v * NB_DEPTHS +
get_depth_index(s->ds)];
if (disp_width != s->last_width ||
height != s->last_height) {
- dpy_resize(s->ds, disp_width, height, disp_width * (depth / 8));
+ dpy_resize(s->ds, disp_width, height, s->line_offset);
s->last_scr_width = disp_width;
s->last_scr_height = height;
s->last_width = disp_width;
diff -r d1e91aba2758 tools/ioemu/vnc.c
--- a/tools/ioemu/vnc.c Wed Mar 19 12:41:48 2008 +0000
+++ b/tools/ioemu/vnc.c Wed Mar 19 16:52:29 2008 +0000
@@ -369,20 +369,17 @@ static void vnc_dpy_resize(DisplayState
VncState *vs = ds->opaque;
int o;
- if (linesize != w * vs->depth)
- ds->shared_buf = 0;
-
if (!ds->shared_buf) {
if (allocated)
- ds->data = realloc(ds->data, w * h * vs->depth);
+ ds->data = realloc(ds->data, h * linesize);
else
- ds->data = malloc(w * h * vs->depth);
+ ds->data = malloc(h * linesize);
allocated = 1;
} else if (allocated) {
free(ds->data);
allocated = 0;
}
- vs->old_data = realloc(vs->old_data, w * h * vs->depth);
+ vs->old_data = realloc(vs->old_data, h * linesize);
vs->dirty_row = realloc(vs->dirty_row, h * sizeof(vs->dirty_row[0]));
vs->update_row = realloc(vs->update_row, h * sizeof(vs->dirty_row[0]));
@@ -399,7 +396,7 @@ static void vnc_dpy_resize(DisplayState
size_changed = ds->width != w || ds->height != h;
ds->width = w;
ds->height = h;
- ds->linesize = w * vs->depth;
+ ds->linesize = linesize;
if (vs->csock != -1 && vs->has_resize && size_changed) {
vs->width = ds->width;
vs->height = ds->height;
@@ -2494,6 +2491,7 @@ void vnc_display_init(DisplayState *ds)
vs->ds->width = 640;
vs->ds->height = 400;
+ vs->ds->linesize = 640 * 4;
vnc_dpy_colourdepth(vs->ds, 24);
}
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|