Move allocation of imbuf from array to allocimbuf.
authorAntony Riakiotakis <kalast@gmail.com>
Mon, 23 Feb 2015 16:19:06 +0000 (17:19 +0100)
committerAntony Riakiotakis <kalast@gmail.com>
Mon, 23 Feb 2015 16:19:31 +0000 (17:19 +0100)
Skip allocation of temporary imbuf

source/blender/imbuf/IMB_imbuf.h
source/blender/imbuf/intern/allocimbuf.c
source/blender/imbuf/intern/scaling.c

index 299918a47a50b27fb1ffb5719170fbea6ca5693d..447a14b95c3bd4caaf6069e0286891d1af79696c 100644 (file)
@@ -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
index 556c4beeae7a523c5252c35b529a81c3a66e921b..b28d19e3e15e9946467c3b2f429a4a699977d5d7 100644 (file)
@@ -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;
index f7504210573c442c4b8dfdb0ad3a4f784d7ec6ab..2601fe62c2fa746a9b467dd38178484fda20d8c1 100644 (file)
@@ -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;
 };