blob: 292c3436e2220c551c84ef4d776a45aa1a1a29f8 [file] [log] [blame]
Constantin Kaplinskya2adc8d2006-05-25 05:01:55 +00001/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
2 *
3 * This is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation; either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This software is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this software; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
16 * USA.
17 */
18#include <rdr/InStream.h>
Pierre Ossman86350622015-11-10 13:02:12 +010019#include <rfb/ConnParams.h>
Pierre Ossman0c9bd4b2014-07-09 16:44:11 +020020#include <rfb/PixelBuffer.h>
Constantin Kaplinskya2adc8d2006-05-25 05:01:55 +000021#include <rfb/RawDecoder.h>
22
23using namespace rfb;
24
Pierre Ossman86350622015-11-10 13:02:12 +010025RawDecoder::RawDecoder()
Constantin Kaplinskya2adc8d2006-05-25 05:01:55 +000026{
27}
28
29RawDecoder::~RawDecoder()
30{
31}
32
Pierre Ossman86350622015-11-10 13:02:12 +010033void RawDecoder::readRect(const Rect& r, rdr::InStream* is,
34 const ConnParams& cp, ModifiablePixelBuffer* pb)
Constantin Kaplinskya2adc8d2006-05-25 05:01:55 +000035{
Pierre Ossman86350622015-11-10 13:02:12 +010036 const PixelFormat& pf = cp.pf();
37
38 rdr::U8 imageBuf[16384];
39 const int maxPixels = sizeof(imageBuf) / (pf.bpp/8);
40
Constantin Kaplinskya2adc8d2006-05-25 05:01:55 +000041 int x = r.tl.x;
42 int y = r.tl.y;
43 int w = r.width();
44 int h = r.height();
Pierre Ossman86350622015-11-10 13:02:12 +010045
Constantin Kaplinskya2adc8d2006-05-25 05:01:55 +000046 while (h > 0) {
Pierre Ossman86350622015-11-10 13:02:12 +010047 int dx;
48
49 dx = 0;
50 while (dx < w) {
51 int dw;
52
53 dw = maxPixels;
54 if (dx + dw > w)
55 dw = w - dx;
56
57 is->readBytes(imageBuf, dw * pf.bpp/8);
58 pb->imageRect(pf, Rect(x+dx, y, x+dx+dw, y+1), imageBuf);
59
60 dx += dw;
61 }
62
63 y++;
64 h--;
Constantin Kaplinskya2adc8d2006-05-25 05:01:55 +000065 }
66}