]> source.dussan.org Git - tigervnc.git/commitdiff
Add convenience variant of getImage()
authorPierre Ossman <ossman@cendio.se>
Wed, 12 Feb 2014 12:24:15 +0000 (13:24 +0100)
committerPierre Ossman <ossman@cendio.se>
Mon, 14 Jul 2014 14:00:12 +0000 (16:00 +0200)
common/rfb/PixelBuffer.cxx
common/rfb/PixelBuffer.h

index ed74a874da6c93edbc84df2a5a59426e19657a4c..3f7f301988840d980476e8b929264c984c56435e 100644 (file)
@@ -60,6 +60,26 @@ PixelBuffer::getImage(void* imageBuf, const Rect& r, int outStride) {
   }
 }
 
+void PixelBuffer::getImage(const PixelFormat& pf, void* imageBuf,
+                           const Rect& r, int stride)
+{
+  const rdr::U8* srcBuffer;
+  int srcStride;
+
+  if (format.equal(pf)) {
+    getImage(imageBuf, r, stride);
+    return;
+  }
+
+  if (stride == 0)
+    stride = r.width();
+
+  srcBuffer = getBuffer(r, &srcStride);
+
+  pf.bufferFromBuffer((U8*)imageBuf, format, srcBuffer, r.width(), r.height(),
+                      stride, srcStride);
+}
+
 // -=- Modifiable generic pixel buffer class
 
 ModifiablePixelBuffer::ModifiablePixelBuffer(const PixelFormat& pf,
index 7060a014cf677f7f5b243ecbe4a00425e337a400..5bc06c297f5ea6a534757b4e7c6900c4daee3911 100644 (file)
@@ -72,6 +72,11 @@ namespace rfb {
     //   stride. Try to avoid using this though as getBuffer() will in
     //   most cases avoid the extra memory copy.
     void getImage(void* imageBuf, const Rect& r, int stride=0);
+    // Get pixel data in a given format
+    //   Works just the same as getImage(), but guaranteed to be in a
+    //   specific format.
+    void getImage(const PixelFormat& pf, void* imageBuf,
+                  const Rect& r, int stride=0);
 
     ///////////////////////////////////////////////
     // Framebuffer update methods