Mercurial > hg > Applications > TreeVNC
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; |