mirror of
https://git.proxmox.com/git/qemu
synced 2025-08-07 23:49:35 +00:00
pixman/vnc: remove rgb_prepare_row* functions
Let pixman do it instead. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
9f64916da2
commit
47683d669f
@ -1145,74 +1145,6 @@ static int send_palette_rect(VncState *vs, int x, int y,
|
|||||||
return (bytes >= 0);
|
return (bytes >= 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(CONFIG_VNC_JPEG) || defined(CONFIG_VNC_PNG)
|
|
||||||
static void rgb_prepare_row24(VncState *vs, uint8_t *dst, int x, int y,
|
|
||||||
int count)
|
|
||||||
{
|
|
||||||
VncDisplay *vd = vs->vd;
|
|
||||||
uint32_t *fbptr;
|
|
||||||
uint32_t pix;
|
|
||||||
|
|
||||||
fbptr = vnc_server_fb_ptr(vd, x, y);
|
|
||||||
|
|
||||||
while (count--) {
|
|
||||||
pix = *fbptr++;
|
|
||||||
*dst++ = (uint8_t)(pix >> vs->ds->surface->pf.rshift);
|
|
||||||
*dst++ = (uint8_t)(pix >> vs->ds->surface->pf.gshift);
|
|
||||||
*dst++ = (uint8_t)(pix >> vs->ds->surface->pf.bshift);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#define DEFINE_RGB_GET_ROW_FUNCTION(bpp) \
|
|
||||||
\
|
|
||||||
static void \
|
|
||||||
rgb_prepare_row##bpp(VncState *vs, uint8_t *dst, \
|
|
||||||
int x, int y, int count) \
|
|
||||||
{ \
|
|
||||||
VncDisplay *vd = vs->vd; \
|
|
||||||
uint##bpp##_t *fbptr; \
|
|
||||||
uint##bpp##_t pix; \
|
|
||||||
int r, g, b; \
|
|
||||||
\
|
|
||||||
fbptr = vnc_server_fb_ptr(vd, x, y); \
|
|
||||||
\
|
|
||||||
while (count--) { \
|
|
||||||
pix = *fbptr++; \
|
|
||||||
\
|
|
||||||
r = (int)((pix >> vs->ds->surface->pf.rshift) \
|
|
||||||
& vs->ds->surface->pf.rmax); \
|
|
||||||
g = (int)((pix >> vs->ds->surface->pf.gshift) \
|
|
||||||
& vs->ds->surface->pf.gmax); \
|
|
||||||
b = (int)((pix >> vs->ds->surface->pf.bshift) \
|
|
||||||
& vs->ds->surface->pf.bmax); \
|
|
||||||
\
|
|
||||||
*dst++ = (uint8_t)((r * 255 + vs->ds->surface->pf.rmax / 2) \
|
|
||||||
/ vs->ds->surface->pf.rmax); \
|
|
||||||
*dst++ = (uint8_t)((g * 255 + vs->ds->surface->pf.gmax / 2) \
|
|
||||||
/ vs->ds->surface->pf.gmax); \
|
|
||||||
*dst++ = (uint8_t)((b * 255 + vs->ds->surface->pf.bmax / 2) \
|
|
||||||
/ vs->ds->surface->pf.bmax); \
|
|
||||||
} \
|
|
||||||
}
|
|
||||||
|
|
||||||
DEFINE_RGB_GET_ROW_FUNCTION(16)
|
|
||||||
DEFINE_RGB_GET_ROW_FUNCTION(32)
|
|
||||||
|
|
||||||
static void rgb_prepare_row(VncState *vs, uint8_t *dst, int x, int y,
|
|
||||||
int count)
|
|
||||||
{
|
|
||||||
if (VNC_SERVER_FB_BYTES == 4) {
|
|
||||||
if (1) {
|
|
||||||
rgb_prepare_row24(vs, dst, x, y, count);
|
|
||||||
} else {
|
|
||||||
rgb_prepare_row32(vs, dst, x, y, count);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
rgb_prepare_row16(vs, dst, x, y, count);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif /* CONFIG_VNC_JPEG or CONFIG_VNC_PNG */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* JPEG compression stuff.
|
* JPEG compression stuff.
|
||||||
*/
|
*/
|
||||||
@ -1257,6 +1189,7 @@ static int send_jpeg_rect(VncState *vs, int x, int y, int w, int h, int quality)
|
|||||||
struct jpeg_compress_struct cinfo;
|
struct jpeg_compress_struct cinfo;
|
||||||
struct jpeg_error_mgr jerr;
|
struct jpeg_error_mgr jerr;
|
||||||
struct jpeg_destination_mgr manager;
|
struct jpeg_destination_mgr manager;
|
||||||
|
pixman_image_t *linebuf;
|
||||||
JSAMPROW row[1];
|
JSAMPROW row[1];
|
||||||
uint8_t *buf;
|
uint8_t *buf;
|
||||||
int dy;
|
int dy;
|
||||||
@ -1285,13 +1218,14 @@ static int send_jpeg_rect(VncState *vs, int x, int y, int w, int h, int quality)
|
|||||||
|
|
||||||
jpeg_start_compress(&cinfo, true);
|
jpeg_start_compress(&cinfo, true);
|
||||||
|
|
||||||
buf = g_malloc(w * 3);
|
linebuf = qemu_pixman_linebuf_create(PIXMAN_BE_r8g8b8, w);
|
||||||
|
buf = (uint8_t *)pixman_image_get_data(linebuf);
|
||||||
row[0] = buf;
|
row[0] = buf;
|
||||||
for (dy = 0; dy < h; dy++) {
|
for (dy = 0; dy < h; dy++) {
|
||||||
rgb_prepare_row(vs, buf, x, y + dy, w);
|
qemu_pixman_linebuf_fill(linebuf, vs->vd->server, w, dy);
|
||||||
jpeg_write_scanlines(&cinfo, row, 1);
|
jpeg_write_scanlines(&cinfo, row, 1);
|
||||||
}
|
}
|
||||||
g_free(buf);
|
qemu_pixman_image_unref(linebuf);
|
||||||
|
|
||||||
jpeg_finish_compress(&cinfo);
|
jpeg_finish_compress(&cinfo);
|
||||||
jpeg_destroy_compress(&cinfo);
|
jpeg_destroy_compress(&cinfo);
|
||||||
@ -1370,6 +1304,7 @@ static int send_png_rect(VncState *vs, int x, int y, int w, int h,
|
|||||||
png_structp png_ptr;
|
png_structp png_ptr;
|
||||||
png_infop info_ptr;
|
png_infop info_ptr;
|
||||||
png_colorp png_palette = NULL;
|
png_colorp png_palette = NULL;
|
||||||
|
pixman_image_t *linebuf;
|
||||||
int level = tight_png_conf[vs->tight.compression].png_zlib_level;
|
int level = tight_png_conf[vs->tight.compression].png_zlib_level;
|
||||||
int filters = tight_png_conf[vs->tight.compression].png_filters;
|
int filters = tight_png_conf[vs->tight.compression].png_filters;
|
||||||
uint8_t *buf;
|
uint8_t *buf;
|
||||||
@ -1424,17 +1359,18 @@ static int send_png_rect(VncState *vs, int x, int y, int w, int h,
|
|||||||
png_write_info(png_ptr, info_ptr);
|
png_write_info(png_ptr, info_ptr);
|
||||||
|
|
||||||
buffer_reserve(&vs->tight.png, 2048);
|
buffer_reserve(&vs->tight.png, 2048);
|
||||||
buf = g_malloc(w * 3);
|
linebuf = qemu_pixman_linebuf_create(PIXMAN_BE_r8g8b8, w);
|
||||||
|
buf = (uint8_t *)pixman_image_get_data(linebuf);
|
||||||
for (dy = 0; dy < h; dy++)
|
for (dy = 0; dy < h; dy++)
|
||||||
{
|
{
|
||||||
if (color_type == PNG_COLOR_TYPE_PALETTE) {
|
if (color_type == PNG_COLOR_TYPE_PALETTE) {
|
||||||
memcpy(buf, vs->tight.tight.buffer + (dy * w), w);
|
memcpy(buf, vs->tight.tight.buffer + (dy * w), w);
|
||||||
} else {
|
} else {
|
||||||
rgb_prepare_row(vs, buf, x, y + dy, w);
|
qemu_pixman_linebuf_fill(linebuf, vs->vd->server, w, dy);
|
||||||
}
|
}
|
||||||
png_write_row(png_ptr, buf);
|
png_write_row(png_ptr, buf);
|
||||||
}
|
}
|
||||||
g_free(buf);
|
qemu_pixman_image_unref(linebuf);
|
||||||
|
|
||||||
png_write_end(png_ptr, NULL);
|
png_write_end(png_ptr, NULL);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user