use set as a suffix (matches operators)
[blender.git] / source / blender / imbuf / IMB_imbuf.h
index 7f7b2b08a56d513ab8d06cbc3a9fc5808c06cd06..07b99dddfa57d32872bca0a475159bf070162da4 100644 (file)
  *     blenlib handles guarded memory management in blender-style.
  *     BLI_winstuff.h makes a few windows specific behaviours
  *     posix-compliant.
- * - avi
- *     avi defines import/export to the avi format. Only anim.c
- *     needs this. It uses the following functions:
- *       - avi_close
- *       - avi_is_avi
- *       - avi_print_error
- *       - avi_open_movie
- *       - avi_read_frame
- *       - avi_get_stream
- *     Additionally, it needs the types from the avi module.
- * - external jpeg library
- *     The jpeg lib defines import/export to the jpeg format.
- *     only jpeg.c needs these. Used functions are:
- *       - jpeg_destroy
- *       - jpeg_resync_to_restart
- *       - jpeg_set_marker_processor
- *       - jpeg_read_header
- *       - jpeg_start_decompress
- *       - jpeg_abort_decompress
- *       - jpeg_read_scanlines
- *       - jpeg_finish_decompress
- *       - jpeg_std_error
- *       - jpeg_create_decompress
- *       - jpeg_stdio_src
- *       - jpeg_start_compress
- *       - jpeg_write_marker
- *       - jpeg_write_scanlines
- *       - jpeg_finish_compress
- *       - jpeg_create_compress
- *       - jpeg_stdio_dest
- *       - jpeg_set_defaults
- *       - jpeg_set_quality
- *       - jpeg_destroy_compress
- *     Additionally, it needs the types from the jpeg lib.
  */
 /*
  * $Id$ 
  *
- * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
+ * ***** BEGIN GPL LICENSE BLOCK *****
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
  * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version. The Blender
- * Foundation also sells licenses for use in proprietary software under
- * the Blender License.  See http://www.blender.org/BL/ for information
- * about this.
+ * of the License, or (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -92,7 +55,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.
  *
  * Contributor(s): none yet.
  *
- * ***** END GPL/BL DUAL LICENSE BLOCK *****
+ * ***** END GPL LICENSE BLOCK *****
  */
+
 #ifndef IMB_IMBUF_H
 #define IMB_IMBUF_H
 
@@ -120,33 +84,16 @@ struct anim;
 
 /**
  *
- * @attention Defined in cmap.c
- */
-void IMB_freeImBufdata(void);
-
-/**
- *
- * @attention Defined in cmap.c
- */
-void IMB_applycmap(struct ImBuf *ibuf);
-
-/**
- *
- * @attention Defined in cmap.c
- */
-short IMB_converttocmap(struct ImBuf *ibuf);
-
-/**
- *
- * @attention Defined in cmap.c
+ * @attention Defined in allocimbuf.c
  */
-int IMB_alpha_to_col0(int new);
+void IMB_init(void);
+void IMB_exit(void);
 
 /**
  *
  * @attention Defined in readimage.c
  */
-struct ImBuf *IMB_ibImageFromMemory(int *mem, int size, int flags);
+struct ImBuf *IMB_ibImageFromMemory(unsigned char *mem, int size, int flags);
 
 /**
  *
@@ -158,13 +105,13 @@ struct ImBuf *IMB_testiffname(char *naam,int flags);
  *
  * @attention Defined in readimage.c
  */
-struct ImBuf *IMB_loadiffname(char *naam, int flags);
+struct ImBuf *IMB_loadiffname(const char *naam, int flags);
 
 /**
  *
  * @attention Defined in allocimbuf.c
  */
-void IMB_freeImBuf(struct ImBuf * ibuf);
+void IMB_freeImBuf(struct ImBuf *ibuf);
 
 /**
  *
@@ -175,52 +122,73 @@ struct ImBuf *IMB_allocImBuf(short x, short y,
                                                 unsigned char bitmap);
 
 /**
+ *
+ * Increase reference count to imbuf
+ * (to delete an imbuf you have to call freeImBuf as many times as it
+ * is referenced)
  *
  * @attention Defined in allocimbuf.c
  */
-struct ImBuf *IMB_dupImBuf(struct ImBuf *ibuf1);
+
+void IMB_refImBuf(struct ImBuf *ibuf);
 
 /**
  *
  * @attention Defined in allocimbuf.c
  */
-short addzbufImBuf(struct ImBuf * ibuf);
+void IMB_cache_limiter_insert(struct ImBuf *i);
+void IMB_cache_limiter_unmanage(struct ImBuf *i);
+void IMB_cache_limiter_touch(struct ImBuf *i);
+void IMB_cache_limiter_ref(struct ImBuf *i);
+void IMB_cache_limiter_unref(struct ImBuf *i);
+int IMB_cache_limiter_get_refcount(struct ImBuf *i);
+
+void IMB_free_cache_limiter(void);
 
 /**
  *
  * @attention Defined in allocimbuf.c
  */
-void IMB_freecmapImBuf(struct ImBuf * ibuf);
+struct ImBuf *IMB_dupImBuf(struct ImBuf *ibuf1);
 
 /**
  *
- * @attention Defined in rectop.c
+ * @attention Defined in allocimbuf.c
  */
-void IMB_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);
+short addzbufImBuf(struct ImBuf *ibuf);
+short addzbuffloatImBuf(struct ImBuf *ibuf);
 
 /**
  *
  * @attention Defined in rectop.c
  */
-void IMB_rectoptot(struct ImBuf *dbuf,
-                          struct ImBuf *sbuf,
-                          void (*operation)(unsigned int *, unsigned int*, int, int),
-                          int value);
 
-/**
- *
- * @attention Defined in rectop.c
- */
-void IMB_rectcpy(unsigned int *drect, unsigned int *srect, int x, int dummy);
+typedef enum IMB_BlendMode {
+       IMB_BLEND_MIX = 0,
+       IMB_BLEND_ADD = 1,
+       IMB_BLEND_SUB = 2,
+       IMB_BLEND_MUL = 3,
+       IMB_BLEND_LIGHTEN = 4,
+       IMB_BLEND_DARKEN = 5,
+       IMB_BLEND_ERASE_ALPHA = 6,
+       IMB_BLEND_ADD_ALPHA = 7,
+
+       IMB_BLEND_COPY = 1000,
+       IMB_BLEND_COPY_RGB = 1001,
+       IMB_BLEND_COPY_ALPHA = 1002
+} IMB_BlendMode;
+
+unsigned int IMB_blend_color(unsigned int src1, unsigned int src2, int fac,
+       IMB_BlendMode mode);
+void IMB_blend_color_float(float *dst, float *src1, float *src2, float fac,
+       IMB_BlendMode mode);
+
+void IMB_rectclip(struct ImBuf *dbuf, struct ImBuf *sbuf, int *destx, 
+       int *desty, int *srcx, int *srcy, int *width, int *height);
+void IMB_rectcpy(struct ImBuf *drect, struct ImBuf *srect, int destx,
+       int desty, int srcx, int srcy, int width, int height);
+void IMB_rectblend(struct ImBuf *dbuf, struct ImBuf *sbuf, int destx, 
+       int desty, int srcx, int srcy, int width, int height, IMB_BlendMode mode);
 
 /**
  * Return the length (in frames) of the given @a anim.
@@ -231,8 +199,8 @@ int IMB_anim_get_duration(struct anim *anim);
  *
  * @attention Defined in anim.c
  */
-struct anim * IMB_open_anim(char * name, int ib_flags);
-void IMB_close_anim(struct anim * anim);
+struct anim *IMB_open_anim(const char *name, int ib_flags);
+void IMB_close_anim(struct anim *anim);
 
 /**
  *
@@ -240,50 +208,53 @@ void IMB_close_anim(struct anim * anim);
  */
 
 int ismovie(char *name);
+void IMB_anim_set_preseek(struct anim *anim, int preseek);
+int IMB_anim_get_preseek(struct anim *anim);
 
 /**
  *
  * @attention Defined in anim.c
  */
 
-struct ImBuf * IMB_anim_absolute(struct anim * anim, int position);
+struct ImBuf *IMB_anim_absolute(struct anim *anim, int position);
 
 /**
  *
  * @attention Defined in anim.c
+ * fetches a define previewframe, usually half way into the movie
  */
-void IMB_free_anim_ibuf(struct anim * anim);
+struct ImBuf *IMB_anim_previewframe(struct anim *anim);
 
 /**
  *
  * @attention Defined in anim.c
  */
-void IMB_free_anim(struct anim * anim);
+void IMB_free_anim_ibuf(struct anim *anim);
 
 /**
  *
  * @attention Defined in anim.c
  */
-struct ImBuf * IMB_anim_nextpic(struct anim * anim);     
-
+void IMB_free_anim(struct anim *anim);
 
 /**
  *
- * @attention Defined in antialias.c
+ * @attention Defined in filter.c
  */
-void IMB_clever_double (struct ImBuf * ibuf);
+void IMB_filter(struct ImBuf *ibuf);
+void IMB_filterN(struct ImBuf *out, struct ImBuf *in);
+void IMB_filter_extend(struct ImBuf *ibuf, char *mask);
+void IMB_makemipmap(struct ImBuf *ibuf, int use_filter);
+struct ImBuf *IMB_getmipmap(struct ImBuf *ibuf, int level);
 
 /**
  *
- * @attention Defined in antialias.c
+ * @attention Defined in cache.c
  */
-void IMB_antialias(struct ImBuf * ibuf);
 
-/**
- *
- * @attention Defined in filter.c
- */
-void IMB_filter(struct ImBuf *ibuf);
+void IMB_tile_cache_params(int totthread, int maxmem);
+unsigned int *IMB_gettile(struct ImBuf *ibuf, int tx, int ty, int thread);
+void IMB_tiles_to_rect(struct ImBuf *ibuf);
 
 /**
  *
@@ -301,13 +272,7 @@ struct ImBuf *IMB_onehalf(struct ImBuf *ibuf1);
  *
  * @attention Defined in scaling.c
  */
-struct ImBuf *IMB_scaleImBuf(struct ImBuf * ibuf, short newx, short newy);
-
-/**
- *
- * @attention Defined in scaling.c
- */
-struct ImBuf *IMB_scalefieldImBuf(struct ImBuf *ibuf, short newx, short newy);
+struct ImBuf *IMB_scaleImBuf(struct ImBuf *ibuf, short newx, short newy);
 
 /**
  *
@@ -338,13 +303,13 @@ int IMB_ispic(char *name);
  *
  * @attention Defined in util.c
  */
-int IMB_isanim(char * name);
+int IMB_isanim(char *name);
 
 /**
  *
  * @attention Defined in util.c
  */
-int imb_get_anim_type(char * name);
+int imb_get_anim_type(char *name);
 
 /**
  *
@@ -352,19 +317,23 @@ int imb_get_anim_type(char * name);
  */
 void IMB_de_interlace(struct ImBuf *ibuf);
 void IMB_interlace(struct ImBuf *ibuf);
-void IMB_gamwarp(struct ImBuf *ibuf, double gamma);
+void IMB_rect_from_float(struct ImBuf *ibuf);
+void IMB_float_from_rect(struct ImBuf *ibuf);
+void IMB_float_from_rect_simple(struct ImBuf *ibuf); /* no profile conversion */
+/* note, check that the conversion exists, only some are supported */
+void IMB_convert_profile(struct ImBuf *ibuf, int profile);
 
 /**
- * Change the ordering of the colour bytes pointed to by rect from
- * rgba to abgr. size * 4 colour bytes are reordered.
+ * Change the ordering of the color bytes pointed to by rect from
+ * rgba to abgr. size * 4 color bytes are reordered.
  *
  * @attention Defined in imageprocess.c
  */
-void IMB_convert_rgba_to_abgr(int size, unsigned int *rect);
+void IMB_convert_rgba_to_abgr(struct ImBuf *ibuf);
 
 /**
- * Change the ordering of the colour bytes pointed to by rect from
- * rgba to abgr. size * 4 colour bytes are reordered.
+ * Change the ordering of the color bytes pointed to by rect from
+ * rgba to abgr. size * 4 color bytes are reordered.
  *
  * @attention Defined in imageprocess.c
  */
@@ -372,11 +341,16 @@ void IMB_convert_bgra_to_rgba(int size, unsigned int *rect);
 
 /**
  *
- * @attention defined in scaling.c
+ * @attention defined in imageprocess.c
  */
-struct ImBuf *IMB_scalefastfieldImBuf(struct ImBuf *ibuf,
-                                                                         short newx,
-                                                                         short newy);
+void bicubic_interpolation(struct ImBuf *in, struct ImBuf *out, float u, float v, int xout, int yout);
+void neareast_interpolation(struct ImBuf *in, struct ImBuf *out, float u, float v, int xout, int yout);
+void bilinear_interpolation(struct ImBuf *in, struct ImBuf *out, float u, float v, int xout, int yout);
+
+void bicubic_interpolation_color(struct ImBuf *in, unsigned char *col, float *col_float, float u, float v);
+void neareast_interpolation_color(struct ImBuf *in, unsigned char *col, float *col_float, float u, float v);
+void bilinear_interpolation_color(struct ImBuf *in, unsigned char *col, float *col_float, float u, float v);
+void bilinear_interpolation_color_wrap(struct ImBuf *in, unsigned char *col, float *col_float, float u, float v);
 
 /**
  *
@@ -430,87 +404,47 @@ struct ImBuf *IMB_double_fast_y(struct ImBuf *ibuf1);
  */
 struct ImBuf *IMB_double_y(struct ImBuf *ibuf1);
 
-/**
- *
- * @attention defined in scaling.c
- */
-struct ImBuf *IMB_onethird(struct ImBuf *ibuf1);
-
-/**
- *
- * @attention defined in scaling.c
- */
-struct ImBuf *IMB_halflace(struct ImBuf *ibuf1);
-
-/**
- *
- * @attention defined in dither.c
- */
-void IMB_dit2(struct ImBuf * ibuf, short ofs, short bits);
-
-/**
- *
- * @attention defined in dither.c
- */
-void IMB_dit0(struct ImBuf * ibuf, short ofs, short bits);
-
-/** Externally used vars: fortunately they do not use funny types */
-
-/**
- * boolean toggle that tells whether or not to
- * scale the colour map in the y-direction.
- *
- * @attention declared in hamx.c
- */
-extern int scalecmapY;
-
-/**
- * This 'matrix' defines the transformation from rgb to bw colour
- * maps. You need to do a sort of dot-product for that. It is a matrix
- * with fixed coefficients, extracted from some book.
- *
- * @attention Defined in matrix.h, only included in hamx.c
- */
-extern float rgb_to_bw[4][4]; 
-
 /**
  *
  * @attention Defined in rotate.c
  */
-void IMB_flipy(struct ImBuf * ibuf);
+void IMB_flipx(struct ImBuf *ibuf);
+void IMB_flipy(struct ImBuf *ibuf);
 
-/**
- *
- * @attention Defined in cspace.c
- */
-void IMB_cspace(struct ImBuf *ibuf, float mat[][4]);
+/* Premultiply alpha */
+
+void IMB_premultiply_alpha(struct ImBuf *ibuf);
 
 /**
  *
  * @attention Defined in allocimbuf.c
  */
-void IMB_freezbufImBuf(struct ImBuf * ibuf);
+void IMB_freezbufImBuf(struct ImBuf *ibuf);
+void IMB_freezbuffloatImBuf(struct ImBuf *ibuf);
 
 /**
  *
  * @attention Defined in rectop.c
  */
-void IMB_rectfill(unsigned int *drect, unsigned int *srect, int x, int value);
+void IMB_rectfill(struct ImBuf *drect, float col[4]);
+void IMB_rectfill_area(struct ImBuf *ibuf, float *col, int x1, int y1, int x2, int y2);
 
+/* this should not be here, really, we needed it for operating on render data, IMB_rectfill_area calls it */
+void buf_rectfill_area(unsigned char *rect, float *rectf, int width, int height, float *col, int x1, int y1, int x2, int y2);
 
-#ifdef WITH_QUICKTIME
-/**
- *
- * @attention Defined in quicktime_import.c
- */
-void quicktime_init(void);
+/* defined in metadata.c */
+int IMB_metadata_change_field(struct ImBuf *img, const char *key, const char *field);
 
-/**
- *
- * @attention Defined in quicktime_import.c
- */
-void quicktime_exit(void);
+/* exported for image tools in blender, to quickly allocate 32 bits rect */
+short imb_addrectImBuf(struct ImBuf *ibuf);
+void imb_freerectImBuf(struct ImBuf *ibuf);
 
-#endif //WITH_QUICKTIME
+short imb_addrectfloatImBuf(struct ImBuf *ibuf);
+void imb_freerectfloatImBuf(struct ImBuf *ibuf);
+void imb_freemipmapImBuf(struct ImBuf *ibuf);
+
+short imb_addtilesImBuf(struct ImBuf *ibuf);
+void imb_freetilesImBuf(struct ImBuf *ibuf);
 
 #endif
+