git.asbjorn.biz
/
swftools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
added a small optimization to swf_ImageGetNumberOfPaletteEntries().
[swftools.git]
/
lib
/
modules
/
swfbits.c
diff --git
a/lib/modules/swfbits.c
b/lib/modules/swfbits.c
index
57350da
..
a8b3e1f
100644
(file)
--- a/
lib/modules/swfbits.c
+++ b/
lib/modules/swfbits.c
@@
-36,29
+36,40
@@
int swf_ImageHasAlpha(RGBA*img, int width, int height)
}
return hasalpha;
}
}
return hasalpha;
}
-
+
int swf_ImageGetNumberOfPaletteEntries(RGBA*img, int width, int height, RGBA*palette)
{
int len = width*height;
int t;
int palsize = 0;
int swf_ImageGetNumberOfPaletteEntries(RGBA*img, int width, int height, RGBA*palette)
{
int len = width*height;
int t;
int palsize = 0;
- RGBA pal[256];
+ RGBA pal[512];
+ U32*pal32=(U32*)pal;
int palette_overflow = 0;
int palette_overflow = 0;
- for(t=0;t<len;t++) {
+ U32 lastcol32 = 0;
+
+ if(sizeof(RGBA)!=sizeof(U32))
+ fprintf(stderr, "rfxswf: sizeof(RGBA)!=sizeof(U32))");
+
+ lastcol32 = pal32[palsize++] = *(U32*)&img[0];
+
+ for(t=1;t<len;t++) {
RGBA col = img[t];
U32 col32 = *(U32*)&img[t];
RGBA col = img[t];
U32 col32 = *(U32*)&img[t];
- int i=0;
+ int i;
+ if(col32==lastcol32)
+ continue;
for(i=0;i<palsize;i++) {
for(i=0;i<palsize;i++) {
- if(col32 == *(U32*)&pal[i])
+ if(col32 == pal32[i])
break;
}
if(i==palsize) {
break;
}
if(i==palsize) {
- if(palsize==256) {
+ if(palsize==512) {
palette_overflow = 1;
break;
}
palette_overflow = 1;
break;
}
- pal[palsize++] = col;
+ pal32[palsize++] = col32;
}
}
+ lastcol32 = col32;
}
if(palette_overflow)
return width*height;
}
if(palette_overflow)
return width*height;