diff --git a/TODO b/TODO index 7c60db2f..07aa9dfa 100644 --- a/TODO +++ b/TODO @@ -1,13 +1,14 @@ - lab [100,0,0] -> srgb [255, 255, 254]? how odd -- scrap im_convsep_f() ... just use im_conv_f() twice - -- make im_rank() use IM_SWAP() - -- time conv with an s32 intermediate - - could do small masks in a single pass +- im_sharpen() won't use Vector, since it normalises to 100 and will clip + + try using a smaller norm factor in sharpen, and maybe nip2 as well for sep + conv gen there? + +- Lan's c4_stats.ws is broken, I guess due to vector stuff + - how much time are we spending setting sources by name, profile! diff --git a/libvips/convolution/im_sharpen.c b/libvips/convolution/im_sharpen.c index 70aba1af..38dc176c 100644 --- a/libvips/convolution/im_sharpen.c +++ b/libvips/convolution/im_sharpen.c @@ -208,9 +208,9 @@ sharpen_mask_new( int radius ) im_free_imask( base ); #ifdef DEBUG +#endif /*DEBUG*/ printf( "sharpen_mask_new: created mask:\n" ); im_print_imask( line ); -#endif /*DEBUG*/ return( line ); } diff --git a/libvips/include/vips/util.h b/libvips/include/vips/util.h index efdf0e7f..e49f4e94 100644 --- a/libvips/include/vips/util.h +++ b/libvips/include/vips/util.h @@ -56,12 +56,11 @@ extern "C" { #define IM_CLIP(A,V,B) IM_MAX( (A), IM_MIN( (B), (V) ) ) #define IM_NUMBER(R) ((int)(sizeof(R)/sizeof(R[0]))) -#define IM_SWAP( TYPE, A, B ) \ -G_STMT_START { \ +#define IM_SWAP( TYPE, A, B ) { \ TYPE t = (A); \ (A) = (B); \ (B) = t; \ -} G_STMT_END +} #define IM_FREEF( F, S ) \ G_STMT_START \ diff --git a/libvips/morphology/im_rank.c b/libvips/morphology/im_rank.c index ffb25ac4..68720cf4 100644 --- a/libvips/morphology/im_rank.c +++ b/libvips/morphology/im_rank.c @@ -131,12 +131,6 @@ rank_start( IMAGE *out, void *a, void *b ) return( (void *) seq ); } -#define SWAP( TYPE, A, B ) { \ - TYPE t = (A); \ - (A) = (B); \ - (B) = t; \ -} - /* Inner loop for select-sorting TYPE. */ #define LOOP_SELECT( TYPE ) { \ @@ -167,7 +161,7 @@ rank_start( IMAGE *out, void *a, void *b ) */ \ if( upper - lower == 1 && \ sort[lower] > sort[upper] ) \ - SWAP( TYPE, \ + IM_SWAP( TYPE, \ sort[lower], sort[upper] ); \ break; \ } \ @@ -180,15 +174,15 @@ rank_start( IMAGE *out, void *a, void *b ) * midpoint in sort[lower + 1] for * partitioning. */ \ - SWAP( TYPE, sort[lower + 1], sort[mid] ); \ + IM_SWAP( TYPE, sort[lower + 1], sort[mid] ); \ if( sort[lower] > sort[upper] ) \ - SWAP( TYPE, \ + IM_SWAP( TYPE, \ sort[lower], sort[upper] ); \ if( sort[lower + 1] > sort[upper] ) \ - SWAP( TYPE, \ + IM_SWAP( TYPE, \ sort[lower + 1], sort[upper] );\ if( sort[lower] > sort[lower + 1] ) \ - SWAP( TYPE, \ + IM_SWAP( TYPE, \ sort[lower], sort[lower + 1] ) \ \ i = lower + 1; \ @@ -206,7 +200,7 @@ rank_start( IMAGE *out, void *a, void *b ) while( sort[j] > a ); \ if( j < i ) \ break; \ - SWAP( TYPE, sort[i], sort[j] ); \ + IM_SWAP( TYPE, sort[i], sort[j] ); \ } \ \ /* Replace mid element.