From db90f9f271b92c1768fc80fc5ab02689ba088fbe Mon Sep 17 00:00:00 2001 From: John Cupitt Date: Fri, 30 Sep 2016 07:37:57 +0100 Subject: [PATCH] tiny conv improvements - we were still using the im_aconv() wrapper, oops - add gate and pixel count markup --- libvips/convolution/conv.c | 15 +++++---------- libvips/convolution/convf.c | 6 ++++++ libvips/convolution/convi.c | 22 ++++++++++++++-------- 3 files changed, 25 insertions(+), 18 deletions(-) diff --git a/libvips/convolution/conv.c b/libvips/convolution/conv.c index 1f247b6a..de5d904b 100644 --- a/libvips/convolution/conv.c +++ b/libvips/convolution/conv.c @@ -102,17 +102,12 @@ vips_conv_build( VipsObject *object ) break; case VIPS_PRECISION_APPROXIMATE: -{ - DOUBLEMASK *dmsk; - - if( !(dmsk = im_vips2mask( convolution->M, class->nickname )) || - !im_local_dmask( convolution->out, dmsk ) ) + if( vips_conva( in, &t[1], convolution->M, + "layers", conv->layers, + "cluster", conv->cluster, + NULL ) || + vips_image_write( t[1], convolution->out ) ) return( -1 ); - - if( im_aconv( in, convolution->out, dmsk, - conv->layers, conv->cluster ) ) - return( -1 ); -} break; default: diff --git a/libvips/convolution/convf.c b/libvips/convolution/convf.c index be7b59b2..927659f2 100644 --- a/libvips/convolution/convf.c +++ b/libvips/convolution/convf.c @@ -223,6 +223,8 @@ vips_convf_gen( REGION *or, void *vseq, void *a, void *b, gboolean *stop ) } } + VIPS_GATE_START( "vips_convf_gen: work" ); + for( y = to; y < bo; y++ ) { /* Init pts for this line of PELs. */ @@ -270,6 +272,10 @@ vips_convf_gen( REGION *or, void *vseq, void *a, void *b, gboolean *stop ) } } + VIPS_GATE_STOP( "vips_convf_gen: work" ); + + VIPS_COUNT_PIXELS( or, "vips_convf_gen" ); + return( 0 ); } diff --git a/libvips/convolution/convi.c b/libvips/convolution/convi.c index 2cac9a1c..d11e3606 100644 --- a/libvips/convolution/convi.c +++ b/libvips/convolution/convi.c @@ -473,7 +473,7 @@ vips_convi_compile( VipsConvi *convi, VipsImage *in ) } static int -vips_convi_generate_vector( VipsRegion *or, +vips_convi_gen_vector( VipsRegion *or, void *vseq, void *a, void *b, gboolean *stop ) { VipsConviSequence *seq = (VipsConviSequence *) vseq; @@ -491,7 +491,7 @@ vips_convi_generate_vector( VipsRegion *or, VipsExecutor clip; #ifdef DEBUG_PIXELS - printf( "vips_convi_generate_vector: generating %d x %d at %d x %d\n", + printf( "vips_convi_gen_vector: generating %d x %d at %d x %d\n", r->width, r->height, r->left, r->top ); #endif /*DEBUG_PIXELS*/ @@ -509,7 +509,7 @@ vips_convi_generate_vector( VipsRegion *or, convi->pass[i].vector, ne ); vips_executor_set_program( &clip, convi->vector, ne ); - VIPS_GATE_START( "vips_convi_generate_vector: work" ); + VIPS_GATE_START( "vips_convi_gen_vector: work" ); for( y = 0; y < r->height; y ++ ) { VipsPel *q = VIPS_REGION_ADDR( or, r->left, r->top + y ); @@ -558,9 +558,9 @@ vips_convi_generate_vector( VipsRegion *or, #endif /*DEBUG_PIXELS*/ } - VIPS_GATE_STOP( "vips_convi_generate_vector: work" ); + VIPS_GATE_STOP( "vips_convi_gen_vector: work" ); - VIPS_COUNT_PIXELS( or, "vips_convi_generate_vector" ); + VIPS_COUNT_PIXELS( or, "vips_convi_gen_vector" ); return( 0 ); } @@ -646,7 +646,7 @@ G_STMT_START { \ /* Convolve! */ static int -vips_convi_generate( VipsRegion *or, +vips_convi_gen( VipsRegion *or, void *vseq, void *a, void *b, gboolean *stop ) { VipsConviSequence *seq = (VipsConviSequence *) vseq; @@ -696,6 +696,8 @@ vips_convi_generate( VipsRegion *or, } } + VIPS_GATE_START( "vips_convi_gen: work" ); + for( y = to; y < bo; y++ ) { /* Init pts for this line of PELs. */ @@ -743,6 +745,10 @@ vips_convi_generate( VipsRegion *or, } } + VIPS_GATE_STOP( "vips_convi_gen: work" ); + + VIPS_COUNT_PIXELS( or, "vips_convi_gen" ); + return( 0 ); } @@ -934,7 +940,7 @@ vips_convi_build( VipsObject *object ) if( (convi->fixed = VIPS_ARRAY( object, n_point, int )) && !intize_to_fixed_point( M, convi->fixed ) && !vips_convi_compile( convi, in ) ) { - generate = vips_convi_generate_vector; + generate = vips_convi_gen_vector; vips_info( class->nickname, "using vector path" ); } else @@ -973,7 +979,7 @@ vips_convi_build( VipsObject *object ) convi->nnz = 1; } - generate = vips_convi_generate; + generate = vips_convi_gen; vips_info( class->nickname, "using C path" ); }