changeset 528:0961b6983b8e

Simplify multicolor/interlaced multicolor decoding by factoring some to a separate function.
author Matti Hamalainen <ccr@tnsp.org>
date Thu, 22 Nov 2012 02:38:12 +0200
parents 49666bb544b9
children 1bce06b5026f
files lib64gfx.c
diffstat 1 files changed, 15 insertions(+), 32 deletions(-) [+]
line wrap: on
line diff
--- a/lib64gfx.c	Thu Nov 22 02:07:45 2012 +0200
+++ b/lib64gfx.c	Thu Nov 22 02:38:12 2012 +0200
@@ -583,6 +583,18 @@
 }
 
 
+static inline Uint8 dmC64GetMCColor(const DMC64Image *img, const int bits,  const int bank, const int scroffs)
+{
+    switch (bits)
+    {
+        case  0: return img->bgcolor; break;
+        case  1: return img->screen[bank][scroffs] >> 4; break;
+        case  2: return img->screen[bank][scroffs] & 15; break;
+        default: return img->color[bank][scroffs] & 15; break;
+    }
+}
+
+
 static int dmC64ConvertMultiColorBMP(DMImage *screen, const DMC64Image *img)
 {
     int yc;
@@ -602,16 +614,7 @@
             const int scroffs = scroffsy + x;
             const int b = img->bitmap[0][bmoffsy + (x * 8) + yb];
             const int v = 6 - ((xc * 2) & 6);
-            Uint8 c;
-
-            switch ((b >> v) & 3)
-            {
-                case 0: c = img->bgcolor; break;
-                case 1: c = img->screen[0][scroffs] >> 4; break;
-                case 2: c = img->screen[0][scroffs] & 15; break;
-                case 3: c = img->color[0][scroffs] & 15; break;
-            }
-            
+            const Uint8 c = dmC64GetMCColor(img, (b >> v) & 3, 0, scroffs);
             *d++ = c;
             *d++ = c;
         }
@@ -642,28 +645,8 @@
             const int scroffs = scroffsy + x;
             const int bmoffs = bmoffsy + (x * 8) + yb;
             const int v = 6 - ((xc * 2) & 6);
-            const int b1 = (img->bitmap[0][bmoffs] >> v) & 3;
-            const int b2 = (img->bitmap[1][bmoffs] >> v) & 3;
-            Uint8 c1, c2;
-
-            switch (b1)
-            {
-                case 0: c1 = img->bgcolor; break;
-                case 1: c1 = img->screen[0][scroffs] >> 4; break;
-                case 2: c1 = img->screen[0][scroffs] & 15; break;
-                case 3: c1 = img->color[0][scroffs] & 15; break;
-            }
-
-            switch (b2)
-            {
-                case 0: c2 = img->bgcolor; break;
-                case 1: c2 = img->screen[img->laceBank2][scroffs] >> 4; break;
-                case 2: c2 = img->screen[img->laceBank2][scroffs] & 15; break;
-                case 3: c2 = img->color[img->laceBank2][scroffs] & 15; break;
-            }
-            
-            *d++ = c1;
-            *d++ = c2;
+            *d++ = dmC64GetMCColor(img, (img->bitmap[0][bmoffs] >> v) & 3, 0, scroffs);
+            *d++ = dmC64GetMCColor(img, (img->bitmap[1][bmoffs] >> v) & 3, img->laceBank2, scroffs);
         }
 
         dp += screen->pitch;