root / ui / vnc-enc-hextile.c @ 245f7b51
History | View | Annotate | Download (3.5 kB)
1 |
/*
|
---|---|
2 |
* QEMU VNC display driver: hextile encoding
|
3 |
*
|
4 |
* Copyright (C) 2006 Anthony Liguori <anthony@codemonkey.ws>
|
5 |
* Copyright (C) 2006 Fabrice Bellard
|
6 |
* Copyright (C) 2009 Red Hat, Inc
|
7 |
*
|
8 |
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
9 |
* of this software and associated documentation files (the "Software"), to deal
|
10 |
* in the Software without restriction, including without limitation the rights
|
11 |
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
12 |
* copies of the Software, and to permit persons to whom the Software is
|
13 |
* furnished to do so, subject to the following conditions:
|
14 |
*
|
15 |
* The above copyright notice and this permission notice shall be included in
|
16 |
* all copies or substantial portions of the Software.
|
17 |
*
|
18 |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
19 |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
20 |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
21 |
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
22 |
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
23 |
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24 |
* THE SOFTWARE.
|
25 |
*/
|
26 |
|
27 |
#include "vnc.h" |
28 |
|
29 |
static void hextile_enc_cord(uint8_t *ptr, int x, int y, int w, int h) |
30 |
{ |
31 |
ptr[0] = ((x & 0x0F) << 4) | (y & 0x0F); |
32 |
ptr[1] = (((w - 1) & 0x0F) << 4) | ((h - 1) & 0x0F); |
33 |
} |
34 |
|
35 |
#define BPP 8 |
36 |
#include "vnc-enc-hextile-template.h" |
37 |
#undef BPP
|
38 |
|
39 |
#define BPP 16 |
40 |
#include "vnc-enc-hextile-template.h" |
41 |
#undef BPP
|
42 |
|
43 |
#define BPP 32 |
44 |
#include "vnc-enc-hextile-template.h" |
45 |
#undef BPP
|
46 |
|
47 |
#define GENERIC
|
48 |
#define BPP 8 |
49 |
#include "vnc-enc-hextile-template.h" |
50 |
#undef BPP
|
51 |
#undef GENERIC
|
52 |
|
53 |
#define GENERIC
|
54 |
#define BPP 16 |
55 |
#include "vnc-enc-hextile-template.h" |
56 |
#undef BPP
|
57 |
#undef GENERIC
|
58 |
|
59 |
#define GENERIC
|
60 |
#define BPP 32 |
61 |
#include "vnc-enc-hextile-template.h" |
62 |
#undef BPP
|
63 |
#undef GENERIC
|
64 |
|
65 |
int vnc_hextile_send_framebuffer_update(VncState *vs, int x, |
66 |
int y, int w, int h) |
67 |
{ |
68 |
int i, j;
|
69 |
int has_fg, has_bg;
|
70 |
uint8_t *last_fg, *last_bg; |
71 |
VncDisplay *vd = vs->vd; |
72 |
|
73 |
last_fg = (uint8_t *) qemu_malloc(vd->server->pf.bytes_per_pixel); |
74 |
last_bg = (uint8_t *) qemu_malloc(vd->server->pf.bytes_per_pixel); |
75 |
has_fg = has_bg = 0;
|
76 |
for (j = y; j < (y + h); j += 16) { |
77 |
for (i = x; i < (x + w); i += 16) { |
78 |
vs->send_hextile_tile(vs, i, j, |
79 |
MIN(16, x + w - i), MIN(16, y + h - j), |
80 |
last_bg, last_fg, &has_bg, &has_fg); |
81 |
} |
82 |
} |
83 |
free(last_fg); |
84 |
free(last_bg); |
85 |
|
86 |
return 1; |
87 |
} |
88 |
|
89 |
void vnc_hextile_set_pixel_conversion(VncState *vs, int generic) |
90 |
{ |
91 |
if (!generic) {
|
92 |
switch (vs->ds->surface->pf.bits_per_pixel) {
|
93 |
case 8: |
94 |
vs->send_hextile_tile = send_hextile_tile_8; |
95 |
break;
|
96 |
case 16: |
97 |
vs->send_hextile_tile = send_hextile_tile_16; |
98 |
break;
|
99 |
case 32: |
100 |
vs->send_hextile_tile = send_hextile_tile_32; |
101 |
break;
|
102 |
} |
103 |
} else {
|
104 |
switch (vs->ds->surface->pf.bits_per_pixel) {
|
105 |
case 8: |
106 |
vs->send_hextile_tile = send_hextile_tile_generic_8; |
107 |
break;
|
108 |
case 16: |
109 |
vs->send_hextile_tile = send_hextile_tile_generic_16; |
110 |
break;
|
111 |
case 32: |
112 |
vs->send_hextile_tile = send_hextile_tile_generic_32; |
113 |
break;
|
114 |
} |
115 |
} |
116 |
} |