From 5415dd700c5c2c874626aa0cf7963316208f0a31 Mon Sep 17 00:00:00 2001 From: John Cupitt Date: Mon, 22 Oct 2007 10:55:52 +0000 Subject: [PATCH] stuff --- ChangeLog | 4 ++-- libsrc/convolution/im_gradcor.c | 8 ++++++++ libsrc/convolution/im_zerox.c | 2 +- libsrc/histograms_lut/im_histgr.c | 22 +++++++++++++++------- libsrc/histograms_lut/im_histnD.c | 11 ++++++++--- libsrc/histograms_lut/im_histplot.c | 18 ++++++++++-------- libsrc/histograms_lut/im_lhisteq.c | 4 +++- libsrc/histograms_lut/im_maplut.c | 28 ++++++++++++++++------------ libsrc/histograms_lut/im_project.c | 14 +++++++++----- libsrc/histograms_lut/im_stdif.c | 4 +++- libsrc/morphology/im_dilate.c | 29 +++++++++++++++-------------- libsrc/morphology/im_erode.c | 27 ++++++++++++++------------- 12 files changed, 104 insertions(+), 67 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5290c56c..0cead0fa 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,8 +1,8 @@ 28/9/07 started 7.13.1 - vips2dj can print RGB images - oop, include missing -- add protos for generate/iterate function args, started fixing warnings -- add cimg package +- add protos for generate/iterate function args, fix warnings +- add cimg package, we now have C++ source inside VIPS, sigh 29/8/07 started 7.13.0 - we now have a trunk and the version is 7.13.x, woo! diff --git a/libsrc/convolution/im_gradcor.c b/libsrc/convolution/im_gradcor.c index 1d7743ad..ff76a8d2 100644 --- a/libsrc/convolution/im_gradcor.c +++ b/libsrc/convolution/im_gradcor.c @@ -217,6 +217,10 @@ int im_grad_x( IMAGE *in, IMAGE *out ){ #endif #undef RETURN_GENERATE } + + /* Keep gcc happy. + */ + return 0; #undef FUNCTION_NAME } @@ -277,6 +281,10 @@ int im_grad_y( IMAGE *in, IMAGE *out ){ #endif #undef RETURN_GENERATE } + + /* Keep gcc happy. + */ + return 0; #undef FUNCTION_NAME } diff --git a/libsrc/convolution/im_zerox.c b/libsrc/convolution/im_zerox.c index b67b774e..675e5efb 100644 --- a/libsrc/convolution/im_zerox.c +++ b/libsrc/convolution/im_zerox.c @@ -84,7 +84,7 @@ zerox_gen( REGION *or, void *seq, void *a, void *b ) { REGION *ir = (REGION *) seq; IMAGE *in = (IMAGE *) a; - int flag = (int) b; + int flag = GPOINTER_TO_INT( b ); Rect irect; Rect *r = &or->valid; diff --git a/libsrc/histograms_lut/im_histgr.c b/libsrc/histograms_lut/im_histgr.c index 0faad82d..ee9d7c64 100644 --- a/libsrc/histograms_lut/im_histgr.c +++ b/libsrc/histograms_lut/im_histgr.c @@ -109,8 +109,10 @@ build_hist( IMAGE *out, int bands, int which, int size ) /* Build a sub-hist, based on the main hist. */ static void * -build_subhist( IMAGE *out, Histogram *mhist ) +build_subhist( IMAGE *out, void *a, void *b ) { + Histogram *mhist = (Histogram *) a; + return( (void *) build_hist( out, mhist->bands, mhist->which, mhist->size ) ); } @@ -118,8 +120,10 @@ build_subhist( IMAGE *out, Histogram *mhist ) /* Join a sub-hist onto the main hist. */ static int -merge_subhist( Histogram *shist, Histogram *mhist ) +merge_subhist( void *seq, void *a, void *b ) { + Histogram *shist = (Histogram *) seq; + Histogram *mhist = (Histogram *) a; int i, j; /* Sanity! @@ -146,8 +150,9 @@ merge_subhist( Histogram *shist, Histogram *mhist ) /* Histogram of all bands of a uchar image. */ static int -find_uchar_hist( REGION *reg, Histogram *hist ) +find_uchar_hist( REGION *reg, void *seq, void *a, void *b ) { + Histogram *hist = (Histogram *) seq; Rect *r = ®->valid; IMAGE *im = reg->im; int le = r->left; @@ -177,8 +182,9 @@ find_uchar_hist( REGION *reg, Histogram *hist ) /* Histogram of a selected band of a uchar image. */ static int -find_uchar_hist_extract( REGION *reg, Histogram *hist ) +find_uchar_hist_extract( REGION *reg, void *seq, void *a, void *b ) { + Histogram *hist = (Histogram *) seq; Rect *r = ®->valid; IMAGE *im = reg->im; int le = r->left; @@ -208,8 +214,9 @@ find_uchar_hist_extract( REGION *reg, Histogram *hist ) /* Histogram of all bands of a ushort image. */ static int -find_ushort_hist( REGION *reg, Histogram *hist ) +find_ushort_hist( REGION *reg, void *seq, void *a, void *b ) { + Histogram *hist = (Histogram *) seq; Rect *r = ®->valid; IMAGE *im = reg->im; int le = r->left; @@ -249,8 +256,9 @@ find_ushort_hist( REGION *reg, Histogram *hist ) /* Histogram of all bands of a ushort image. */ static int -find_ushort_hist_extract( REGION *reg, Histogram *hist ) +find_ushort_hist_extract( REGION *reg, void *seq, void *a, void *b ) { + Histogram *hist = (Histogram *) seq; Rect *r = ®->valid; IMAGE *im = reg->im; int le = r->left; @@ -293,7 +301,7 @@ im_histgr( IMAGE *in, IMAGE *out, int bandno ) int size; /* Length of hist */ int bands; /* Number of bands in output */ Histogram *mhist; - int (*scanfn)( REGION *, Histogram * ); + im_generate_fn scanfn; int i, j; unsigned int *obuffer, *q; diff --git a/libsrc/histograms_lut/im_histnD.c b/libsrc/histograms_lut/im_histnD.c index 6bd24bc2..5ecbff51 100644 --- a/libsrc/histograms_lut/im_histnD.c +++ b/libsrc/histograms_lut/im_histnD.c @@ -109,8 +109,10 @@ build_hist( IMAGE *in, IMAGE *out, int bins ) /* Build a sub-hist, based on the main hist. */ static void * -build_subhist( IMAGE *out, Histogram *mhist ) +build_subhist( IMAGE *out, void *a, void *b ) { + Histogram *mhist = (Histogram *) a; + return( (void *) build_hist( mhist->in, mhist->out, mhist->bins ) ); } @@ -118,8 +120,10 @@ build_subhist( IMAGE *out, Histogram *mhist ) /* Join a sub-hist onto the main hist. */ static int -merge_subhist( Histogram *shist, Histogram *mhist ) +merge_subhist( void *seq, void *a, void *b ) { + Histogram *shist = (Histogram *) seq; + Histogram *mhist = (Histogram *) a; int i, j, k; /* Sanity! @@ -157,8 +161,9 @@ merge_subhist( Histogram *shist, Histogram *mhist ) } static int -find_hist( REGION *reg, Histogram *hist ) +find_hist( REGION *reg, void *seq, void *a, void *b ) { + Histogram *hist = (Histogram *) seq; Rect *r = ®->valid; IMAGE *im = reg->im; int le = r->left; diff --git a/libsrc/histograms_lut/im_histplot.c b/libsrc/histograms_lut/im_histplot.c index 6592d54d..fb64de3d 100644 --- a/libsrc/histograms_lut/im_histplot.c +++ b/libsrc/histograms_lut/im_histplot.c @@ -144,8 +144,8 @@ normalise( IMAGE *in, IMAGE *out ) TYPE *p1 = (TYPE *) p; \ \ for( x = le; x < ri; x++ ) { \ - for( b = 0; b < nb; b++ ) \ - q[b] = p1[b] < x ? 0 : 255; \ + for( z = 0; z < nb; z++ ) \ + q[z] = p1[z] < x ? 0 : 255; \ \ q += nb; \ } \ @@ -155,8 +155,9 @@ normalise( IMAGE *in, IMAGE *out ) /* Generate function. */ static int -make_vert_gen( REGION *or, void *dummy, IMAGE *in ) +make_vert_gen( REGION *or, void *seq, void *a, void *b ) { + IMAGE *in = (IMAGE *) a; Rect *r = &or->valid; int le = r->left; int to = r->top; @@ -164,7 +165,7 @@ make_vert_gen( REGION *or, void *dummy, IMAGE *in ) int bo = IM_RECT_BOTTOM( r ); int nb = in->Bands; - int x, y, b; + int x, y, z; for( y = to; y < bo; y++ ) { unsigned char *q = (unsigned char *) @@ -195,8 +196,8 @@ make_vert_gen( REGION *or, void *dummy, IMAGE *in ) TYPE *p1 = (TYPE *) p; \ \ for( y = to; y < bo; y++ ) { \ - for( b = 0; b < nb; b++ ) \ - q[b] = p1[b] < (ht - y) ? 0 : 255; \ + for( z = 0; z < nb; z++ ) \ + q[z] = p1[z] < (ht - y) ? 0 : 255; \ \ q += lsk; \ } \ @@ -206,8 +207,9 @@ make_vert_gen( REGION *or, void *dummy, IMAGE *in ) /* Generate function. */ static int -make_horz_gen( REGION *or, void *dummy, IMAGE *in ) +make_horz_gen( REGION *or, void *seq, void *a, void *b ) { + IMAGE *in = (IMAGE *) a; Rect *r = &or->valid; int le = r->left; int to = r->top; @@ -217,7 +219,7 @@ make_horz_gen( REGION *or, void *dummy, IMAGE *in ) int lsk = IM_REGION_LSKIP( or ); int ht = or->im->Ysize; - int x, y, b; + int x, y, z; for( x = le; x < ri; x++ ) { unsigned char *q = (unsigned char *) diff --git a/libsrc/histograms_lut/im_lhisteq.c b/libsrc/histograms_lut/im_lhisteq.c index 8cab4c9e..3c85ac30 100644 --- a/libsrc/histograms_lut/im_lhisteq.c +++ b/libsrc/histograms_lut/im_lhisteq.c @@ -74,8 +74,10 @@ typedef struct { /* lhist generate function. */ static int -lhist_gen( REGION *or, REGION *ir, IMAGE *in, LhistInfo *inf ) +lhist_gen( REGION *or, void *seq, void *a, void *b ) { + REGION *ir = (REGION *) seq; + LhistInfo *inf = (LhistInfo *) inf; Rect irect; Rect *r = &or->valid; diff --git a/libsrc/histograms_lut/im_maplut.c b/libsrc/histograms_lut/im_maplut.c index 8cdc3d22..b9ce291a 100644 --- a/libsrc/histograms_lut/im_maplut.c +++ b/libsrc/histograms_lut/im_maplut.c @@ -173,16 +173,16 @@ typedef struct { /* Destroy a sequence value. */ static int -stop_maplut( Seq *seq, IMAGE *in, LutInfo *st ) +maplut_stop( void *vseq, void *a, void *b ) { + Seq *seq = (Seq *) vseq; + LutInfo *st = (LutInfo *) b; + /* Add to global stats. */ st->overflow += seq->overflow; - if( seq->ir ) { - im_region_free( seq->ir ); - seq->ir = NULL; - } + IM_FREEF( im_region_free, seq->ir ); return( 0 ); } @@ -190,11 +190,12 @@ stop_maplut( Seq *seq, IMAGE *in, LutInfo *st ) /* Our start function. */ static void * -start_maplut( IMAGE *out, IMAGE *in, LutInfo *st ) +maplut_start( IMAGE *out, void *a, void *b ) { - Seq *seq = IM_NEW( out, Seq ); - - if( !seq ) + IMAGE *in = (IMAGE *) a; + Seq *seq; + + if( !(seq = IM_NEW( out, Seq )) ) return( NULL ); /* Init! @@ -205,7 +206,7 @@ start_maplut( IMAGE *out, IMAGE *in, LutInfo *st ) if( !(seq->ir = im_region_create( in )) ) return( NULL ); - return( (void *) seq ); + return( seq ); } /* Map through n non-complex luts. @@ -508,8 +509,11 @@ start_maplut( IMAGE *out, IMAGE *in, LutInfo *st ) /* Do a map. */ static int -gen_map( REGION *or, Seq *seq, IMAGE *in, LutInfo *st ) +maplut_gen( REGION *or, void *vseq, void *a, void *b ) { + Seq *seq = (Seq *) vseq; + IMAGE *in = (IMAGE *) a; + LutInfo *st = (LutInfo *) b; REGION *ir = seq->ir; Rect *r = &or->valid; int le = r->left; @@ -616,7 +620,7 @@ im_maplut( IMAGE *in, IMAGE *out, IMAGE *lut ) /* Process! */ - if( im_generate( out, start_maplut, gen_map, stop_maplut, in, st ) ) + if( im_generate( out, maplut_start, maplut_gen, maplut_stop, in, st ) ) return( -1 ); return( 0 ); diff --git a/libsrc/histograms_lut/im_project.c b/libsrc/histograms_lut/im_project.c index ecda7aea..9d099890 100644 --- a/libsrc/histograms_lut/im_project.c +++ b/libsrc/histograms_lut/im_project.c @@ -104,10 +104,11 @@ project_new( IMAGE *in, IMAGE *hout, IMAGE *vout ) /* Build a sub-project, based on the main project. */ static void * -project_new_sub( IMAGE *out, Project *mproject ) +project_new_sub( IMAGE *out, void *a, void *b ) { - return( (void *) - project_new( mproject->in, mproject->hout, mproject->vout ) ); + Project *mproject = (Project *) a; + + return( project_new( mproject->in, mproject->hout, mproject->vout ) ); } #define ADD_BUFFER( TYPE, Q, P, N ) { \ @@ -123,8 +124,10 @@ project_new_sub( IMAGE *out, Project *mproject ) /* Join a sub-project onto the main project. */ static int -project_merge( Project *sproject, Project *mproject ) +project_merge( void *seq, void *a, void *b ) { + Project *sproject = (Project *) seq; + Project *mproject = (Project *) a; IMAGE *in = mproject->in; IMAGE *out = mproject->hout; int hsz = in->Xsize * in->Bands; @@ -192,8 +195,9 @@ project_merge( Project *sproject, Project *mproject ) /* Add a region to a project. */ static int -project_scan( REGION *reg, Project *project ) +project_scan( REGION *reg, void *seq, void *a, void *b ) { + Project *project = (Project *) seq; Rect *r = ®->valid; int le = r->left; int to = r->top; diff --git a/libsrc/histograms_lut/im_stdif.c b/libsrc/histograms_lut/im_stdif.c index 7450e856..f15e41f9 100644 --- a/libsrc/histograms_lut/im_stdif.c +++ b/libsrc/histograms_lut/im_stdif.c @@ -91,8 +91,10 @@ typedef struct { /* stdif generate function. */ static int -stdif_gen( REGION *or, REGION *ir, IMAGE *in, StdifInfo *inf ) +stdif_gen( REGION *or, void *seq, void *a, void *b ) { + REGION *ir = (REGION *) seq; + StdifInfo *inf = (StdifInfo *) b; Rect irect; Rect *r = &or->valid; diff --git a/libsrc/morphology/im_dilate.c b/libsrc/morphology/im_dilate.c index c4af9f50..94c7f4e0 100644 --- a/libsrc/morphology/im_dilate.c +++ b/libsrc/morphology/im_dilate.c @@ -76,14 +76,11 @@ typedef struct { /* Stop function. */ static int -stop_dilate( SeqInfo *seq, IMAGE *in ) +dilate_stop( void *vseq, void *a, void *b ) { - /* Free attached objects. - */ - if( seq->ir ) { - im_region_free( seq->ir ); - seq->ir = NULL; - } + SeqInfo *seq = (SeqInfo *) vseq; + + IM_FREEF( im_region_free, seq->ir ); return( 0 ); } @@ -91,12 +88,14 @@ stop_dilate( SeqInfo *seq, IMAGE *in ) /* Start function. */ static void * -start_dilate( IMAGE *out, IMAGE *in, INTMASK *msk ) +dilate_start( IMAGE *out, void *a, void *b ) { - SeqInfo *seq = IM_NEW( out, SeqInfo ); + IMAGE *in = (IMAGE *) a; + INTMASK *msk = (INTMASK *) b; int sz = msk->xsize * msk->ysize; + SeqInfo *seq; - if( !seq ) + if( !(seq = IM_NEW( out, SeqInfo )) ) return( NULL ); /* Init! @@ -113,18 +112,20 @@ start_dilate( IMAGE *out, IMAGE *in, INTMASK *msk ) seq->soff = IM_ARRAY( out, sz, int ); seq->coff = IM_ARRAY( out, sz, int ); if( !seq->ir || !seq->soff || !seq->coff ) { - stop_dilate( seq, in ); + dilate_stop( seq, in, NULL ); return( NULL ); } - return( (void *) seq ); + return( seq ); } /* Dilate! */ static int -gen_dilate( REGION *or, SeqInfo *seq, IMAGE *in, INTMASK *msk ) +dilate_gen( REGION *or, void *vseq, void *a, void *b ) { + SeqInfo *seq = (SeqInfo *) vseq; + INTMASK *msk = (INTMASK *) b; REGION *ir = seq->ir; int *soff = seq->soff; @@ -283,7 +284,7 @@ im_dilate_raw( IMAGE *in, IMAGE *out, INTMASK *m ) /* Generate! */ - if( im_generate( out, start_dilate, gen_dilate, stop_dilate, in, msk ) ) + if( im_generate( out, dilate_start, dilate_gen, dilate_stop, in, msk ) ) return( -1 ); out->Xoffset = -m->xsize / 2; diff --git a/libsrc/morphology/im_erode.c b/libsrc/morphology/im_erode.c index 56683c6e..94f876d2 100644 --- a/libsrc/morphology/im_erode.c +++ b/libsrc/morphology/im_erode.c @@ -76,14 +76,11 @@ typedef struct { /* Stop function. */ static int -stop_erode( SeqInfo *seq, IMAGE *in ) +erode_stop( void *vseq, void *a, void *b ) { - /* Free attached objects. - */ - if( seq->ir ) { - im_region_free( seq->ir ); - seq->ir = NULL; - } + SeqInfo *seq = (SeqInfo *) vseq; + + IM_FREEF( im_region_free, seq->ir ); return( 0 ); } @@ -91,12 +88,14 @@ stop_erode( SeqInfo *seq, IMAGE *in ) /* Start function. */ static void * -start_erode( IMAGE *out, IMAGE *in, INTMASK *msk ) +erode_start( IMAGE *out, void *a, void *b ) { - SeqInfo *seq = IM_NEW( out, SeqInfo ); + IMAGE *in = (IMAGE *) a; + INTMASK *msk = (INTMASK *) b; + SeqInfo *seq; int sz = msk->xsize * msk->ysize; - if( !seq ) + if( !(seq = IM_NEW( out, SeqInfo )) ) return( NULL ); /* Init! @@ -113,7 +112,7 @@ start_erode( IMAGE *out, IMAGE *in, INTMASK *msk ) seq->soff = IM_ARRAY( out, sz, int ); seq->coff = IM_ARRAY( out, sz, int ); if( !seq->ir || !seq->soff || !seq->coff ) { - stop_erode( seq, in ); + erode_stop( seq, in, NULL ); return( NULL ); } @@ -123,8 +122,10 @@ start_erode( IMAGE *out, IMAGE *in, INTMASK *msk ) /* Erode! */ static int -gen_erode( REGION *or, SeqInfo *seq, IMAGE *in, INTMASK *msk ) +erode_gen( REGION *or, void *vseq, void *a, void *b ) { + SeqInfo *seq = (SeqInfo *) vseq; + INTMASK *msk = (INTMASK *) b; REGION *ir = seq->ir; int *soff = seq->soff; @@ -281,7 +282,7 @@ im_erode_raw( IMAGE *in, IMAGE *out, INTMASK *m ) /* Generate! */ - if( im_generate( out, start_erode, gen_erode, stop_erode, in, msk ) ) + if( im_generate( out, erode_start, erode_gen, erode_stop, in, msk ) ) return( -1 ); out->Xoffset = -m->xsize / 2;