uncompress bitmaps and big endian fixes

ulab-original
jsorg71 19 years ago
parent 64bdbed95f
commit ebb1afd2e8

@ -213,10 +213,9 @@ rdp_orders_process_raw_bmpcache(struct rdp_orders* self, struct stream* s,
int height; int height;
int bpp; int bpp;
int Bpp; int Bpp;
int x;
int y; int y;
char* data;
char* inverted; char* inverted;
char* src;
char* dst; char* dst;
struct rdp_bitmap* bitmap; struct rdp_bitmap* bitmap;
struct stream* rec_s; struct stream* rec_s;
@ -229,13 +228,24 @@ rdp_orders_process_raw_bmpcache(struct rdp_orders* self, struct stream* s,
Bpp = (bpp + 7) / 8; Bpp = (bpp + 7) / 8;
in_uint16_le(s, bufsize); in_uint16_le(s, bufsize);
in_uint16_le(s, cache_idx); in_uint16_le(s, cache_idx);
in_uint8p(s, data, bufsize);
inverted = (char*)g_malloc(width * height * Bpp, 0); inverted = (char*)g_malloc(width * height * Bpp, 0);
for (y = 0; y < height; y++) for (y = 0; y < height; y++)
{ {
src = data + (y * (width * Bpp));
dst = inverted + (((height - y) - 1) * (width * Bpp)); dst = inverted + (((height - y) - 1) * (width * Bpp));
g_memcpy(dst, src, width * Bpp); if (Bpp == 1)
{
for (x = 0; x < width; x++)
{
in_uint8(s, dst[x]);
}
}
else if (Bpp == 2)
{
for (x = 0; x < width; x++)
{
in_uint16_le(s, ((unsigned short*)dst)[x]);
}
}
} }
bitmap = (struct rdp_bitmap*)g_malloc(sizeof(struct rdp_bitmap), 0); bitmap = (struct rdp_bitmap*)g_malloc(sizeof(struct rdp_bitmap), 0);
bitmap->width = width; bitmap->width = width;

@ -505,6 +505,7 @@ rdp_rdp_process_bitmap_updates(struct rdp_rdp* self, struct stream* s)
int bufsize; int bufsize;
int size; int size;
int i; int i;
int x;
int y; int y;
char* data; char* data;
char* bmpdata0; char* bmpdata0;
@ -546,12 +547,25 @@ rdp_rdp_process_bitmap_updates(struct rdp_rdp* self, struct stream* s)
self->mod->server_paint_rect(self->mod, left, top, cx, cy, bmpdata1, self->mod->server_paint_rect(self->mod, left, top, cx, cy, bmpdata1,
width, height, 0, 0); width, height, 0, 0);
} }
else else /* not compressed */
{ {
for (y = 0; y < height; y++) for (y = 0; y < height; y++)
{ {
data = bmpdata0 + ((height - y) - 1) * (width * Bpp); data = bmpdata0 + ((height - y) - 1) * (width * Bpp);
in_uint8a(s, data, width * Bpp); if (Bpp == 1)
{
for (x = 0; x < width; x++)
{
in_uint8(s, data[x]);
}
}
else if (Bpp == 2)
{
for (x = 0; x < width; x++)
{
in_uint16_le(s, ((unsigned short*)data)[x]);
}
}
} }
bmpdata1 = rdp_orders_convert_bitmap(bpp, self->mod->xrdp_bpp, bmpdata1 = rdp_orders_convert_bitmap(bpp, self->mod->xrdp_bpp,
bmpdata0, width, height, bmpdata0, width, height,

Loading…
Cancel
Save