Revision: 4820
          http://tigervnc.svn.sourceforge.net/tigervnc/?rev=4820&view=rev
Author:   bphinz
Date:     2011-12-01 00:50:38 +0000 (Thu, 01 Dec 2011)
Log Message:
-----------
Tight decoder fixes to address issues described in bug #3444605

Modified Paths:
--------------
    trunk/java/com/tigervnc/rfb/CMsgReader.java
    trunk/java/com/tigervnc/rfb/TightDecoder.java

Modified: trunk/java/com/tigervnc/rfb/CMsgReader.java
===================================================================
--- trunk/java/com/tigervnc/rfb/CMsgReader.java 2011-11-27 20:43:47 UTC (rev 
4819)
+++ trunk/java/com/tigervnc/rfb/CMsgReader.java 2011-12-01 00:50:38 UTC (rev 
4820)
@@ -138,8 +138,8 @@
 
   public int[] getImageBuf(int required, int requested, int nPixels) 
   {
-    int requiredBytes = required * (handler.cp.pf().bpp / 8);
-    int requestedBytes = requested * (handler.cp.pf().bpp / 8);
+    int requiredBytes = required;
+    int requestedBytes = requested;
     int size = requestedBytes;
     if (size > imageBufIdealSize) size = imageBufIdealSize;
 

Modified: trunk/java/com/tigervnc/rfb/TightDecoder.java
===================================================================
--- trunk/java/com/tigervnc/rfb/TightDecoder.java       2011-11-27 20:43:47 UTC 
(rev 4819)
+++ trunk/java/com/tigervnc/rfb/TightDecoder.java       2011-12-01 00:50:38 UTC 
(rev 4820)
@@ -25,6 +25,8 @@
 import java.awt.image.BufferedImage;
 import java.io.ByteArrayInputStream;
 import javax.imageio.ImageIO;
+import com.sun.image.codec.jpeg.*;
+import java.io.InputStream;
 
 public class TightDecoder extends Decoder {
 
@@ -157,7 +159,6 @@
 
     int stride = r.width();
     int[] buf = reader.getImageBuf(r.area());
-    
 
     if (palSize == 0) {
       // Truecolor data.
@@ -170,12 +171,26 @@
       } else {
         // Copy
         int h = r.height();
+        int ptr = 0;
+        int srcPtr = 0;
         int w = r.width();
         if (cutZeros) {
-          serverpf.bufferFromRGB(buf, 0, netbuf, 0, w*h);
+          serverpf.bufferFromRGB(buf, ptr, netbuf, srcPtr, w*h);
         } else {
-          for (int i = 0; i < dataSize; i++)
-            buf[i] = netbuf[i] & 0xff;
+          int pixelSize = (bpp >= 24) ? 3 : bpp/8;
+          while (h > 0) {
+            for (int i = 0; i < w; i++) {
+              if (bpp == 8) {
+                buf[ptr+i] = netbuf[srcPtr+i] & 0xff;
+              } else {
+                for (int j = pixelSize-1; j >= 0; j--)
+                  buf[ptr+i] |= ((netbuf[srcPtr+i+j] & 0xff) << j*8);
+              }
+            }
+            ptr += stride;
+            srcPtr += w * pixelSize;
+            h--;
+          }
         }
       }
     } else {
@@ -235,16 +250,18 @@
     // Create an Image object from the JPEG data.
     int imageType = BufferedImage.TYPE_4BYTE_ABGR_PRE;
         
+    int w = r.width();
+    int h = r.height();
     BufferedImage jpeg = 
-      new BufferedImage(r.width(), r.height(), imageType);
+      new BufferedImage(w, h, imageType);
     jpeg.setAccelerationPriority(1);
     try {
       jpeg = ImageIO.read(new ByteArrayInputStream(netbuf));
     } catch (java.io.IOException e) {
       e.printStackTrace();
     }
-    int[] buf = reader.getImageBuf(r.area());
-    jpeg.getRGB(0, 0, r.width(), r.height(), buf, 0, r.width());
+    int[] buf = reader.getImageBuf(w*h);
+    jpeg.getRGB(0, 0, w, h, buf, 0, w);
     jpeg = null;
     handler.imageRect(r, buf);
   }

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure 
contains a definitive record of customers, application performance, 
security threats, fraudulent activity, and more. Splunk takes this 
data and makes sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-novd2d
_______________________________________________
Tigervnc-commits mailing list
Tigervnc-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tigervnc-commits

Reply via email to