]> source.dussan.org Git - tigervnc.git/commitdiff
Do register reduction to re-normalize the performance at the low level
authorDRC <dcommander@users.sourceforge.net>
Fri, 19 Aug 2011 16:08:09 +0000 (16:08 +0000)
committerDRC <dcommander@users.sourceforge.net>
Fri, 19 Aug 2011 16:08:09 +0000 (16:08 +0000)
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4643 3789f03b-4d11-0410-bbf8-ca57d06f2519

common/rfb/PixelFormat.cxx
common/rfb/tightEncode.h

index 013cceb2c4ae53211aacbaf245b388183f2ea1d6..b51adab219e0038ae7a03515db92f7fe52cd09d4 100644 (file)
@@ -315,27 +315,38 @@ void PixelFormat::rgbFromBuffer(rdr::U8* dst, const rdr::U8* src,
       bindex = blueShift/8;
     }
 
-    for(rowptr = (rdr::U8 *)src; rowptr < &src[pitch * h]; rowptr += pitch) {
-      for(colptr = rowptr; colptr < &rowptr[w * 4]; colptr += 4) {
-        *(dst++) = colptr[rindex];
-        *(dst++) = colptr[gindex];
-        *(dst++) = colptr[bindex];
+    int srcPad = pitch - w * 4;
+    while (h > 0) {
+      rdr::U8 *srcEndOfRow = (rdr::U8 *)src + w * 4;
+      while (src < srcEndOfRow) {
+        *(dst++) = src[rindex];
+        *(dst++) = src[gindex];
+        *(dst++) = src[bindex];
+        src += 4;
       }
+      src += srcPad;
+      h--;      
     }
   } else {
     // Generic code
     Pixel p;
     rdr::U8 r, g, b;
+    int pixelSize = bpp/8;
 
-    for(rowptr = (rdr::U8 *)src; rowptr < &src[pitch * h]; rowptr += pitch) {
-      for(colptr = rowptr; colptr < &rowptr[w * bpp/8]; colptr += bpp/8) {
-        p = pixelFromBuffer(colptr);
+    int srcPad = pitch - w * pixelSize;
+    while (h > 0) {
+      rdr::U8 *srcEndOfRow = (rdr::U8 *)src + w * pixelSize;
+      while (src < srcEndOfRow) {
+        p = pixelFromBuffer(src);
 
         rgbFromPixel(p, cm, &r, &g, &b);
         *(dst++) = r;
         *(dst++) = g;
         *(dst++) = b;
+        src += pixelSize;
       }
+      src += srcPad;
+      h--;
     }
   }
 }
index e8d3ef4431138da81f2f9575b8f969d82c7a8e63..407c9d69079d9b1a333ea704ea285ff5c4db2e36 100644 (file)
@@ -647,12 +647,15 @@ bool CHECK_SOLID_TILE(Rect& r, rdr::U32 *colorPtr, bool needSameColor)
   if (needSameColor && (rdr::U32)colorValue != *colorPtr)
     return false;
 
-  for (dy = 0; dy < h; dy++) {
-    for (dx = 0; dx < w; dx++) {
-      if (colorValue != buf[dx])
+  int bufPad = stride - w;
+  while (h > 0) {
+    PIXEL_T *bufEndOfRow = buf + w;
+    while (buf < bufEndOfRow) {
+      if (colorValue != *(buf++))
         return false;
     }
-    buf += stride;
+    buf += bufPad;
+    h--;
   }
 
   *colorPtr = (rdr::U32)colorValue;