00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 #ifndef RLE_H
00014 #define RLE_H
00015 
00016 #include "il_internal.h"
00017 
00018 #define TGA_MAX_RUN 128
00019 #define SGI_MAX_RUN 127
00020 #define BMP_MAX_RUN 127
00021 
00022 #ifdef IL_RLE_C
00023 #undef NOINLINE
00024 #undef INLINE
00025 #define INLINE
00026 #endif
00027 
00028 #ifndef NOINLINE
00029 INLINE ILuint GetPix(ILubyte *p, ILuint bpp) {
00030         ILuint Pixel;
00031         Pixel = (ILuint)*p++;
00032         
00033         while( bpp-- > 1 ) {
00034                 Pixel <<= 8;
00035                 Pixel |= (ILuint)*p++;
00036         }
00037         return Pixel;
00038 }
00039 
00040 INLINE ILint CountDiffPixels(ILubyte *p, ILuint bpp, ILuint pixCnt) {
00041         ILuint  pixel;
00042         ILuint  nextPixel = 0;
00043         ILint   n;
00044 
00045         n = 0;
00046         if (pixCnt == 1)
00047                 return pixCnt;
00048         pixel = GetPix(p, bpp);
00049 
00050         while (pixCnt > 1) {
00051                 p += bpp;
00052                 nextPixel = GetPix(p, bpp);
00053                 if (nextPixel == pixel)
00054                         break;
00055                 pixel = nextPixel;
00056                 ++n;
00057                 --pixCnt;
00058         }
00059 
00060         if (nextPixel == pixel)
00061                 return n;
00062         return n + 1;
00063 }
00064 
00065 
00066 INLINE ILint CountSamePixels(ILubyte *p, ILuint bpp, ILuint pixCnt) {
00067         ILuint  pixel;
00068         ILuint  nextPixel;
00069         ILint   n;
00070 
00071         n = 1;
00072         pixel = GetPix(p, bpp);
00073         pixCnt--;
00074 
00075         while (pixCnt > 0) {
00076                 p += bpp;
00077                 nextPixel = GetPix(p, bpp);
00078                 if (nextPixel != pixel)
00079                         break;
00080                 ++n;
00081                 --pixCnt;
00082         }
00083 
00084         return n;
00085 }
00086 #endif
00087 
00088 ILuint GetPix(ILubyte *p, ILuint bpp);
00089 ILint CountDiffPixels(ILubyte *p, ILuint bpp, ILuint pixCnt);
00090 ILint CountSamePixels(ILubyte *p, ILuint bpp, ILuint pixCnt);
00091 
00092 #endif//RLE_H