comparison src/main/java/com/glavsoft/rfb/encoding/decoder/ZRLEDecoder.java @ 498:8d95d64c33bf

add multicastPut
author oshiro
date Fri, 15 Feb 2019 20:11:47 +0900
parents 0f9b3de45fb2
children 5455c62a3775
comparison
equal deleted inserted replaced
497:62d6e9180a11 498:8d95d64c33bf
25 package com.glavsoft.rfb.encoding.decoder; 25 package com.glavsoft.rfb.encoding.decoder;
26 26
27 import com.glavsoft.drawing.Renderer; 27 import com.glavsoft.drawing.Renderer;
28 import com.glavsoft.exceptions.TransportException; 28 import com.glavsoft.exceptions.TransportException;
29 import com.glavsoft.transport.Reader; 29 import com.glavsoft.transport.Reader;
30 import jp.ac.u_ryukyu.treevnc.TreeRFBProto;
30 31
31 public class ZRLEDecoder extends ZlibDecoder { 32 public class ZRLEDecoder extends ZlibDecoder {
32 private static final int MAX_TILE_SIZE = 64; 33 private static final int MAX_TILE_SIZE = 64;
33 private int[] decodedBitmap; 34 private int[] decodedBitmap;
34 private int[] palette; 35 private int[] palette;
38 FramebufferUpdateRectangle rect) throws TransportException { 39 FramebufferUpdateRectangle rect) throws TransportException {
39 int zippedLength = (int) reader.readUInt32(); 40 int zippedLength = (int) reader.readUInt32();
40 if (0 == zippedLength) return; 41 if (0 == zippedLength) return;
41 int length = rect.width * rect.height * renderer.getBytesPerPixel(); 42 int length = rect.width * rect.height * renderer.getBytesPerPixel();
42 byte[] bytes = unzip(reader, zippedLength, length, rect.getEncodingType()); 43 byte[] bytes = unzip(reader, zippedLength, length, rect.getEncodingType());
43 decode1(renderer, rect, bytes, zippedLength); 44 decode1(renderer, rect, bytes, zippedLength, null);
44 } 45 }
45 46
46 public void decode1(Renderer renderer, 47 public void decode1(Renderer renderer,
47 FramebufferUpdateRectangle rect, byte[] bytes, int zippedLength) throws TransportException { 48 FramebufferUpdateRectangle rect, byte[] bytes, int zippedLength, TreeRFBProto rfbProto) throws TransportException {
48 int offset = zippedLength; 49 int offset = zippedLength;
49 int maxX = rect.x + rect.width; 50 int maxX = rect.x + rect.width;
50 int maxY = rect.y + rect.height; 51 int maxY = rect.y + rect.height;
52 int prevoffset = offset;
53 System.out.println("decode1: "+rect);
51 if (null == palette) { 54 if (null == palette) {
52 palette = new int [128]; 55 palette = new int [128];
53 } 56 }
54 if (null == decodedBitmap) { 57 if (null == decodedBitmap) {
55 decodedBitmap = new int[MAX_TILE_SIZE * MAX_TILE_SIZE]; 58 decodedBitmap = new int[MAX_TILE_SIZE * MAX_TILE_SIZE];
84 } else { 87 } else {
85 offset += decodePacked(bytes, offset, renderer, paletteSize, tileX, tileY, tileWidth, tileHeight); 88 offset += decodePacked(bytes, offset, renderer, paletteSize, tileX, tileY, tileWidth, tileHeight);
86 } 89 }
87 } 90 }
88 } 91 }
92 rfbProto.multicastPut(byte, prevoffset, offset);
93 prevoffset = offset;
89 } 94 }
90 } 95 }
91 96
92 private int decodePlainRle(byte[] bytes, int offset, Renderer renderer, 97 private int decodePlainRle(byte[] bytes, int offset, Renderer renderer,
93 int tileX, int tileY, int tileWidth, int tileHeight) { 98 int tileX, int tileY, int tileWidth, int tileHeight) {