Use PixelBuffer objects as the interface for encoders and decoders

This avoid a lot of unnecessary middle men. This also pushes the
responsibility for pixel format conversion into the encoders and
decoders. The new bufferFromBuffer() is used for direct conversion,
rather than PixelTransformer/TransImageGetter.
diff --git a/vncviewer/PlatformPixelBuffer.h b/vncviewer/PlatformPixelBuffer.h
index 03842ac..21b93be 100644
--- a/vncviewer/PlatformPixelBuffer.h
+++ b/vncviewer/PlatformPixelBuffer.h
@@ -20,14 +20,20 @@
 #define __PLATFORMPIXELBUFFER_H__
 
 #include <rfb/PixelBuffer.h>
+#include <rfb/Region.h>
 
 class PlatformPixelBuffer: public rfb::FullFramePixelBuffer {
 public:
   PlatformPixelBuffer(const rfb::PixelFormat& pf, int width, int height,
                       rdr::U8* data, int stride);
 
-  virtual void draw(int src_x, int src_y, int x, int y, int w, int h) = 0;
+  virtual void commitBufferRW(const rfb::Rect& r);
 
+  virtual void draw(int src_x, int src_y, int x, int y, int w, int h) = 0;
+  rfb::Rect getDamage(void);
+
+protected:
+  rfb::Region damage;
 };
 
 #endif