From: Tony Cook Date: Thu, 12 Jul 2012 12:59:24 +0000 (+1000) Subject: masked images weren't using the image allocation API X-Git-Tag: v0.93_02~78 X-Git-Url: http://git.imager.perl.org/imager.git/commitdiff_plain/3cb06f59f13fa926d8b3b5bf49e5e12e78d4998d masked images weren't using the image allocation API Since the reference counting for context objects requires that image implementations use the API, this broke. --- diff --git a/maskimg.c b/maskimg.c index 5ed06602..725b8b6b 100644 --- a/maskimg.c +++ b/maskimg.c @@ -11,6 +11,8 @@ maskimg.c - implements masked images/image subsets =cut */ +#define IMAGER_NO_CONTEXT + #include "imager.h" #include "imageri.h" @@ -124,13 +126,15 @@ sample is treated as boolean. =cut */ -i_img *i_img_masked_new(i_img *targ, i_img *mask, i_img_dim x, i_img_dim y, i_img_dim w, i_img_dim h) { +i_img * +i_img_masked_new(i_img *targ, i_img *mask, i_img_dim x, i_img_dim y, i_img_dim w, i_img_dim h) { i_img *im; i_img_mask_ext *ext; + dIMCTXim(targ); - i_clear_error(); + im_clear_error(aIMCTX); if (x >= targ->xsize || y >= targ->ysize) { - i_push_error(0, "subset outside of target image"); + im_push_error(aIMCTX, 0, "subset outside of target image"); return NULL; } if (mask) { @@ -144,8 +148,10 @@ i_img *i_img_masked_new(i_img *targ, i_img *mask, i_img_dim x, i_img_dim y, i_im if (y+h > targ->ysize) h = targ->ysize - y; - im = mymalloc(sizeof(i_img)); + im = im_img_alloc(aIMCTX); + memcpy(im, &IIM_base_masked, sizeof(i_img)); + i_tags_new(&im->tags); im->xsize = w; im->ysize = h; im->channels = targ->channels; @@ -159,6 +165,8 @@ i_img *i_img_masked_new(i_img *targ, i_img *mask, i_img_dim x, i_img_dim y, i_im ext->samps = mymalloc(sizeof(i_sample_t) * im->xsize); im->ext_data = ext; + im_img_init(aIMCTX, im); + return im; } @@ -585,6 +593,7 @@ psamp_masked(i_img *im, i_img_dim l, i_img_dim r, i_img_dim y, return result; } else { + dIMCTXim(im); i_push_error(0, "Image position outside of image"); return -1; } @@ -652,6 +661,7 @@ psampf_masked(i_img *im, i_img_dim l, i_img_dim r, i_img_dim y, return result; } else { + dIMCTXim(im); i_push_error(0, "Image position outside of image"); return -1; }