Handling non-topdown lz_rgb
Signed-off-by: Vincent Desprez <vincent.desprez@apwise.com>
This commit is contained in:
parent
2fa7c65144
commit
bfa85a7117
|
@ -288,9 +288,6 @@ SpiceDisplayConn.prototype.process_channel_message = function(msg)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (draw_copy.data.src_bitmap.lz_rgb.top_down != 1)
|
|
||||||
this.log_warn("FIXME: Implement non top down support for lz_rgb");
|
|
||||||
|
|
||||||
var source_img = convert_spice_lz_to_web(canvas.context,
|
var source_img = convert_spice_lz_to_web(canvas.context,
|
||||||
draw_copy.data.src_bitmap.lz_rgb);
|
draw_copy.data.src_bitmap.lz_rgb);
|
||||||
if (! source_img)
|
if (! source_img)
|
||||||
|
|
16
lz.js
16
lz.js
|
@ -141,6 +141,19 @@ function lz_rgb32_decompress(in_buf, at, out_buf, type, default_alpha)
|
||||||
return encoder - 1;
|
return encoder - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function flip_image_data(img)
|
||||||
|
{
|
||||||
|
var wb = img.width * 4;
|
||||||
|
var h = img.height;
|
||||||
|
var temp_h = h;
|
||||||
|
var buff = new Uint8Array(img.width * img.height * 4);
|
||||||
|
while (temp_h--)
|
||||||
|
{
|
||||||
|
buff.set(img.data.subarray(temp_h * wb, (temp_h + 1) * wb), (h - temp_h - 1) * wb);
|
||||||
|
}
|
||||||
|
img.data.set(buff);
|
||||||
|
}
|
||||||
|
|
||||||
function convert_spice_lz_to_web(context, lz_image)
|
function convert_spice_lz_to_web(context, lz_image)
|
||||||
{
|
{
|
||||||
var at;
|
var at;
|
||||||
|
@ -150,6 +163,9 @@ function convert_spice_lz_to_web(context, lz_image)
|
||||||
var ret = context.createImageData(lz_image.width, lz_image.height);
|
var ret = context.createImageData(lz_image.width, lz_image.height);
|
||||||
|
|
||||||
at = lz_rgb32_decompress(u8, 0, ret.data, LZ_IMAGE_TYPE_RGB32, lz_image.type != LZ_IMAGE_TYPE_RGBA);
|
at = lz_rgb32_decompress(u8, 0, ret.data, LZ_IMAGE_TYPE_RGB32, lz_image.type != LZ_IMAGE_TYPE_RGBA);
|
||||||
|
if (!lz_image.top_down)
|
||||||
|
flip_image_data(ret);
|
||||||
|
|
||||||
if (lz_image.type == LZ_IMAGE_TYPE_RGBA)
|
if (lz_image.type == LZ_IMAGE_TYPE_RGBA)
|
||||||
lz_rgb32_decompress(u8, at, ret.data, LZ_IMAGE_TYPE_RGBA, false);
|
lz_rgb32_decompress(u8, at, ret.data, LZ_IMAGE_TYPE_RGBA, false);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue