Get rid of the register mechanism for encoders and decoders
We have no use for it, so let's keep things simple.
diff --git a/common/rfb/CMsgWriter.cxx b/common/rfb/CMsgWriter.cxx
index ddc25ff..0ebd33e 100644
--- a/common/rfb/CMsgWriter.cxx
+++ b/common/rfb/CMsgWriter.cxx
@@ -18,6 +18,7 @@
#include <stdio.h>
#include <rdr/OutStream.h>
#include <rfb/msgTypes.h>
+#include <rfb/encodings.h>
#include <rfb/PixelFormat.h>
#include <rfb/Rect.h>
#include <rfb/ConnParams.h>
diff --git a/common/rfb/Decoder.cxx b/common/rfb/Decoder.cxx
index 193b61c..e201821 100644
--- a/common/rfb/Decoder.cxx
+++ b/common/rfb/Decoder.cxx
@@ -1,4 +1,5 @@
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
+ * Copyright 2014 Pierre Ossman for Cendio AB
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,7 +17,7 @@
* USA.
*/
#include <stdio.h>
-#include <rfb/Exception.h>
+#include <rfb/encodings.h>
#include <rfb/Decoder.h>
#include <rfb/RawDecoder.h>
#include <rfb/RREDecoder.h>
@@ -30,41 +31,34 @@
{
}
-DecoderCreateFnType Decoder::createFns[encodingMax+1] = { 0 };
-
bool Decoder::supported(int encoding)
{
- return encoding >= 0 && encoding <= encodingMax && createFns[encoding];
+ switch (encoding) {
+ case encodingRaw:
+ case encodingRRE:
+ case encodingHextile:
+ case encodingZRLE:
+ case encodingTight:
+ return true;
+ default:
+ return false;
+ }
}
Decoder* Decoder::createDecoder(int encoding, CMsgReader* reader)
{
- if (supported(encoding))
- return (*createFns[encoding])(reader);
- return 0;
-}
-
-void Decoder::registerDecoder(int encoding,
- DecoderCreateFnType createFn)
-{
- if (encoding > encodingMax)
- throw Exception("Decoder::registerDecoder: encoding out of range");
-
- if (createFns[encoding])
- fprintf(stderr,"Replacing existing decoder for encoding %s (%d)\n",
- encodingName(encoding), encoding);
- createFns[encoding] = createFn;
-}
-
-int DecoderInit::count = 0;
-
-DecoderInit::DecoderInit()
-{
- if (count++ != 0) return;
-
- Decoder::registerDecoder(encodingRaw, RawDecoder::create);
- Decoder::registerDecoder(encodingRRE, RREDecoder::create);
- Decoder::registerDecoder(encodingHextile, HextileDecoder::create);
- Decoder::registerDecoder(encodingZRLE, ZRLEDecoder::create);
- Decoder::registerDecoder(encodingTight, TightDecoder::create);
+ switch (encoding) {
+ case encodingRaw:
+ return new RawDecoder(reader);
+ case encodingRRE:
+ return new RREDecoder(reader);
+ case encodingHextile:
+ return new HextileDecoder(reader);
+ case encodingZRLE:
+ return new ZRLEDecoder(reader);
+ case encodingTight:
+ return new TightDecoder(reader);
+ default:
+ return NULL;
+ }
}
diff --git a/common/rfb/Decoder.h b/common/rfb/Decoder.h
index 50aee82..025d63f 100644
--- a/common/rfb/Decoder.h
+++ b/common/rfb/Decoder.h
@@ -1,4 +1,5 @@
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
+ * Copyright 2014 Pierre Ossman for Cendio AB
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -19,13 +20,10 @@
#define __RFB_DECODER_H__
#include <rfb/Rect.h>
-#include <rfb/encodings.h>
namespace rfb {
class CMsgReader;
class CMsgHandler;
- class Decoder;
- typedef Decoder* (*DecoderCreateFnType)(CMsgReader*);
class Decoder {
public:
@@ -34,19 +32,7 @@
static bool supported(int encoding);
static Decoder* createDecoder(int encoding, CMsgReader* reader);
- static void registerDecoder(int encoding,
- DecoderCreateFnType createFn);
- private:
- static DecoderCreateFnType createFns[encodingMax+1];
};
-
- class DecoderInit {
- static int count;
- public:
- DecoderInit();
- };
-
- static DecoderInit decoderInitObj;
}
#endif
diff --git a/common/rfb/Encoder.cxx b/common/rfb/Encoder.cxx
index 5de7543..1733c8e 100644
--- a/common/rfb/Encoder.cxx
+++ b/common/rfb/Encoder.cxx
@@ -1,4 +1,5 @@
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
+ * Copyright 2014 Pierre Ossman for Cendio AB
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,6 +17,7 @@
* USA.
*/
#include <stdio.h>
+#include <rfb/encodings.h>
#include <rfb/Exception.h>
#include <rfb/Encoder.h>
#include <rfb/RawEncoder.h>
@@ -30,48 +32,34 @@
{
}
-EncoderCreateFnType Encoder::createFns[encodingMax+1] = { 0 };
-
bool Encoder::supported(int encoding)
{
- return encoding >= 0 && encoding <= encodingMax && createFns[encoding];
+ switch (encoding) {
+ case encodingRaw:
+ case encodingRRE:
+ case encodingHextile:
+ case encodingZRLE:
+ case encodingTight:
+ return true;
+ default:
+ return false;
+ }
}
Encoder* Encoder::createEncoder(int encoding, SMsgWriter* writer)
{
- if (supported(encoding))
- return (*createFns[encoding])(writer);
- return 0;
-}
-
-void Encoder::registerEncoder(int encoding,
- EncoderCreateFnType createFn)
-{
- if (encoding > encodingMax)
- throw Exception("Encoder::registerEncoder: encoding out of range");
-
- if (createFns[encoding])
- fprintf(stderr,"Replacing existing encoder for encoding %s (%d)\n",
- encodingName(encoding), encoding);
- createFns[encoding] = createFn;
-}
-
-void Encoder::unregisterEncoder(int encoding)
-{
- if (encoding > encodingMax)
- throw Exception("Encoder::unregisterEncoder: encoding out of range");
- createFns[encoding] = 0;
-}
-
-int EncoderInit::count = 0;
-
-EncoderInit::EncoderInit()
-{
- if (count++ != 0) return;
-
- Encoder::registerEncoder(encodingRaw, RawEncoder::create);
- Encoder::registerEncoder(encodingRRE, RREEncoder::create);
- Encoder::registerEncoder(encodingHextile, HextileEncoder::create);
- Encoder::registerEncoder(encodingZRLE, ZRLEEncoder::create);
- Encoder::registerEncoder(encodingTight, TightEncoder::create);
+ switch (encoding) {
+ case encodingRaw:
+ return new RawEncoder(writer);
+ case encodingRRE:
+ return new RREEncoder(writer);
+ case encodingHextile:
+ return new HextileEncoder(writer);
+ case encodingZRLE:
+ return new ZRLEEncoder(writer);
+ case encodingTight:
+ return new TightEncoder(writer);
+ default:
+ return NULL;
+ }
}
diff --git a/common/rfb/Encoder.h b/common/rfb/Encoder.h
index 1a7935d..882074d 100644
--- a/common/rfb/Encoder.h
+++ b/common/rfb/Encoder.h
@@ -1,5 +1,6 @@
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
* Copyright (C) 2011 D. R. Commander. All Rights Reserved.
+ * Copyright 2014 Pierre Ossman for Cendio AB
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -20,14 +21,12 @@
#define __RFB_ENCODER_H__
#include <rfb/Rect.h>
-#include <rfb/encodings.h>
+#include <rfb/TransImageGetter.h>
#include <rfb/JpegCompressor.h>
namespace rfb {
class SMsgWriter;
- class Encoder;
class TransImageGetter;
- typedef Encoder* (*EncoderCreateFnType)(SMsgWriter*);
class Encoder {
public:
@@ -46,20 +45,7 @@
static bool supported(int encoding);
static Encoder* createEncoder(int encoding, SMsgWriter* writer);
- static void registerEncoder(int encoding,
- EncoderCreateFnType createFn);
- static void unregisterEncoder(int encoding);
- private:
- static EncoderCreateFnType createFns[encodingMax+1];
};
-
- class EncoderInit {
- static int count;
- public:
- EncoderInit();
- };
-
- static EncoderInit encoderInitObj;
}
#endif
diff --git a/common/rfb/HextileDecoder.cxx b/common/rfb/HextileDecoder.cxx
index e817c73..ae61267 100644
--- a/common/rfb/HextileDecoder.cxx
+++ b/common/rfb/HextileDecoder.cxx
@@ -34,11 +34,6 @@
#include <rfb/hextileDecode.h>
#undef BPP
-Decoder* HextileDecoder::create(CMsgReader* reader)
-{
- return new HextileDecoder(reader);
-}
-
HextileDecoder::HextileDecoder(CMsgReader* reader_) : reader(reader_)
{
}
diff --git a/common/rfb/HextileDecoder.h b/common/rfb/HextileDecoder.h
index e7dd3d5..95a7f8a 100644
--- a/common/rfb/HextileDecoder.h
+++ b/common/rfb/HextileDecoder.h
@@ -24,11 +24,10 @@
class HextileDecoder : public Decoder {
public:
- static Decoder* create(CMsgReader* reader);
- virtual void readRect(const Rect& r, CMsgHandler* handler);
- virtual ~HextileDecoder();
- private:
HextileDecoder(CMsgReader* reader);
+ virtual ~HextileDecoder();
+ virtual void readRect(const Rect& r, CMsgHandler* handler);
+ private:
CMsgReader* reader;
};
}
diff --git a/common/rfb/HextileEncoder.cxx b/common/rfb/HextileEncoder.cxx
index 60833bd..0907bab 100644
--- a/common/rfb/HextileEncoder.cxx
+++ b/common/rfb/HextileEncoder.cxx
@@ -45,11 +45,6 @@
#include <rfb/hextileEncodeBetter.h>
#undef BPP
-Encoder* HextileEncoder::create(SMsgWriter* writer)
-{
- return new HextileEncoder(writer);
-}
-
HextileEncoder::HextileEncoder(SMsgWriter* writer_) : writer(writer_)
{
}
diff --git a/common/rfb/HextileEncoder.h b/common/rfb/HextileEncoder.h
index 6b89643..0c475a8 100644
--- a/common/rfb/HextileEncoder.h
+++ b/common/rfb/HextileEncoder.h
@@ -24,11 +24,10 @@
class HextileEncoder : public Encoder {
public:
- static Encoder* create(SMsgWriter* writer);
- virtual bool writeRect(const Rect& r, TransImageGetter* ig, Rect* actual);
- virtual ~HextileEncoder();
- private:
HextileEncoder(SMsgWriter* writer);
+ virtual ~HextileEncoder();
+ virtual bool writeRect(const Rect& r, TransImageGetter* ig, Rect* actual);
+ private:
SMsgWriter* writer;
};
}
diff --git a/common/rfb/RREDecoder.cxx b/common/rfb/RREDecoder.cxx
index da56ee7..b81a4a8 100644
--- a/common/rfb/RREDecoder.cxx
+++ b/common/rfb/RREDecoder.cxx
@@ -34,11 +34,6 @@
#include <rfb/rreDecode.h>
#undef BPP
-Decoder* RREDecoder::create(CMsgReader* reader)
-{
- return new RREDecoder(reader);
-}
-
RREDecoder::RREDecoder(CMsgReader* reader_) : reader(reader_)
{
}
diff --git a/common/rfb/RREDecoder.h b/common/rfb/RREDecoder.h
index 2309f75..98abf98 100644
--- a/common/rfb/RREDecoder.h
+++ b/common/rfb/RREDecoder.h
@@ -24,11 +24,10 @@
class RREDecoder : public Decoder {
public:
- static Decoder* create(CMsgReader* reader);
- virtual void readRect(const Rect& r, CMsgHandler* handler);
- virtual ~RREDecoder();
- private:
RREDecoder(CMsgReader* reader);
+ virtual ~RREDecoder();
+ virtual void readRect(const Rect& r, CMsgHandler* handler);
+ private:
CMsgReader* reader;
};
}
diff --git a/common/rfb/RREEncoder.cxx b/common/rfb/RREEncoder.cxx
index 0bb2c7f..36d4695 100644
--- a/common/rfb/RREEncoder.cxx
+++ b/common/rfb/RREEncoder.cxx
@@ -33,11 +33,6 @@
#include <rfb/rreEncode.h>
#undef BPP
-Encoder* RREEncoder::create(SMsgWriter* writer)
-{
- return new RREEncoder(writer);
-}
-
RREEncoder::RREEncoder(SMsgWriter* writer_) : writer(writer_)
{
}
diff --git a/common/rfb/RREEncoder.h b/common/rfb/RREEncoder.h
index 6178d57..f7d576e 100644
--- a/common/rfb/RREEncoder.h
+++ b/common/rfb/RREEncoder.h
@@ -25,11 +25,10 @@
class RREEncoder : public Encoder {
public:
- static Encoder* create(SMsgWriter* writer);
- virtual bool writeRect(const Rect& r, TransImageGetter* ig, Rect* actual);
- virtual ~RREEncoder();
- private:
RREEncoder(SMsgWriter* writer);
+ virtual ~RREEncoder();
+ virtual bool writeRect(const Rect& r, TransImageGetter* ig, Rect* actual);
+ private:
SMsgWriter* writer;
rdr::MemOutStream mos;
};
diff --git a/common/rfb/RawDecoder.cxx b/common/rfb/RawDecoder.cxx
index 57cb37b..5fd3b7c 100644
--- a/common/rfb/RawDecoder.cxx
+++ b/common/rfb/RawDecoder.cxx
@@ -22,11 +22,6 @@
using namespace rfb;
-Decoder* RawDecoder::create(CMsgReader* reader)
-{
- return new RawDecoder(reader);
-}
-
RawDecoder::RawDecoder(CMsgReader* reader_) : reader(reader_)
{
}
diff --git a/common/rfb/RawDecoder.h b/common/rfb/RawDecoder.h
index 9fdbb22..e09cca2 100644
--- a/common/rfb/RawDecoder.h
+++ b/common/rfb/RawDecoder.h
@@ -24,11 +24,10 @@
class RawDecoder : public Decoder {
public:
- static Decoder* create(CMsgReader* reader);
- virtual void readRect(const Rect& r, CMsgHandler* handler);
- virtual ~RawDecoder();
- private:
RawDecoder(CMsgReader* reader);
+ virtual ~RawDecoder();
+ virtual void readRect(const Rect& r, CMsgHandler* handler);
+ private:
CMsgReader* reader;
};
}
diff --git a/common/rfb/RawEncoder.cxx b/common/rfb/RawEncoder.cxx
index 81eea8b..4b8de6b 100644
--- a/common/rfb/RawEncoder.cxx
+++ b/common/rfb/RawEncoder.cxx
@@ -23,11 +23,6 @@
using namespace rfb;
-Encoder* RawEncoder::create(SMsgWriter* writer)
-{
- return new RawEncoder(writer);
-}
-
RawEncoder::RawEncoder(SMsgWriter* writer_) : writer(writer_)
{
}
diff --git a/common/rfb/RawEncoder.h b/common/rfb/RawEncoder.h
index 34dba0b..22d45db 100644
--- a/common/rfb/RawEncoder.h
+++ b/common/rfb/RawEncoder.h
@@ -24,11 +24,10 @@
class RawEncoder : public Encoder {
public:
- static Encoder* create(SMsgWriter* writer);
- virtual bool writeRect(const Rect& r, TransImageGetter* ig, Rect* actual);
- virtual ~RawEncoder();
- private:
RawEncoder(SMsgWriter* writer);
+ virtual ~RawEncoder();
+ virtual bool writeRect(const Rect& r, TransImageGetter* ig, Rect* actual);
+ private:
SMsgWriter* writer;
};
}
diff --git a/common/rfb/TightDecoder.cxx b/common/rfb/TightDecoder.cxx
index b3d174a..d4ee877 100644
--- a/common/rfb/TightDecoder.cxx
+++ b/common/rfb/TightDecoder.cxx
@@ -37,11 +37,6 @@
#include <rfb/tightDecode.h>
#undef BPP
-Decoder* TightDecoder::create(CMsgReader* reader)
-{
- return new TightDecoder(reader);
-}
-
TightDecoder::TightDecoder(CMsgReader* reader_) : reader(reader_)
{
}
diff --git a/common/rfb/TightDecoder.h b/common/rfb/TightDecoder.h
index 5cdf873..8200d2b 100644
--- a/common/rfb/TightDecoder.h
+++ b/common/rfb/TightDecoder.h
@@ -28,9 +28,9 @@
class TightDecoder : public Decoder {
public:
- static Decoder* create(CMsgReader* reader);
- virtual void readRect(const Rect& r, CMsgHandler* handler);
+ TightDecoder(CMsgReader* reader);
virtual ~TightDecoder();
+ virtual void readRect(const Rect& r, CMsgHandler* handler);
private:
void tightDecode8(const Rect& r);
@@ -54,8 +54,6 @@
void directFillRect16(const Rect& r, Pixel pix);
void directFillRect32(const Rect& r, Pixel pix);
- TightDecoder(CMsgReader* reader);
-
CMsgReader* reader;
CMsgHandler* handler;
rdr::InStream* is;
diff --git a/common/rfb/TightEncoder.cxx b/common/rfb/TightEncoder.cxx
index e9568f8..61a1c59 100644
--- a/common/rfb/TightEncoder.cxx
+++ b/common/rfb/TightEncoder.cxx
@@ -92,11 +92,6 @@
#include <rfb/tightEncode.h>
#undef BPP
-Encoder* TightEncoder::create(SMsgWriter* writer)
-{
- return new TightEncoder(writer);
-}
-
TightEncoder::TightEncoder(SMsgWriter* writer_) : writer(writer_)
{
setCompressLevel(defaultCompressLevel);
diff --git a/common/rfb/TightEncoder.h b/common/rfb/TightEncoder.h
index 465d8ed..5faef44 100644
--- a/common/rfb/TightEncoder.h
+++ b/common/rfb/TightEncoder.h
@@ -78,16 +78,16 @@
class TightEncoder : public Encoder {
public:
- static Encoder* create(SMsgWriter* writer);
+ TightEncoder(SMsgWriter* writer);
+ virtual ~TightEncoder();
+
virtual void setCompressLevel(int level);
virtual void setQualityLevel(int level);
virtual void setFineQualityLevel(int quality, JPEG_SUBSAMP subsampling);
virtual int getNumRects(const Rect &r);
virtual bool writeRect(const Rect& r, TransImageGetter* ig, Rect* actual);
- virtual ~TightEncoder();
private:
- TightEncoder(SMsgWriter* writer);
bool checkSolidTile(Rect& r, rdr::U32* colorPtr, bool needSameColor);
void extendSolidArea(const Rect& r, rdr::U32 colorValue, Rect& er);
void findBestSolidArea(Rect& r, rdr::U32 colorValue, Rect& bestr);
diff --git a/common/rfb/ZRLEDecoder.cxx b/common/rfb/ZRLEDecoder.cxx
index aba7fc9..111e2de 100644
--- a/common/rfb/ZRLEDecoder.cxx
+++ b/common/rfb/ZRLEDecoder.cxx
@@ -40,11 +40,6 @@
#undef CPIXEL
#undef BPP
-Decoder* ZRLEDecoder::create(CMsgReader* reader)
-{
- return new ZRLEDecoder(reader);
-}
-
ZRLEDecoder::ZRLEDecoder(CMsgReader* reader_) : reader(reader_)
{
}
diff --git a/common/rfb/ZRLEDecoder.h b/common/rfb/ZRLEDecoder.h
index fe96c73..2128ab9 100644
--- a/common/rfb/ZRLEDecoder.h
+++ b/common/rfb/ZRLEDecoder.h
@@ -25,11 +25,10 @@
class ZRLEDecoder : public Decoder {
public:
- static Decoder* create(CMsgReader* reader);
- virtual void readRect(const Rect& r, CMsgHandler* handler);
- virtual ~ZRLEDecoder();
- private:
ZRLEDecoder(CMsgReader* reader);
+ virtual ~ZRLEDecoder();
+ virtual void readRect(const Rect& r, CMsgHandler* handler);
+ private:
CMsgReader* reader;
rdr::ZlibInStream zis;
};
diff --git a/common/rfb/ZRLEEncoder.cxx b/common/rfb/ZRLEEncoder.cxx
index 5ef54d2..e70706b 100644
--- a/common/rfb/ZRLEEncoder.cxx
+++ b/common/rfb/ZRLEEncoder.cxx
@@ -46,11 +46,6 @@
#undef CPIXEL
#undef BPP
-Encoder* ZRLEEncoder::create(SMsgWriter* writer)
-{
- return new ZRLEEncoder(writer);
-}
-
ZRLEEncoder::ZRLEEncoder(SMsgWriter* writer_)
: writer(writer_), zos(0,0,zlibLevel), mos(129*1024)
{
diff --git a/common/rfb/ZRLEEncoder.h b/common/rfb/ZRLEEncoder.h
index 61ff6fb..e3517c1 100644
--- a/common/rfb/ZRLEEncoder.h
+++ b/common/rfb/ZRLEEncoder.h
@@ -26,12 +26,10 @@
class ZRLEEncoder : public Encoder {
public:
- static Encoder* create(SMsgWriter* writer);
- virtual bool writeRect(const Rect& r, TransImageGetter* ig, Rect* actual);
- virtual ~ZRLEEncoder();
-
- private:
ZRLEEncoder(SMsgWriter* writer);
+ virtual ~ZRLEEncoder();
+ virtual bool writeRect(const Rect& r, TransImageGetter* ig, Rect* actual);
+ private:
SMsgWriter* writer;
rdr::ZlibOutStream zos;
rdr::MemOutStream mos;