diff options
author | Brian Hinz <bphinz@users.sourceforge.net> | 2011-11-14 00:08:17 +0000 |
---|---|---|
committer | Brian Hinz <bphinz@users.sourceforge.net> | 2011-11-14 00:08:17 +0000 |
commit | 6b4aea78b8510e871f2f964222b8182a2db38cc8 (patch) | |
tree | 8b1644cbc99de606d784458ba5a698ae2e7e8b16 | |
parent | 9b7b087a2d7dcea0967f2c481577d15ac371aed4 (diff) | |
download | tigervnc-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.java | 26 |
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]; } } |