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.cxx b/vncviewer/PlatformPixelBuffer.cxx
index ced0446..5bd50d2 100644
--- a/vncviewer/PlatformPixelBuffer.cxx
+++ b/vncviewer/PlatformPixelBuffer.cxx
@@ -24,3 +24,19 @@
   FullFramePixelBuffer(pf, width, height, data, stride)
 {
 }
+
+void PlatformPixelBuffer::commitBufferRW(const rfb::Rect& r)
+{
+  FullFramePixelBuffer::commitBufferRW(r);
+  damage.assign_union(rfb::Region(r));
+}
+
+rfb::Rect PlatformPixelBuffer::getDamage(void)
+{
+  rfb::Rect r;
+
+  r = damage.get_bounding_rect();
+  damage.clear();
+
+  return r;
+}