Copying scripts from 2.4x without 2.5x changes
[blender-staging.git] / source / blender / blenpluginapi / iff.h
index 4fa3e0214fa7fde5658f3939b963a459243a936c..9378cdc9134ae60af96e927fb1e5b2b1e306589f 100644 (file)
@@ -33,6 +33,7 @@
 
 #include <sys/types.h>
 #include "util.h"
+#include "externdef.h"
 
 #define IB_rect                        (1 << 0)
 #define IB_planes              (1 << 1)
 #define IB_zbuf                        (1 << 13)
 #define IB_rgba                        (1 << 14)
 
-#define AMI        (1 << 31)
-#define Anim   (1 << 29)
-#define TGA        (1 << 28)
-#define JPG            (1 << 27)
+#define JP2             (1 << 18)
+
+#define AMI             (1 << 31)
+#define PNG             (1 << 30)
+#define Anim            (1 << 29)
+#define TGA             (1 << 28)
+#define JPG             (1 << 27)
+#define BMP             (1 << 26)
+#ifdef WITH_QUICKTIME
+#define QUICKTIME       (1 << 25)
+#endif
+#define RADHDR  (1<<24)
 
 #define RAWTGA (TGA | 1)
 
@@ -90,6 +99,7 @@
 #define IS_amiga(x)            (x->ftype & AMI)
 #define IS_ham(x)              ((x->ftype & AM_ham) == AM_ham)
 #define IS_hbrite(x)   ((x->ftype & AM_hbrite) == AM_hbrite)
+
 #define IS_lace(x)             ((x->ftype & AM_lace) == AM_lace)
 #define IS_hires(x)            ((x->ftype & AM_hires) == AM_hires)
 #define IS_hblace(x)   ((x->ftype & AM_hblace) == AM_hblace)
 
 #define IS_anim(x)             (x->ftype & Anim)
 #define IS_hamx(x)             (x->ftype == AN_hamx)
-
 #define IS_tga(x)              (x->ftype & TGA)
+#define IS_png(x)               (x->ftype & PNG)
+#define IS_bmp(x)               (x->ftype & BMP)
+#define IS_radhdr(x)           (x->ftype & RADHDR)
 #define IS_tim(x)              (x->ftype & TIM)
+#define IS_tiff(x)             (x->ftype & TIFF)
+#define IS_openexr(x)           (x->ftype & OPENEXR)
+#define IS_jp2(x)           (x->ftype & JP2)
+
 
 #define IMAGIC         0732
 #define IS_iris(x)             (x->ftype == IMAGIC)
 
 #define AN_INIT an_stringdec = stringdec; an_stringenc = stringenc;
 
-typedef struct ImBuf{
-       short   x,y;            /* width in pixels, height in scanlines */
-       short   skipx;          /* width in ints to get to the next scanline */
-       unsigned char   depth;          /* active amount of bits/bitplanes */
-       unsigned char   cbits;          /* amount of active bits in cmap */
-       unsigned short  mincol;
-       unsigned short  maxcol;
-       int     type;           /* 0=abgr, 1=bitplanes */
-       int     ftype;
-       unsigned int    *cmap;          /* int array van kleuren */
-       unsigned int    *rect;          /* databuffer */
-       unsigned int    **planes;       /* bitplanes */
-       int     flags;
-       int     mall;           /* what is malloced internal, and can be freed */
-       short   xorig, yorig;
-       char    name[1023];
-       char    namenull;
-       int     userflags;
-       int     *zbuf;
-       void *userdata;
-       unsigned char *encodedbuffer;
-       unsigned int   encodedsize;
-       unsigned int   encodedbuffersize;
+#define IB_MIPMAP_LEVELS       10
+
+struct MEM_CacheLimiterHandle_s;
+
+typedef struct ImBuf {
+       struct ImBuf *next, *prev;      /**< allow lists of ImBufs, for caches or flipbooks */
+       short   x, y;                           /**< width and Height of our image buffer */
+       short   skipx;                          /**< Width in ints to get to the next scanline */
+       unsigned char   depth;          /**< Active amount of bits/bitplanes */
+       unsigned char   cbits;          /**< Amount of active bits in cmap */
+       unsigned short  mincol;         /**< smallest color in colormap */
+       unsigned short  maxcol;         /**< Largest color in colormap */
+       int     type;                                   /**< 0=abgr, 1=bitplanes */
+       int     ftype;                                  /**< File type we are going to save as */
+       unsigned int    *cmap;          /**< Color map data. */
+       unsigned int    *rect;          /**< pixel values stored here */
+       unsigned int    **planes;       /**< bitplanes */
+       int     flags;                          /**< Controls which components should exist. */
+       int     mall;                           /**< what is malloced internal, and can be freed */
+       short   xorig, yorig;           /**< Cordinates of first pixel of an image used in some formats (example: targa) */
+       char    name[1023];             /**< The file name assocated with this image */
+       char    namenull;               /**< Unused don't want to remove it thought messes things up */
+       int     userflags;                      /**< Used to set imbuf to Dirty and other stuff */
+       int     *zbuf;                          /**< z buffer data, original zbuffer */
+       float *zbuf_float;              /**< z buffer data, camera coordinates */
+       void *userdata;                 /**< temporary storage, only used by baking at the moment */
+       unsigned char *encodedbuffer;     /**< Compressed image only used with png currently */
+       unsigned int   encodedsize;       /**< Size of data written to encodedbuffer */
+       unsigned int   encodedbuffersize; /**< Size of encodedbuffer */
+
+       float *rect_float;              /**< floating point Rect equivilant */
+       int channels;                   /**< amount of channels in rect_float (0 = 4 channel default) */
+       float dither;                   /**< random dither value, for conversion from float -> byte rect */
+       
+       struct MEM_CacheLimiterHandle_s * c_handle; /**< handle for cache limiter */
+       struct ImgInfo * img_info;
+       int refcounter;                 /**< Refcounter for multiple users */
+       int index;                              /**< reference index for ImBuf lists */
+       
+       struct ImBuf *mipmap[IB_MIPMAP_LEVELS]; /**< MipMap levels, a series of halved images */
 } ImBuf;
 
-extern struct ImBuf *allocImBuf(short,short,uchar,uint,uchar);
-extern struct ImBuf *dupImBuf(struct ImBuf *);
-extern void freeImBuf(struct ImBuf*);
-
-extern short converttocmap(struct ImBuf* ibuf);
-
-extern short saveiff(struct ImBuf *,char *,int);
-
-extern struct ImBuf *loadiffmem(int *,int);
-extern struct ImBuf *loadifffile(int,int);
-extern struct ImBuf *loadiffname(char *,int);
-extern struct ImBuf *testiffname(char *,int);
-
-extern struct ImBuf *onehalf(struct ImBuf *);
-extern struct ImBuf *onethird(struct ImBuf *);
-extern struct ImBuf *halflace(struct ImBuf *);
-extern struct ImBuf *half_x(struct ImBuf *);
-extern struct ImBuf *half_y(struct ImBuf *);
-extern struct ImBuf *double_x(struct ImBuf *);
-extern struct ImBuf *double_y(struct ImBuf *);
-extern struct ImBuf *double_fast_x(struct ImBuf *);
-extern struct ImBuf *double_fast_y(struct ImBuf *);
-
-extern int ispic(char *);
-
-extern void dit2(struct ImBuf *, short, short);
-extern void dit0(struct ImBuf *, short, short);
-
-extern struct ImBuf *scaleImBuf(struct ImBuf *, short, short);
-extern struct ImBuf *scalefastImBuf(struct ImBuf *, short, short);
-extern struct ImBuf *scalefieldImBuf(struct ImBuf *, short, short);
-extern struct ImBuf *scalefastfieldImBuf(struct ImBuf *, short, short);
-
-/* Not sure if needed or not... was in the release version of this header.
-I think its old but figured I'd leave it for a bit just incase.
-mein@cs.umn.edu
-extern void floyd(struct ImBuf *, short, short);
-extern void dit3(struct ImBuf *, short, short);
-extern void dit4(struct ImBuf *, short, short);
-extern void (*ditherfunc)(struct ImBuf *, short, short);
-extern long getdither();
-*/
-
-extern void de_interlace(struct ImBuf *ib);
-extern void interlace(struct ImBuf *ib);
-extern void gamwarp(struct ImBuf *ibuf, double gamma);
-
-extern void rectop(struct ImBuf *dbuf, struct ImBuf *sbuf,
-                  int destx, int desty, int srcx,
-                  int srcy, int width, int height,
-                  void (*operation)(unsigned int *, unsigned int*, int, int),
-                  int value);
+LIBIMPORT struct ImBuf *allocImBuf(short,short,uchar,uint,uchar);
+LIBIMPORT struct ImBuf *dupImBuf(struct ImBuf *);
+LIBIMPORT void freeImBuf(struct ImBuf*);
+
+LIBIMPORT short converttocmap(struct ImBuf* ibuf);
+
+LIBIMPORT short saveiff(struct ImBuf *,char *,int);
+
+LIBIMPORT struct ImBuf *loadiffmem(int *,int);
+LIBIMPORT struct ImBuf *loadifffile(int,int);
+LIBIMPORT struct ImBuf *loadiffname(char *,int);
+LIBIMPORT struct ImBuf *testiffname(char *,int);
+
+LIBIMPORT struct ImBuf *onehalf(struct ImBuf *);
+LIBIMPORT struct ImBuf *onethird(struct ImBuf *);
+LIBIMPORT struct ImBuf *halflace(struct ImBuf *);
+LIBIMPORT struct ImBuf *half_x(struct ImBuf *);
+LIBIMPORT struct ImBuf *half_y(struct ImBuf *);
+LIBIMPORT struct ImBuf *double_x(struct ImBuf *);
+LIBIMPORT struct ImBuf *double_y(struct ImBuf *);
+LIBIMPORT struct ImBuf *double_fast_x(struct ImBuf *);
+LIBIMPORT struct ImBuf *double_fast_y(struct ImBuf *);
+
+LIBIMPORT int ispic(char *);
+
+LIBIMPORT void dit2(struct ImBuf *, short, short);
+LIBIMPORT void dit0(struct ImBuf *, short, short);
+
+LIBIMPORT struct ImBuf *scaleImBuf(struct ImBuf *, short, short);
+LIBIMPORT struct ImBuf *scalefastImBuf(struct ImBuf *, short, short);
+LIBIMPORT struct ImBuf *scalefieldImBuf(struct ImBuf *, short, short);
+LIBIMPORT struct ImBuf *scalefastfieldImBuf(struct ImBuf *, short, short);
+
+LIBIMPORT void de_interlace(struct ImBuf *ib);
+LIBIMPORT void interlace(struct ImBuf *ib);
+LIBIMPORT void gamwarp(struct ImBuf *ibuf, double gamma);
+
+LIBIMPORT void IMB_rectcpy(struct ImBuf *dbuf, struct ImBuf *sbuf, 
+       int destx, int desty, int srcx, int srcy, int width, int height);
+
+LIBIMPORT void IMB_rectfill(struct ImBuf *drect, float col[4]);
+LIBIMPORT void IMB_rectfill_area(struct ImBuf *ibuf, float *col, int x1, int y1, int x2, int y2);
+LIBIMPORT void buf_rectfill_area(unsigned char *rect, float *rectf, int width, int height, float *col, int x1, int y1, int x2, int y2);
 
 #endif /* IFF_H */