comparison src/main/java/com/glavsoft/rfb/encoding/decoder/ZRLEDecoder.java @ 571:1dd4eea9f566

offset manegement in ZREE blocking
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Thu, 06 Feb 2020 17:33:58 +0900
parents 44920845d4e1
children a0eeba3ee5d4
comparison
equal deleted inserted replaced
570:4fe5db6260dc 571:1dd4eea9f566
160 int output = deflater.deflate(c1, Deflater.NO_FLUSH); 160 int output = deflater.deflate(c1, Deflater.NO_FLUSH);
161 if (output==0 && ! deflater.needsInput() ) { 161 if (output==0 && ! deflater.needsInput() ) {
162 // compression failed 162 // compression failed
163 deflater.setInput(bytes, prevoffset, 0); 163 deflater.setInput(bytes, prevoffset, 0);
164 output = deflater.deflate(c1, Deflater.FULL_FLUSH); 164 output = deflater.deflate(c1, Deflater.FULL_FLUSH);
165 prevoffset = offset;
165 flushRectangle(rect); 166 flushRectangle(rect);
166 flushMuticast(rfb); 167 flushMuticast(rfb);
167 if (!last) { 168 if (!last) {
168 newMulticastPacket(rfb, rect); 169 newMulticastPacket(rfb, rect);
169 deflater.deflate(c1, Deflater.NO_FLUSH); 170 deflater.deflate(c1, Deflater.NO_FLUSH);
172 deflater.finish(); 173 deflater.finish();
173 flushMuticast(rfb); 174 flushMuticast(rfb);
174 } 175 }
175 return ; 176 return ;
176 } 177 }
177 deflater.deflate(c1); 178 // deflater.deflate(c1);
178 prevoffset = offset; 179 prevoffset = offset;
179 width += tileW; 180 width += tileW;
180 if (c1rect.x > rect.x) { // phase 0 181 if (c1rect.x > rect.x) { // phase 0
181 if (c1rect.x + c1rect.width < rect.x + rect.width) { 182 if (c1rect.x + c1rect.width < rect.x + rect.width) {
182 } else { // end of phase 0 183 } else { // end of phase 0
281 try { 282 try {
282 for (int tileY = rect.y; tileY < maxY; tileY += MAX_TILE_SIZE) { 283 for (int tileY = rect.y; tileY < maxY; tileY += MAX_TILE_SIZE) {
283 int tileHeight = Math.min(maxY - tileY, MAX_TILE_SIZE); 284 int tileHeight = Math.min(maxY - tileY, MAX_TILE_SIZE);
284 if (tileloop.blocking) 285 if (tileloop.blocking)
285 tileloop.c1rect.height += tileHeight; 286 tileloop.c1rect.height += tileHeight;
286
287 for (int tileX = rect.x; tileX < maxX; tileX += MAX_TILE_SIZE) { 287 for (int tileX = rect.x; tileX < maxX; tileX += MAX_TILE_SIZE) {
288 int tileWidth = Math.min(maxX - tileX, MAX_TILE_SIZE); 288 int tileWidth = Math.min(maxX - tileX, MAX_TILE_SIZE);
289 if (tileloop.blocking && tileloop.c1rect.x + tileloop.c1rect.width < rect.x + rect.width) 289 if (tileloop.blocking && tileloop.c1rect.x + tileloop.c1rect.width < rect.x + rect.width)
290 tileloop.c1rect.width += tileWidth; 290 tileloop.c1rect.width += tileWidth;
291 int subencoding = bytes[offset++] & 0x0ff; 291 int subencoding = bytes[offset++] & 0x0ff;