summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Hinz <bphinz@users.sourceforge.net>2011-11-14 00:08:17 +0000
committerBrian Hinz <bphinz@users.sourceforge.net>2011-11-14 00:08:17 +0000
commit6b4aea78b8510e871f2f964222b8182a2db38cc8 (patch)
tree8b1644cbc99de606d784458ba5a698ae2e7e8b16
parent9b7b087a2d7dcea0967f2c481577d15ac371aed4 (diff)
downloadtigervnc-6b4aea78b8510e871f2f964222b8182a2db38cc8.tar.gz
tigervnc-6b4aea78b8510e871f2f964222b8182a2db38cc8.zip
improved Tight decoder performance.
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4797 3789f03b-4d11-0410-bbf8-ca57d06f2519
-rw-r--r--java/com/tigervnc/rfb/TightDecoder.java26
1 files changed, 15 insertions, 11 deletions
diff --git a/java/com/tigervnc/rfb/TightDecoder.java b/java/com/tigervnc/rfb/TightDecoder.java
index 8c2275f9..76986277 100644
--- a/java/com/tigervnc/rfb/TightDecoder.java
+++ b/java/com/tigervnc/rfb/TightDecoder.java
@@ -181,8 +181,10 @@ public class TightDecoder extends Decoder {
if (cutZeros) {
input.readPixels(buf, r.area(), 3, !bigEndian);
} else {
- for (int ptr=0; ptr < dataSize; ptr++)
- buf[ptr] = input.readU8();
+ byte[] netbuf = new byte[dataSize];
+ input.readBytes(netbuf, 0, dataSize);
+ for (int i = 0; i < dataSize; i++)
+ buf[i] = netbuf[i] & 0xff;
}
}
} else {
@@ -191,27 +193,29 @@ public class TightDecoder extends Decoder {
int bits;
if (palSize <= 2) {
// 2-color palette
- for (y = 0; y < r.height(); y++) {
- for (x = 0; x < r.width() / 8; x++) {
+ int height = r.height();
+ int width = r.width();
+ for (y = 0; y < height; y++) {
+ for (x = 0; x < width / 8; x++) {
bits = input.readU8();
for(b = 7; b >= 0; b--) {
buf[ptr++] = palette[bits >> b & 1];
}
}
- if (r.width() % 8 != 0) {
+ if (width % 8 != 0) {
bits = input.readU8();
- for (b = 7; b >= 8 - r.width() % 8; b--) {
+ for (b = 7; b >= 8 - width % 8; b--) {
buf[ptr++] = palette[bits >> b & 1];
}
}
}
} else {
// 256-color palette
- for (y = 0; y < r.height(); y++) {
- for (x = 0; x < r.width(); x++) {
- buf[ptr++] = palette[input.readU8()];
- }
- }
+ int area = r.area();
+ byte[] netbuf = new byte[area];
+ input.readBytes(netbuf, 0, area);
+ for (int i = 0; i < area; i++)
+ buf[ptr++] = palette[netbuf[i] & 0xff];
}
}