[PATCH spice-html5]Handling non top-down lz_rgb

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,
In order to make spice-html5 working with windows guest and qxl driver, I made a patch to handle non top-down lz_rgb. I don’t know if it is possible to make it more efficient but tests showed the result is responsive enough.
However I still have glitches in my screen (that I didn’t have without the qxl driver) and cannot find where it comes from. Any idea? Of course I can provide screenshots if needed.

Vincent


--- a/lz.js        2012-11-11 23:31:54.000000000 +0100
+++ b/lz.js       2013-01-16 15:05:56.000000000 +0100
@@ -141,6 +141,27 @@
     return encoder - 1;
 }
 
+function flip_image_data(img)
+{
+    var w = img.width;
+    var h = img.height;
+    var temp_w = w;
+    var temp_h = h;
+    var buff = new Uint8Array(img.width * img.height * 4);
+    while (temp_h--)
+    {
+        while (temp_w--)
+        {
+            buff[(temp_h * w + temp_w) * 4] = img.data[((h - temp_h - 1) * w + temp_w) * 4];
+            buff[(temp_h * w + temp_w) * 4 + 1] = img.data[((h - temp_h - 1) * w + temp_w) * 4 + 1];
+            buff[(temp_h * w + temp_w) * 4 + 2] = img.data[((h - temp_h - 1) * w + temp_w) * 4 + 2];
+            buff[(temp_h * w + temp_w) * 4 + 3] = img.data[((h - temp_h - 1) * w + temp_w) * 4 + 3];
+        }
+        temp_w = w;
+    }
+    img.data.set(buff);
+}
+
 function convert_spice_lz_rgb_to_web(context, lz_rgb)
 {
     var u8 = new Uint8Array(lz_rgb.data);
@@ -151,6 +172,9 @@
     var ret = context.createImageData(lz_rgb.width, lz_rgb.height);
 
     at = lz_rgb32_decompress(u8, 0, ret.data, LZ_IMAGE_TYPE_RGB32, lz_rgb.type != LZ_IMAGE_TYPE_RGBA);
+    if (! lz_rgb.top_down)
+        flip_image_data(ret);
+
     if (lz_rgb.type == LZ_IMAGE_TYPE_RGBA)
         lz_rgb32_decompress(u8, at, ret.data, LZ_IMAGE_TYPE_RGBA, false);


--- a/display.js   2012-11-11 23:31:54.000000000 +0100
+++ b/display.js  2013-01-16 15:48:12.000000000 +0100
@@ -243,9 +243,6 @@
                     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_rgb_to_web(canvas.context,
                                             draw_copy.data.src_bitmap.lz_rgb);
                 if (! source_img)

_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/spice-devel

[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]