index 054b3899b41171a84156539a208a82995ca96def..1d73f14e1906ec92ff560d18bba0d8fec95cdc8a 100644 (file)
// this primitive is defined for non-premultiplied RGBA values,
// thus convert them to that format
+ bool free_in_on_exit = false;
if (in->mode != NR_PIXBLOCK_MODE_R8G8B8A8N) {
NRPixBlock *original_in = in;
in = new NRPixBlock;
nr_pixblock_setup_fast(in, NR_PIXBLOCK_MODE_R8G8B8A8N,
original_in->area.x0, original_in->area.y0,
original_in->area.x1, original_in->area.y1,
- false);
+ true);
nr_blit_pixblock_pixblock(in, original_in);
+ free_in_on_exit = true;
}
unsigned char *in_data = NR_PIXBLOCK_PX(in);
@@ -143,6 +145,12 @@ int FilterColorMatrix::render(FilterSlot &slot, FilterUnits const &/*units*/) {
case COLORMATRIX_ENDTYPE:
break;
}
+
+ if (free_in_on_exit) {
+ nr_pixblock_release(in);
+ delete in;
+ }
+
out->empty = FALSE;
slot.set(_output, out);
return 0;