From 44f6aac45e5e2338a6c39782fb2582c6ef1032ed Mon Sep 17 00:00:00 2001 From: "Mirar (Pontus Hagland)" <pike@sort.mirar.org> Date: Sun, 1 Dec 1996 05:08:21 +0100 Subject: [PATCH] =?UTF-8?q?optimering=20av=20packning=20av=20giffar=20som?= =?UTF-8?q?=20inte=20=C3=A4r=20fina?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rev: src/modules/image/image.h:1.13 Rev: src/modules/image/quant.c:1.14 Rev: src/modules/image/togif.c:1.19 --- src/modules/image/image.h | 24 +++++++++++----- src/modules/image/quant.c | 58 +++++++++++++++++++-------------------- src/modules/image/togif.c | 14 ++++++++-- 3 files changed, 58 insertions(+), 38 deletions(-) diff --git a/src/modules/image/image.h b/src/modules/image/image.h index 222d10773d..013cc34dcf 100644 --- a/src/modules/image/image.h +++ b/src/modules/image/image.h @@ -1,11 +1,21 @@ -/* $Id: image.h,v 1.12 1996/12/01 00:01:14 law Exp $ */ +/* $Id: image.h,v 1.13 1996/12/01 04:08:18 law Exp $ */ #define MAX_NUMCOL 32768 -#define QUANT_MAP_BITS 4 -#define QUANT_MAP_SKIP_BITS (8-(QUANT_MAP_BITS)) -#define QUANT_MAP_THIS(X) ((X)>>QUANT_MAP_SKIP_BITS) -#define QUANT_MAP_REAL (1L<<QUANT_MAP_BITS) -#define QUANT_SELECT_CACHE 5 + +#define QUANT_MAP_BITSR 3 +#define QUANT_MAP_SKIP_BITSR (8-(QUANT_MAP_BITSR)) +#define QUANT_MAP_THISR(X) ((X)>>QUANT_MAP_SKIP_BITSR) +#define QUANT_MAP_REALR (1L<<QUANT_MAP_BITSR) +#define QUANT_MAP_BITSG 8 +#define QUANT_MAP_SKIP_BITSG (8-(QUANT_MAP_BITSG)) +#define QUANT_MAP_THISG(X) ((X)>>QUANT_MAP_SKIP_BITSG) +#define QUANT_MAP_REALG (1L<<QUANT_MAP_BITSG) +#define QUANT_MAP_BITSB 2 +#define QUANT_MAP_SKIP_BITSB (8-(QUANT_MAP_BITSB)) +#define QUANT_MAP_THISB(X) ((X)>>QUANT_MAP_SKIP_BITSB) +#define QUANT_MAP_REALB (1L<<QUANT_MAP_BITSB) + +#define QUANT_SELECT_CACHE 4 #define COLOURTYPE unsigned char @@ -47,7 +57,7 @@ struct colortable unsigned char cl; unsigned char used; struct map_entry *next; - } map[QUANT_MAP_REAL][QUANT_MAP_REAL][QUANT_MAP_REAL]; + } map[QUANT_MAP_REALR][QUANT_MAP_REALG][QUANT_MAP_REALB]; struct rgb_cache { rgb_group index; diff --git a/src/modules/image/quant.c b/src/modules/image/quant.c index 90a1a4baf4..b60fcaf89b 100644 --- a/src/modules/image/quant.c +++ b/src/modules/image/quant.c @@ -1,4 +1,4 @@ -/* $Id: quant.c,v 1.13 1996/11/22 20:28:18 law Exp $ */ +/* $Id: quant.c,v 1.14 1996/12/01 04:08:20 law Exp $ */ /* @@ -26,12 +26,12 @@ David K /* #define QUANT_DEBUG #define QUANT_DEBUG_DEEP -#define QUANT_CHRONO +#define QUANT_DEBUG_RGB */ /**********************************************************************/ -#ifdef QUANT_CHRONO +#if 0 #include <sys/resource.h> #define CHRONO(X) chrono(X) @@ -249,12 +249,12 @@ static void sort_tbl(rgb_hashtbl *ht, lower.r,lower.g,lower.b,upper.r,upper.g,upper.b); fprintf(stderr,"[%d,%d,%d] - [%d,%d,%d]\n", - QUANT_MAP_THIS(lower.r), - QUANT_MAP_THIS(lower.g), - QUANT_MAP_THIS(lower.b), - QUANT_MAP_THIS(upper.r), - QUANT_MAP_THIS(upper.g), - QUANT_MAP_THIS(upper.b)); + QUANT_MAP_THISR(lower.r), + QUANT_MAP_THISG(lower.g), + QUANT_MAP_THISB(lower.b), + QUANT_MAP_THISR(upper.r), + QUANT_MAP_THISG(upper.g), + QUANT_MAP_THISB(upper.b)); #endif @@ -363,26 +363,26 @@ static void sort_tbl(rgb_hashtbl *ht, lower.r, lower.g, lower.b, upper.r, upper.g, upper.b, (upper.r-lower.r+1)*(upper.g-lower.g+1)*(upper.b-lower.b+1)); fprintf(stderr,"[%d,%d,%d] - [%d,%d,%d]\n", - QUANT_MAP_THIS(lower.r), - QUANT_MAP_THIS(lower.g), - QUANT_MAP_THIS(lower.b), - QUANT_MAP_THIS(upper.r), - QUANT_MAP_THIS(upper.g), - QUANT_MAP_THIS(upper.b)); + QUANT_MAP_THISR(lower.r), + QUANT_MAP_THISG(lower.g), + QUANT_MAP_THISB(lower.b), + QUANT_MAP_THISR(upper.r), + QUANT_MAP_THISG(upper.g), + QUANT_MAP_THISB(upper.b)); #endif #ifdef QUANT_DEBUG #ifndef QUANT_DEBUG_DEEP fprintf(stderr,"[%d,%d,%d]-[%d,%d,%d] = %lu (%d,%d,%d)\n", - QUANT_MAP_THIS(lower.r), QUANT_MAP_THIS(lower.g), QUANT_MAP_THIS(lower.b), - QUANT_MAP_THIS(upper.r), QUANT_MAP_THIS(upper.g), QUANT_MAP_THIS(upper.b), + QUANT_MAP_THISR(lower.r), QUANT_MAP_THISR(lower.g), QUANT_MAP_THISB(lower.b), + QUANT_MAP_THISR(upper.r), QUANT_MAP_THISG(upper.g), QUANT_MAP_THISB(upper.b), idx, ct->clut[idx].r,ct->clut[idx].g,ct->clut[idx].b); #endif #endif - for(r = QUANT_MAP_THIS(lower.r); r <= QUANT_MAP_THIS(upper.r); r++) - for(g = QUANT_MAP_THIS(lower.g); g <= QUANT_MAP_THIS(upper.g); g++) - for(b = QUANT_MAP_THIS(lower.b); b <= QUANT_MAP_THIS(upper.b); b++) + for(r = QUANT_MAP_THISR(lower.r); r <= QUANT_MAP_THISR(upper.r); r++) + for(g = QUANT_MAP_THISG(lower.g); g <= QUANT_MAP_THISG(upper.g); g++) + for(b = QUANT_MAP_THISB(lower.b); b <= QUANT_MAP_THISB(upper.b); b++) { #ifdef QUANT_DEBUG_DEEP fprintf(stderr,"%*s[%d,%d,%d] = %lu (%d,%d,%d)\n",level,"", @@ -594,15 +594,15 @@ int colortable_rgb(struct colortable *ct,rgb_group rgb) ct->cache->index.b==rgb.b) return ct->cache->value; - feme=me=&(ct->map[QUANT_MAP_THIS(rgb.r)] - [QUANT_MAP_THIS(rgb.g)] - [QUANT_MAP_THIS(rgb.b)]); + feme=me=&(ct->map[QUANT_MAP_THISR(rgb.r)] + [QUANT_MAP_THISG(rgb.g)] + [QUANT_MAP_THISB(rgb.b)]); #ifdef QUANT_DEBUG_RGB fprintf(stderr,"%d,%d,%d -> %lu %lu %lu: ",rgb.r,rgb.g,rgb.b, - QUANT_MAP_THIS(rgb.r), - QUANT_MAP_THIS(rgb.g), - QUANT_MAP_THIS(rgb.b)); + QUANT_MAP_THISR(rgb.r), + QUANT_MAP_THISG(rgb.g), + QUANT_MAP_THISB(rgb.b)); fprintf(stderr,"%lx %d,%d,%d %lu ",me,ct->clut[me->cl].r,ct->clut[me->cl].g,ct->clut[me->cl].b,me->cl); if (!me->used) { fprintf(stderr,"unused "); } #endif @@ -679,11 +679,11 @@ fprintf(stderr," -> %lu: %d,%d,%d\n",best, void colortable_free(struct colortable *ct) { int r,g,b; - for (r=0; r<QUANT_MAP_REAL; r++) + for (r=0; r<QUANT_MAP_REALR; r++) { - for (g=0; g<QUANT_MAP_REAL; g++) + for (g=0; g<QUANT_MAP_REALG; g++) { - for (b=0; b<QUANT_MAP_REAL; b++) + for (b=0; b<QUANT_MAP_REALB; b++) { struct map_entry *me; while (me=ct->map[r][g][b].next) diff --git a/src/modules/image/togif.c b/src/modules/image/togif.c index 18b32ac4af..0f5916aaef 100644 --- a/src/modules/image/togif.c +++ b/src/modules/image/togif.c @@ -1,4 +1,4 @@ -/* $Id: togif.c,v 1.18 1996/11/30 13:14:41 law Exp $ */ +/* $Id: togif.c,v 1.19 1996/12/01 04:08:21 law Exp $ */ /* togif @@ -184,6 +184,8 @@ struct pike_string * struct lzw lzw; int colors,bpp; +CHRONO("image_encode_gif begin"); + buf.s.str=NULL; initialize_buf(&buf); @@ -249,6 +251,8 @@ struct pike_string * i=img->xsize*img->ysize; rgb=img->img; +CHRONO("image_encode_gif header done"); + lzw_init(&lzw,bpp); if (!fs) while (i--) lzw_add(&lzw,colortable_rgb(ct,*(rgb++))); @@ -280,6 +284,8 @@ struct pike_string * lzw_write_last(&lzw); +CHRONO("lzw done"); + for (i=0; i<(int)lzw.outpos; i+=254) { int wr; @@ -290,10 +296,14 @@ struct pike_string * } low_my_putchar( 0, &buf ); /* terminate stream */ +CHRONO("image_encode_gif wrote ok"); + lzw_quit(&lzw); low_my_putchar( ';', &buf ); /* end gif file */ - + +CHRONO("image_encode_gif done"); + return low_free_buf(&buf); } -- GitLab