Allow arbitrary numbers of columns for VNC server screen resolution.

The prior code only allowed multiples of 32 for the
numbers of columns. Remove this restriction to allow
a forthcoming UEFI firmware update to allow arbitrary
x,y resolutions.

(the code for handling rows already supported non mult-32 values)

Reviewed by:	Leon Dang (original author)
MFC after:	3 weeks
Differential Revision:	https://reviews.freebsd.org/D15274
This commit is contained in:
Peter Grehan
2018-05-04 01:36:49 +00:00
parent 3804f572a3
commit 51688c129f
+8 -25
View File
@@ -541,16 +541,21 @@ rfb_send_screen(struct rfb_softc *rc, int cfd, int all)
}
for (x = 0; x < xcells; x++) {
if (x == (xcells - 1) && rem_x > 0)
cellwidth = rem_x;
else
cellwidth = PIX_PER_CELL;
if (rc->hw_crc)
crc_p[x] = fast_crc32(p,
PIX_PER_CELL * sizeof(uint32_t),
cellwidth * sizeof(uint32_t),
crc_p[x]);
else
crc_p[x] = (uint32_t)crc32(crc_p[x],
(Bytef *)p,
PIX_PER_CELL * sizeof(uint32_t));
cellwidth * sizeof(uint32_t));
p += PIX_PER_CELL;
p += cellwidth;
/* check for crc delta if last row in cell */
if ((y & PIXCELL_MASK) == PIXCELL_MASK || y == (h-1)) {
@@ -563,28 +568,6 @@ rfb_send_screen(struct rfb_softc *rc, int cfd, int all)
}
}
}
if (rem_x) {
if (rc->hw_crc)
crc_p[x] = fast_crc32(p,
rem_x * sizeof(uint32_t),
crc_p[x]);
else
crc_p[x] = (uint32_t)crc32(crc_p[x],
(Bytef *)p,
rem_x * sizeof(uint32_t));
p += rem_x;
if ((y & PIXCELL_MASK) == PIXCELL_MASK || y == (h-1)) {
if (orig_crc[x] != crc_p[x]) {
orig_crc[x] = crc_p[x];
crc_p[x] = 1;
changes++;
} else {
crc_p[x] = 0;
}
}
}
}
/* If number of changes is > THRESH percent, send the whole screen */