about summary refs log tree commit diff
path: root/converter/ppm
diff options
context:
space:
mode:
authorgiraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8>2022-01-11 02:17:40 +0000
committergiraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8>2022-01-11 02:17:40 +0000
commit821558dee85b5cf87087c6feb32c153d36f55a2c (patch)
tree83af1cd2ab522f1eab5016621e8081a05126e249 /converter/ppm
parent0f2ee6f2eced38909baebc8b30018c34df861f54 (diff)
downloadnetpbm-mirror-821558dee85b5cf87087c6feb32c153d36f55a2c.tar.gz
netpbm-mirror-821558dee85b5cf87087c6feb32c153d36f55a2c.tar.xz
netpbm-mirror-821558dee85b5cf87087c6feb32c153d36f55a2c.zip
cleanup - deduplicate code
git-svn-id: http://svn.code.sf.net/p/netpbm/code/trunk@4238 9d0c8265-081b-0410-96cb-a4ca84ce46f8
Diffstat (limited to 'converter/ppm')
-rw-r--r--converter/ppm/picttoppm.c131
1 files changed, 29 insertions, 102 deletions
diff --git a/converter/ppm/picttoppm.c b/converter/ppm/picttoppm.c
index 4a537df5..231479c5 100644
--- a/converter/ppm/picttoppm.c
+++ b/converter/ppm/picttoppm.c
@@ -1596,11 +1596,14 @@ doSameSize8bpp(transfer_func           trf,
             unsigned int const dstCursor = dstRowCurs + colNumber;
             unsigned int const colorIndex = srcrow[colNumber];
 
-            struct RGBColor dstColor;
-
-            getRgb(dst, dstCursor, &dstColor);
-            (*trf)(&colorMap[colorIndex], &dstColor);
-            putRgb(dstColor, dstCursor, dst);
+            if (trf) {
+                struct RGBColor dstColor;
+
+                getRgb(dst, dstCursor, &dstColor);
+                (*trf)(&colorMap[colorIndex], &dstColor);
+                putRgb(dstColor, dstCursor, dst);
+            } else
+                putRgb(colorMap[colorIndex], dstCursor, dst);
         }
     }
 }
@@ -1627,16 +1630,20 @@ doSameSize16bpp(transfer_func           trf,
             unsigned int const dstCursor = dstRowCurs + colNumber;
             struct RGBColor const srcColor = decode16(&row[colNumber*2]);
 
-            struct RGBColor dstColor;
             struct RGBColor scaledSrcColor;
 
             scaledSrcColor.red = srcColor.red << 11;
             scaledSrcColor.grn = srcColor.grn << 11;
             scaledSrcColor.blu = srcColor.blu << 11;
 
-            getRgb(dst, dstCursor, &dstColor);
-            (*trf)(&scaledSrcColor, &dstColor);
-            putRgb(dstColor, dstCursor, dst);
+            if (trf) {
+                struct RGBColor dstColor;
+
+                getRgb(dst, dstCursor, &dstColor);
+                (*trf)(&scaledSrcColor, &dstColor);
+                putRgb(dstColor, dstCursor, dst);
+            } else
+                putRgb(scaledSrcColor, dstCursor, dst);
         }
     }
 }
@@ -1668,15 +1675,20 @@ doSameSize32bpp(transfer_func           trf,
         for (colNumber = 0; colNumber < xsize; ++colNumber) {
             unsigned int const dstCursor = dstRowCurs + colNumber;
 
-            struct RGBColor srcColor, dstColor;
+            struct RGBColor srcColor;
 
             srcColor.red = redPlane[colNumber] << 8;
             srcColor.grn = grnPlane[colNumber] << 8;
             srcColor.blu = bluPlane[colNumber] << 8;
 
-            getRgb(dst, dstCursor, &dstColor);
-            (*trf)(&srcColor, &dstColor);
-            putRgb(dstColor, dstCursor, dst);
+            if (trf) {
+                struct RGBColor dstColor;
+
+                getRgb(dst, dstCursor, &dstColor);
+                (*trf)(&srcColor, &dstColor);
+                putRgb(dstColor, dstCursor, dst);
+            } else
+                putRgb(srcColor, dstCursor, dst);
         }
     }
 }
@@ -1735,87 +1747,6 @@ doSameSize(transfer_func           trf,
 
 
 static void
-blitIdempotent(unsigned int          const pixSize,
-               struct Rect           const srcRect,
-               unsigned char *       const src,
-               unsigned int          const srcwid,
-               struct RGBColor *     const colorMap,
-               struct RgbPlanes      const dst,
-               unsigned int          const dstwid) {
-/*----------------------------------------------------------------------------
-  This is the same as doSameSize(), except optimized for the case that
-  the transfer function is idempotent (i.e. it's just a straight copy).
-  The original author's comments suggest that this optimization isn't
-  all that important -- that he just wrote this first and instead of
-  expanding it to handle arbitrary transfer functions, added functions
-  for that.
------------------------------------------------------------------------------*/
-    unsigned int const xsize = rectwidth(&srcRect);
-    unsigned int const ysize = rectheight(&srcRect);
-
-    switch (pixSize) {
-    case 8: {
-        unsigned int rowNumber;
-
-        for (rowNumber = 0; rowNumber < ysize; ++rowNumber) {
-            unsigned char * const srcrow = &src[rowNumber * srcwid];
-            unsigned int const dstRowCurs = rowNumber * dstwid;
-            unsigned int colNumber;
-            for (colNumber = 0; colNumber < xsize; ++colNumber) {
-                unsigned int const dstCursor = dstRowCurs + colNumber;
-                struct RGBColor * const ct = colorMap + srcrow[colNumber];
-                dst.red[dstCursor] = ct->red;
-                dst.grn[dstCursor] = ct->grn;
-                dst.blu[dstCursor] = ct->blu;
-            }
-        }
-    } break;
-    case 16: {
-        unsigned int rowNumber;
-
-        for (rowNumber = 0; rowNumber < ysize; ++rowNumber) {
-            unsigned char * const srcrow = &src[rowNumber * srcwid];
-            unsigned int const dstRowCurs = rowNumber * dstwid;
-            unsigned int colNumber;
-            for (colNumber = 0; colNumber < xsize; ++colNumber) {
-                unsigned int const dstCursor = dstRowCurs + colNumber;
-                struct RGBColor const srcColor =
-                    decode16(&srcrow[colNumber * 2]);
-                dst.red[dstCursor] = srcColor.red << 11;
-                dst.grn[dstCursor] = srcColor.grn << 11;
-                dst.blu[dstCursor] = srcColor.blu << 11;
-            }
-        }
-    } break;
-    case 32: {
-        unsigned int const planeSize = srcwid / 4;
-        unsigned int rowNumber;
-
-        for (rowNumber = 0; rowNumber < ysize; ++rowNumber) {
-            unsigned char * const srcrow = &src[rowNumber * srcwid];
-            unsigned char * const redPlane = &srcrow[planeSize * 0];
-            unsigned char * const grnPlane = &srcrow[planeSize * 1];
-            unsigned char * const bluPlane = &srcrow[planeSize * 2];
-            unsigned int const dstRowCurs = rowNumber * dstwid;
-
-            unsigned int colNumber;
-            for (colNumber = 0; colNumber < xsize; ++colNumber) {
-                unsigned int const dstCursor = dstRowCurs + colNumber;
-                dst.red[dstCursor] = redPlane[colNumber] << 8;
-                dst.grn[dstCursor] = grnPlane[colNumber] << 8;
-                dst.blu[dstCursor] = bluPlane[colNumber] << 8;
-            }
-        }
-    } break;
-    default:
-        pm_error("INTERNAL ERROR: invalid bits per pixel (%u) in "
-                 "blitIdempotent()", pixSize);
-    }
-}
-
-
-
-static void
 doBlit(struct Rect       const srcRect,
        struct Rect       const dstRect,
        struct Rect       const srcBounds,
@@ -1824,7 +1755,7 @@ doBlit(struct Rect       const srcRect,
        struct RgbPlanes  const canvasPlanes,
        int               const pixSize,
        int               const dstwid,
-       struct RGBColor * const color_map,
+       struct RGBColor * const colorMap,
        unsigned int      const mode) {
 /*----------------------------------------------------------------------------
    Transfer some pixels from 'srcplane' to 'canvasPlanes'.
@@ -1886,14 +1817,10 @@ doBlit(struct Rect       const srcRect,
 
     if (!rectsamesize(srcRect, dstRect))
         doDiffSize(srcRect, dstRect, pixSize,
-                   trf, color_map, src, srcplane.rowSize, dst);
+                   trf, colorMap, src, srcplane.rowSize, dst);
     else {
-        if (trf == NULL)
-            blitIdempotent(pixSize, srcRect, src, srcplane.rowSize,
-                           color_map, dst, dstwid);
-        else
-            doSameSize(trf, pixSize, srcRect, src, srcplane.rowSize,
-                       color_map, dst, dstwid);
+        doSameSize(trf, pixSize, srcRect, src, srcplane.rowSize,
+                   colorMap, dst, dstwid);
     }
 }