From 67fcf5256d81ce7e80ab1f4c75fb81b43e634301 Mon Sep 17 00:00:00 2001 From: Antony Riakiotakis Date: Mon, 23 Feb 2015 17:19:06 +0100 Subject: Move allocation of imbuf from array to allocimbuf. Skip allocation of temporary imbuf --- source/blender/imbuf/IMB_imbuf.h | 14 +++++++------- source/blender/imbuf/intern/allocimbuf.c | 24 ++++++++++++++++++++++++ source/blender/imbuf/intern/scaling.c | 28 ---------------------------- 3 files changed, 31 insertions(+), 35 deletions(-) (limited to 'source/blender') diff --git a/source/blender/imbuf/IMB_imbuf.h b/source/blender/imbuf/IMB_imbuf.h index 299918a47a5..447a14b95c3 100644 --- a/source/blender/imbuf/IMB_imbuf.h +++ b/source/blender/imbuf/IMB_imbuf.h @@ -125,6 +125,13 @@ void IMB_freeImBuf(struct ImBuf *ibuf); struct ImBuf *IMB_allocImBuf(unsigned int x, unsigned int y, unsigned char d, unsigned int flags); +/** + * Create a copy of a pixel buffer and wrap it to a new ImBuf + * \attention Defined in allocimbuf.c + */ +struct ImBuf *IMB_allocFromBuffer(const unsigned int *rect, const float *rectf, + unsigned int w, unsigned int h); + /** * * Increase reference count to imbuf @@ -352,13 +359,6 @@ struct ImBuf *IMB_onehalf(struct ImBuf *ibuf1); */ struct ImBuf *IMB_scaleImBuf(struct ImBuf *ibuf, unsigned int newx, unsigned int newy); -/** - * Create a copy of a pixel buffer and wrap it to a new ImBuf - * \attention Defined in scaling.c - */ -struct ImBuf *IMB_allocFromBuffer(const unsigned int *rect, const float *frect, - unsigned int w, unsigned int h); - /** * * \attention Defined in scaling.c diff --git a/source/blender/imbuf/intern/allocimbuf.c b/source/blender/imbuf/intern/allocimbuf.c index 556c4beeae7..b28d19e3e15 100644 --- a/source/blender/imbuf/intern/allocimbuf.c +++ b/source/blender/imbuf/intern/allocimbuf.c @@ -362,6 +362,30 @@ bool imb_addrectImBuf(ImBuf *ibuf) return false; } +struct ImBuf *IMB_allocFromBuffer(const unsigned int *rect, const float *rectf, + unsigned int w, unsigned int h) +{ + ImBuf *ibuf = NULL; + + if (!(rect || rectf)) + return NULL; + + ibuf = IMB_allocImBuf(w, h, 32, 0); + + if (rectf) { + ibuf->rect_float = MEM_dupallocN(rectf); + ibuf->flags |= IB_rectfloat; + ibuf->mall |= IB_rectfloat; + } + if (rect) { + ibuf->rect = MEM_dupallocN(rect); + ibuf->flags |= IB_rect; + ibuf->mall |= IB_rect; + } + + return ibuf; +} + bool imb_addtilesImBuf(ImBuf *ibuf) { if (ibuf == NULL) return false; diff --git a/source/blender/imbuf/intern/scaling.c b/source/blender/imbuf/intern/scaling.c index f7504210573..2601fe62c2f 100644 --- a/source/blender/imbuf/intern/scaling.c +++ b/source/blender/imbuf/intern/scaling.c @@ -1545,34 +1545,6 @@ struct ImBuf *IMB_scaleImBuf(struct ImBuf *ibuf, unsigned int newx, unsigned int return(ibuf); } -struct ImBuf *IMB_allocFromBuffer(const unsigned int *rect, const float *frect, - unsigned int w, unsigned int h) -{ - ImBuf *ibuf = NULL; - ImBuf *tmpibuf = IMB_allocImBuf(w, h, 32, 0); - - if (frect) { - /* allocate new image buffer and set the temporary buffer float buffer correctly */ - ibuf = IMB_allocImBuf(w, h, 32, IB_rectfloat); - tmpibuf->rect_float = (float *)frect; - - IMB_rectcpy(ibuf, tmpibuf, 0, 0, 0, 0, w, h); - } - else if (rect) { - ibuf = IMB_allocImBuf(w, h, 32, IB_rect); - tmpibuf->rect = (unsigned int *)rect; - - IMB_rectcpy(ibuf, tmpibuf, 0, 0, 0, 0, w, h); - } - - /* important, else we clean the source image imbufs! */ - tmpibuf->rect_float = NULL; - tmpibuf->rect = NULL; - IMB_freeImBuf(tmpibuf); - - return ibuf; -} - struct imbufRGBA { float r, g, b, a; }; -- cgit v1.2.3