From: kramm Date: Sun, 6 Mar 2005 20:18:31 +0000 (+0000) Subject: * optimized swf_GetNumberOfPaletteEntries() X-Git-Tag: release-0-7-0~173 X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=commitdiff_plain;h=80441849b14435c7699602f1f093d102fa664c07 * optimized swf_GetNumberOfPaletteEntries() * fixed bug in swf_RemoveJPEGTables() --- diff --git a/lib/modules/swfbits.c b/lib/modules/swfbits.c index a8b3e1f..66b61f4 100644 --- a/lib/modules/swfbits.c +++ b/lib/modules/swfbits.c @@ -37,7 +37,7 @@ int swf_ImageHasAlpha(RGBA*img, int width, int height) return hasalpha; } -int swf_ImageGetNumberOfPaletteEntries(RGBA*img, int width, int height, RGBA*palette) +/*int swf_ImageGetNumberOfPaletteEntries(RGBA*img, int width, int height, RGBA*palette) { int len = width*height; int t; @@ -76,8 +76,72 @@ int swf_ImageGetNumberOfPaletteEntries(RGBA*img, int width, int height, RGBA*pal if(palette) memcpy(palette, pal, palsize*sizeof(RGBA)); return palsize; +}*/ + +int swf_ImageGetNumberOfPaletteEntries(RGBA*img, int width, int height, RGBA*palette) +{ + int len = width*height; + int t; + int palsize = 0; + U32* pal; + int size[256]; + int palette_overflow = 0; + U32 lastcol32 = 0; + + pal = malloc(65536*sizeof(U32)); + + memset(size, 0, sizeof(size)); + + if(sizeof(RGBA)!=sizeof(U32)) + fprintf(stderr, "rfxswf: sizeof(RGBA)!=sizeof(U32))"); + + lastcol32 = (*(U32*)&img[0])^0xffffffff; // don't match + + for(t=0;t> 17) ^ col32; + hash ^= ((hash>>8) + 1) ^ hash; + hash &= 255; + + int csize = size[hash]; + U32* cpal = &pal[hash*256]; + for(i=0;ilen); swf_GetBlock(tag, data, tag->len); swf_ResetTag(tag, ST_DEFINEBITSJPEG2); + swf_SetBlock(tag, &((U8*)data)[0], 2); //id swf_SetBlock(tag, tables_tag->data, tables_tag->len); - swf_SetBlock(tag, data, tag->len); + swf_SetBlock(tag, &((U8*)data)[2], tag->len-2); free(data); } tag = tag->next;