doxygen: prevent GPL license block from being parsed as doxygen comment.
[blender.git] / source / blender / imbuf / intern / iris.c
index 7b8c383..f29f68b 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  *
  * ***** BEGIN GPL LICENSE BLOCK *****
  *
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  *
  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
  * All rights reserved.
  */
 
 #include <string.h>
+
 #include "BLI_blenlib.h"
+#include "MEM_guardedalloc.h"
+
 #include "imbuf.h"
-#include "imbuf_patch.h"
 #include "IMB_imbuf_types.h"
 #include "IMB_imbuf.h"
 #include "IMB_allocimbuf.h"
-#include "IMB_iris.h"
+#include "IMB_filetype.h"
 
 typedef struct {
        unsigned short  imagic;         /* stuff saved on disk . . */
@@ -121,7 +123,8 @@ static int file_offset;
 static unsigned short getshort(FILE *inf)
 {
        unsigned char * buf;
-       
+       (void)inf; /* unused */
+
        buf = file_data + file_offset;
        file_offset += 2;
        
@@ -131,6 +134,7 @@ static unsigned short getshort(FILE *inf)
 static unsigned int getlong(FILE *inf)
 {
        unsigned char * buf;
+       (void)inf; /* unused */
        
        buf = file_data + file_offset;
        file_offset += 4;
@@ -171,9 +175,8 @@ static void readheader(FILE *inf, IMAGE *image)
 
 static int writeheader(FILE *outf, IMAGE *image)
 {
-       IMAGE t;
+       IMAGE t= {0};
 
-       memset(&t, 0, sizeof(IMAGE));
        fwrite(&t,sizeof(IMAGE),1,outf);
        fseek(outf,0,SEEK_SET);
        putshort(outf,image->imagic);
@@ -224,6 +227,16 @@ static void test_endian_zbuf(struct ImBuf *ibuf)
        }
 }
 
+/* from misc_util: flip the bytes from x  */
+#define GS(x) (((unsigned char *)(x))[0] << 8 | ((unsigned char *)(x))[1])
+
+/* this one is only def-ed once, strangely... */
+#define GSS(x) (((uchar *)(x))[1] << 8 | ((uchar *)(x))[0])
+
+int imb_is_a_iris(unsigned char *mem)
+{
+       return ((GS(mem) == IMAGIC) || (GSS(mem) == IMAGIC));
+}
 
 /*
  *     longimagedata - 
@@ -232,7 +245,7 @@ static void test_endian_zbuf(struct ImBuf *ibuf)
  *
  */
 
-struct ImBuf *imb_loadiris(unsigned char *mem, int flags)
+struct ImBuf *imb_loadiris(unsigned char *mem, size_t size, int flags)
 {
        unsigned int *base, *lptr = NULL;
        float *fbase, *fptr = NULL;
@@ -245,7 +258,11 @@ struct ImBuf *imb_loadiris(unsigned char *mem, int flags)
        int xsize, ysize, zsize;
        int bpp, rle, cur, badorder;
        ImBuf * ibuf;
+
+       (void)size; /* unused */
        
+       if(!imb_is_a_iris(mem)) return NULL;
+
        /*printf("new iris\n");*/
        
        file_data = mem;
@@ -269,7 +286,7 @@ struct ImBuf *imb_loadiris(unsigned char *mem, int flags)
        zsize = image.zsize;
        
        if (flags & IB_test) {
-               ibuf = IMB_allocImBuf(image.xsize, image.ysize, 8 * image.zsize, 0, 0);
+               ibuf = IMB_allocImBuf(image.xsize, image.ysize, 8 * image.zsize, 0);
                if (ibuf) ibuf->ftype = IMAGIC;
                return(ibuf);
        }
@@ -277,8 +294,8 @@ struct ImBuf *imb_loadiris(unsigned char *mem, int flags)
        if (rle) {
                
                tablen = ysize*zsize*sizeof(int);
-               starttab = (unsigned int *)malloc(tablen);
-               lengthtab = (unsigned int *)malloc(tablen);
+               starttab = (unsigned int *)MEM_mallocN(tablen, "iris starttab");
+               lengthtab = (unsigned int *)MEM_mallocN(tablen, "iris endtab");
                file_offset = 512;
                
                readtab(inf,starttab,tablen);
@@ -301,7 +318,7 @@ struct ImBuf *imb_loadiris(unsigned char *mem, int flags)
        
                if (bpp == 1) {
                        
-                       ibuf = IMB_allocImBuf(xsize, ysize, 8 * zsize, IB_rect, 0);
+                       ibuf = IMB_allocImBuf(xsize, ysize, 8 * zsize, IB_rect);
                        if (ibuf->depth > 32) ibuf->depth = 32;
                        base = ibuf->rect;
                        zbase = (unsigned int *)ibuf->zbuf;
@@ -342,7 +359,7 @@ struct ImBuf *imb_loadiris(unsigned char *mem, int flags)
 
                } else {        /* bpp == 2 */
                        
-                       ibuf = IMB_allocImBuf(xsize, ysize, 32, (flags & IB_rect)|IB_rectfloat, 0);
+                       ibuf = IMB_allocImBuf(xsize, ysize, 32, (flags & IB_rect)|IB_rectfloat);
                        
                        fbase = ibuf->rect_float;
                        
@@ -379,13 +396,13 @@ struct ImBuf *imb_loadiris(unsigned char *mem, int flags)
                        }
                }
                
-               free(starttab);
-               free(lengthtab);        
+               MEM_freeN(starttab);
+               MEM_freeN(lengthtab);   
 
        } else {
                if (bpp == 1) {
                        
-                       ibuf = IMB_allocImBuf(xsize, ysize, 8 * zsize, IB_rect, 0);
+                       ibuf = IMB_allocImBuf(xsize, ysize, 8 * zsize, IB_rect);
                        if (ibuf->depth > 32) ibuf->depth = 32;
 
                        base = ibuf->rect;
@@ -410,7 +427,7 @@ struct ImBuf *imb_loadiris(unsigned char *mem, int flags)
                        
                } else {        /* bpp == 2 */
                        
-                       ibuf = IMB_allocImBuf(xsize, ysize, 32, (flags & IB_rect)|IB_rectfloat, 0);
+                       ibuf = IMB_allocImBuf(xsize, ysize, 32, (flags & IB_rect)|IB_rectfloat);
 
                        fbase = ibuf->rect_float;
 
@@ -494,7 +511,7 @@ struct ImBuf *imb_loadiris(unsigned char *mem, int flags)
        }
 
        ibuf->ftype = IMAGIC;
-       if (flags & IB_ttob) IMB_flipy(ibuf);
+       ibuf->profile = IB_PROFILE_SRGB;
        
        test_endian_zbuf(ibuf);
        
@@ -644,7 +661,7 @@ static void expandrow(unsigned char *optr, unsigned char *iptr, int z)
  *  Added: zbuf write
  */
 
-static int output_iris(unsigned int *lptr, int xsize, int ysize, int zsize, char *name, int *zptr)
+static int output_iris(unsigned int *lptr, int xsize, int ysize, int zsize, const char *name, int *zptr)
 {
        FILE *outf;
        IMAGE *image;
@@ -660,12 +677,12 @@ static int output_iris(unsigned int *lptr, int xsize, int ysize, int zsize, char
 
        tablen = ysize*zsize*sizeof(int);
 
-       image = (IMAGE *)malloc(sizeof(IMAGE));
-       starttab = (unsigned int *)malloc(tablen);
-       lengthtab = (unsigned int *)malloc(tablen);
+       image = (IMAGE *)MEM_mallocN(sizeof(IMAGE), "iris image");
+       starttab = (unsigned int *)MEM_mallocN(tablen, "iris starttab");
+       lengthtab = (unsigned int *)MEM_mallocN(tablen, "iris lengthtab");
        rlebuflen = 1.05*xsize+10;
-       rlebuf = (unsigned char *)malloc(rlebuflen);
-       lumbuf = (unsigned int *)malloc(xsize*sizeof(int));
+       rlebuf = (unsigned char *)MEM_mallocN(rlebuflen, "iris rlebuf");
+       lumbuf = (unsigned int *)MEM_mallocN(xsize*sizeof(int), "iris lumbuf");
 
        memset(image, 0, sizeof(IMAGE));
        image->imagic = IMAGIC;
@@ -714,11 +731,11 @@ static int output_iris(unsigned int *lptr, int xsize, int ysize, int zsize, char
        fseek(outf,512,SEEK_SET);
        goodwrite *= writetab(outf,starttab,tablen);
        goodwrite *= writetab(outf,lengthtab,tablen);
-       free(image);
-       free(starttab);
-       free(lengthtab);
-       free(rlebuf);
-       free(lumbuf);
+       MEM_freeN(image);
+       MEM_freeN(starttab);
+       MEM_freeN(lengthtab);
+       MEM_freeN(rlebuf);
+       MEM_freeN(lumbuf);
        fclose(outf);
        if(goodwrite)
                return 1;
@@ -798,7 +815,7 @@ static int compressrow(unsigned char *lbuf, unsigned char *rlebuf, int z, int cn
        return optr - (unsigned char *)rlebuf;
 }
 
-short imb_saveiris(struct ImBuf * ibuf, char *name, int flags)
+int imb_saveiris(struct ImBuf * ibuf, const char *name, int flags)
 {
        short zsize;
        int ret;