/* Convolution start function. */ static void * vips_convi_start( VipsImage *out, void *a, void *b ) { VipsImage *in = (VipsImage *) a; VipsConvi *convi = (VipsConvi *) b; VipsConviSequence *seq; if( !(seq = VIPS_NEW( out, VipsConviSequence )) ) return( NULL ); seq->convi = convi; seq->ir = NULL; seq->offsets = NULL; seq->pts = NULL; seq->last_bpl = -1; seq->t1 = NULL; seq->t2 = NULL; seq->ir = vips_region_new( in ); /* C mode. */ if( convi->nnz ) { seq->offsets = VIPS_ARRAY( NULL, convi->nnz, int ); seq->pts = VIPS_ARRAY( NULL, convi->nnz, VipsPel * ); if( !seq->offsets || !seq->pts ) { vips_convi_stop( seq, in, convi ); return( NULL ); } }
/* Convolution start function. */ static void * vips_convi_start( VipsImage *out, void *a, void *b ) { VipsImage *in = (VipsImage *) a; VipsConvi *convi = (VipsConvi *) b; VipsConviSequence *seq; if( !(seq = VIPS_NEW( out, VipsConviSequence )) ) return( NULL ); seq->convi = convi; seq->ir = NULL; seq->offsets = NULL; seq->last_bpl = -1; seq->t1 = NULL; seq->t2 = NULL; seq->ir = vips_region_new( in ); /* C mode. */ if( convi->nnz ) { if( !(seq->offsets = VIPS_ARRAY( NULL, convi->nnz, int )) ) { vips_convi_stop( seq, in, convi ); return( NULL ); } } /* Vector mode. */ if( convi->n_pass ) { seq->t1 = VIPS_ARRAY( NULL, VIPS_IMAGE_N_ELEMENTS( in ), short ); seq->t2 = VIPS_ARRAY( NULL, VIPS_IMAGE_N_ELEMENTS( in ), short ); if( !seq->t1 || !seq->t2 ) { vips_convi_stop( seq, in, convi ); return( NULL ); } }